telegamについて
こちらにtelegramのpythonライブラリを載せました。
使用しているバージョンは
telegram: 2.7.1
python: 3.7.5
です。
python3 *.pyを実行し、telegramでbotに対して、/start と入力すると下記のようなエラーが発生します。
No error handlers are registered, logging exception.
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/telegram/ext/dispatcher.py", line 442, in process_update
handler.handle_update(update, self, check, context)
File "/usr/local/lib/python3.7/site-packages/telegram/ext/handler.py", line 160, in handle_update
return self.callback(update, context)
File "/Users/tanakakoutarou/Projects/dsbook/telegram_bot.py", line 13, in start
input = {'utt': None, 'sessionId': str(update.message.from_user.id)}
AttributeError: 'CallbackContext' object has no attribute 'message'
このCallbackContextがmessageを持っていない、というのは、
おそらくcallbackcontext.pyのCallbackContextクラスにmessageが定義されていないということだと思うのですが、どのようにmessageを実装したら良いのでしょうか。
そもそも問題はそこなのでしょうか。
コード自体が難解で、あまりpythonにも慣れていないのですが、まずは色々な対話システムを実行してみたいので
解決方法がわかる方よろしくお願いいたします。
下記は入力した文字をそのまま返す対話システムです。(例)
python3
1#telegram_bot.py 2 3 4from telegram.ext import Updater, CommandHandler, MessageHandler, Filters 5 6# アクセストークン(先ほど発行されたアクセストークンに書き換えてください) 7TOKEN = " " 8 9 10class TelegramBot: 11 def __init__(self, system): 12 self.system = system 13 14 def start(self, bot, update): 15 # 辞書型 inputにユーザIDを設定 16 input = {'utt': None, 'sessionId': str(update.message.from_user.id)} 17 18 # システムからの最初の発話をinitial_messageから取得し,送信 19 update.message.reply_text(self.system.initial_message(input)["utt"]) 20 21 def message(self, bot, update): 22 # 辞書型 inputにユーザからの発話とユーザIDを設定 23 input = {'utt': update.message.text, 'sessionId': str(update.message.from_user.id)} 24 25 # replyメソッドによりinputから発話を生成 26 system_output = self.system.reply(input) 27 28 # 発話を送信 29 update.message.reply_text(system_output["utt"]) 30 31 def run(self): 32 updater = Updater(TOKEN) 33 dp = updater.dispatcher 34 dp.add_handler(CommandHandler("start", self.start)) 35 dp.add_handler(MessageHandler(Filters.text, self.message)) 36 updater.start_polling() 37 updater.idle() 38 39
python3
1#echo_system.py 2 3 4from telegram.ext import Updater, CommandHandler, MessageHandler, Filters 5from telegram_bot import TelegramBot 6 7# ユーザの入力をそのまま返す対話システム. 8class EchoSystem: 9 def __init__(self): 10 pass 11 12 def initial_message(self, input): 13 return {'utt': 'こんにちは。対話を始めましょう。', 'end':False} 14 15 def reply(self, input): 16 return {"utt": input['utt'], "end": False} 17 18 19if __name__ == '__main__': 20 system = EchoSystem() 21 bot = TelegramBot(system) 22 bot.run() 23 24
回答2件
あなたの回答
tips
プレビュー