質問編集履歴

3

詳細を記載

2021/04/27 15:24

投稿

salah0615
salah0615

スコア49

test CHANGED
File without changes
test CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
 
4
4
 
5
+ [telegram_github](https://github.com/kotarotanaka0123/telegram)
6
+
7
+
8
+
9
+ こちらにtelegramのpythonライブラリを載せました。
10
+
11
+
12
+
5
13
  使用しているバージョンは
6
14
 
7
15
  telegram: 2.7.1
@@ -38,140 +46,156 @@
38
46
 
39
47
 
40
48
 
49
+ このCallbackContextがmessageを持っていない、というのは、
50
+
51
+ おそらくcallbackcontext.pyのCallbackContextクラスにmessageが定義されていないということだと思うのですが、どのようにmessageを実装したら良いのでしょうか。
52
+
53
+ そもそも問題はそこなのでしょうか。
54
+
55
+ コード自体が難解で、あまりpythonにも慣れていないのですが、まずは色々な対話システムを実行してみたいので
56
+
41
- なぜでしょうか? 丸投げのような形になりますが、解決方法がわかる方よろしくお願いします。
57
+ 解決方法がわかる方よろしくお願いいたします。
42
-
43
-
44
-
58
+
59
+
60
+
61
+
62
+
45
- 一応、エラーの箇所だけコードをておきます。
63
+ は入力た文字をそのま返対話システムです(例)
46
-
64
+
65
+
66
+
47
- ```python
67
+ ```python3
48
-
68
+
49
- #handler.py
69
+ #telegram_bot.py
50
-
51
-
52
-
53
- if context:
70
+
54
-
71
+
72
+
73
+
74
+
55
- self.collect_additional_context(context, update, dispatcher, check_result)
75
+ from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
76
+
77
+
78
+
56
-
79
+ # アクセストークン(先ほど発行されたアクセストークンに書き換えてください)
80
+
81
+ TOKEN = " "
82
+
83
+
84
+
85
+
86
+
87
+ class TelegramBot:
88
+
89
+ def __init__(self, system):
90
+
91
+ self.system = system
92
+
93
+
94
+
95
+ def start(self, bot, update):
96
+
97
+ # 辞書型 inputにユーザIDを設定
98
+
99
+ input = {'utt': None, 'sessionId': str(update.message.from_user.id)}
100
+
101
+
102
+
103
+ # システムからの最初の発話をinitial_messageから取得し,送信
104
+
105
+ update.message.reply_text(self.system.initial_message(input)["utt"])
106
+
107
+
108
+
109
+ def message(self, bot, update):
110
+
111
+ # 辞書型 inputにユーザからの発話とユーザIDを設定
112
+
113
+ input = {'utt': update.message.text, 'sessionId': str(update.message.from_user.id)}
114
+
115
+
116
+
117
+ # replyメソッドによりinputから発話を生成
118
+
119
+ system_output = self.system.reply(input)
120
+
121
+
122
+
123
+ # 発話を送信
124
+
125
+ update.message.reply_text(system_output["utt"])
126
+
127
+
128
+
57
- if run_async:
129
+ def run(self):
130
+
58
-
131
+ updater = Updater(TOKEN)
132
+
133
+ dp = updater.dispatcher
134
+
135
+ dp.add_handler(CommandHandler("start", self.start))
136
+
59
- return dispatcher.run_async(self.callback, update, context, update=update)
137
+ dp.add_handler(MessageHandler(Filters.text, self.message))
60
-
138
+
61
- return self.callback(update, context)
139
+ updater.start_polling()
140
+
141
+ updater.idle()
142
+
143
+
144
+
145
+
62
146
 
63
147
  ```
64
148
 
65
149
 
66
150
 
67
- ```python
151
+ ```python3
68
-
152
+
69
- #dispatcher.py
153
+ #echo_system.py
154
+
155
+
156
+
157
+
158
+
70
-
159
+ from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
160
+
71
-
161
+ from telegram_bot import TelegramBot
162
+
163
+
164
+
72
-
165
+ # ユーザの入力をそのまま返す対話システム.
166
+
167
+ class EchoSystem:
168
+
169
+ def __init__(self):
170
+
171
+ pass
172
+
173
+
174
+
175
+ def initial_message(self, input):
176
+
177
+ return {'utt': 'こんにちは。対話を始めましょう。', 'end':False}
178
+
179
+
180
+
73
- for group in self.groups:
181
+ def reply(self, input):
74
-
75
- try:
182
+
76
-
77
- for handler in self.handlers[group]:
78
-
79
- check = handler.check_update(update)
80
-
81
- if check is not None and check is not False:
183
+ return {"utt": input['utt'], "end": False}
82
-
184
+
185
+
186
+
187
+
188
+
83
- if not context and self.use_context:
189
+ if __name__ == '__main__':
84
-
85
- context = CallbackContext.from_update(update, self)
190
+
86
-
87
- handled = True
191
+ system = EchoSystem()
88
-
192
+
89
- sync_modes.append(handler.run_async)
193
+ bot = TelegramBot(system)
90
-
91
- handler.handle_update(update, self, check, context)
194
+
92
-
93
- break
195
+ bot.run()
196
+
197
+
198
+
199
+
94
200
 
95
201
  ```
96
-
97
-
98
-
99
- ```python
100
-
101
- #telegram_bot.py
102
-
103
-
104
-
105
-
106
-
107
- from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
108
-
109
-
110
-
111
- # アクセストークン(先ほど発行されたアクセストークンに書き換えてください)
112
-
113
- TOKEN = "ーーーーーーーーーー"
114
-
115
-
116
-
117
-
118
-
119
- class TelegramBot:
120
-
121
- def __init__(self, system):
122
-
123
- self.system = system
124
-
125
-
126
-
127
- def start(self, bot, update):
128
-
129
- # 辞書型 inputにユーザIDを設定
130
-
131
- input = {'utt': None, 'sessionId': str(update.message.from_user.id)}
132
-
133
-
134
-
135
- # システムからの最初の発話をinitial_messageから取得し,送信
136
-
137
- update.message.reply_text(self.system.initial_message(input)["utt"])
138
-
139
-
140
-
141
- def message(self, bot, update):
142
-
143
- # 辞書型 inputにユーザからの発話とユーザIDを設定
144
-
145
- input = {'utt': update.message.text, 'sessionId': str(update.message.from_user.id)}
146
-
147
-
148
-
149
- # replyメソッドによりinputから発話を生成
150
-
151
- system_output = self.system.reply(input)
152
-
153
-
154
-
155
- # 発話を送信
156
-
157
- update.message.reply_text(system_output["utt"])
158
-
159
-
160
-
161
- def run(self):
162
-
163
- updater = Updater(TOKEN)
164
-
165
- dp = updater.dispatcher
166
-
167
- dp.add_handler(CommandHandler("start", self.start))
168
-
169
- dp.add_handler(MessageHandler(Filters.text, self.message))
170
-
171
- updater.start_polling()
172
-
173
- updater.idle()
174
-
175
-
176
-
177
- ```

2

tokenを隠した

2021/04/27 15:24

投稿

salah0615
salah0615

スコア49

test CHANGED
File without changes
test CHANGED
@@ -5,6 +5,8 @@
5
5
  使用しているバージョンは
6
6
 
7
7
  telegram: 2.7.1
8
+
9
+ python: 3.7.5
8
10
 
9
11
  です。
10
12
 
@@ -108,7 +110,7 @@
108
110
 
109
111
  # アクセストークン(先ほど発行されたアクセストークンに書き換えてください)
110
112
 
111
- TOKEN = "1704029777:AAEn-j1xI_Mlx_Cs1KuHtre4XBnZpN_2QJQ"
113
+ TOKEN = "ーーーーーーーーーー"
112
114
 
113
115
 
114
116
 

1

内容が不十分の状態で投稿されてしまったので、再度記載しました。

2021/04/22 13:49

投稿

salah0615
salah0615

スコア49

test CHANGED
File without changes
test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
 
14
14
 
15
- python3 *.pyを実行し、telegramでbotに対して、/start と入力すると下記のようなえら
15
+ python3 *.pyを実行し、telegramでbotに対して、/start と入力すると下記のようなエラが発生します。
16
16
 
17
17
 
18
18
 
@@ -33,3 +33,143 @@
33
33
  input = {'utt': None, 'sessionId': str(update.message.from_user.id)}
34
34
 
35
35
  AttributeError: 'CallbackContext' object has no attribute 'message'
36
+
37
+
38
+
39
+ なぜでしょうか? 丸投げのような形になりますが、解決方法がわかる方よろしくお願いします。
40
+
41
+
42
+
43
+ 一応、エラーの箇所だけコードを記載しておきます。
44
+
45
+ ```python
46
+
47
+ #handler.py
48
+
49
+
50
+
51
+ if context:
52
+
53
+ self.collect_additional_context(context, update, dispatcher, check_result)
54
+
55
+ if run_async:
56
+
57
+ return dispatcher.run_async(self.callback, update, context, update=update)
58
+
59
+ return self.callback(update, context)
60
+
61
+ ```
62
+
63
+
64
+
65
+ ```python
66
+
67
+ #dispatcher.py
68
+
69
+
70
+
71
+ for group in self.groups:
72
+
73
+ try:
74
+
75
+ for handler in self.handlers[group]:
76
+
77
+ check = handler.check_update(update)
78
+
79
+ if check is not None and check is not False:
80
+
81
+ if not context and self.use_context:
82
+
83
+ context = CallbackContext.from_update(update, self)
84
+
85
+ handled = True
86
+
87
+ sync_modes.append(handler.run_async)
88
+
89
+ handler.handle_update(update, self, check, context)
90
+
91
+ break
92
+
93
+ ```
94
+
95
+
96
+
97
+ ```python
98
+
99
+ #telegram_bot.py
100
+
101
+
102
+
103
+
104
+
105
+ from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
106
+
107
+
108
+
109
+ # アクセストークン(先ほど発行されたアクセストークンに書き換えてください)
110
+
111
+ TOKEN = "1704029777:AAEn-j1xI_Mlx_Cs1KuHtre4XBnZpN_2QJQ"
112
+
113
+
114
+
115
+
116
+
117
+ class TelegramBot:
118
+
119
+ def __init__(self, system):
120
+
121
+ self.system = system
122
+
123
+
124
+
125
+ def start(self, bot, update):
126
+
127
+ # 辞書型 inputにユーザIDを設定
128
+
129
+ input = {'utt': None, 'sessionId': str(update.message.from_user.id)}
130
+
131
+
132
+
133
+ # システムからの最初の発話をinitial_messageから取得し,送信
134
+
135
+ update.message.reply_text(self.system.initial_message(input)["utt"])
136
+
137
+
138
+
139
+ def message(self, bot, update):
140
+
141
+ # 辞書型 inputにユーザからの発話とユーザIDを設定
142
+
143
+ input = {'utt': update.message.text, 'sessionId': str(update.message.from_user.id)}
144
+
145
+
146
+
147
+ # replyメソッドによりinputから発話を生成
148
+
149
+ system_output = self.system.reply(input)
150
+
151
+
152
+
153
+ # 発話を送信
154
+
155
+ update.message.reply_text(system_output["utt"])
156
+
157
+
158
+
159
+ def run(self):
160
+
161
+ updater = Updater(TOKEN)
162
+
163
+ dp = updater.dispatcher
164
+
165
+ dp.add_handler(CommandHandler("start", self.start))
166
+
167
+ dp.add_handler(MessageHandler(Filters.text, self.message))
168
+
169
+ updater.start_polling()
170
+
171
+ updater.idle()
172
+
173
+
174
+
175
+ ```