Telegram Botにメッセージを送信すると、問題なく応答します。
私と私だけがメッセージを送信できるようにアクセスを制限したいと思います。
どうやってやるの?
フィールドでメッセージをフィルタリングするupdate.message.from.id
この質問はpython-telegram-botに関連しているため、以下の情報はそれに関連しています。
ボットのディスパッチャーにハンドラーを追加するときは、さまざまなビルド済みフィルターを指定するか(詳細は docs 、 github )、カスタムフィルターを作成して着信をフィルター処理できます更新。
特定のユーザーへのアクセスを制限するには、ハンドラーを初期化するときにFilters.user(username="@telegramusername")
を追加する必要があります。例:
dispatcher.add_handler(CommandHandler("start", text_callback, Filters.user(username="@username")))
このハンドラーは、ユーザー名/start
のユーザーからのみ@username
コマンドを受け入れます。
ユーザー名の代わりにユーザーIDを指定することもできます。後者は一定ではなく、時間の経過とともに変更される可能性があるため、強くお勧めします。
ボットとの会話を開始し、メッセージを送信します。これにより、メッセージと会話のチャットIDを含むボットの更新がキューに入れられます。
最近の更新を表示するには、getUpdatesメソッドを呼び出します。これは、URLに対してHTTP GETリクエストを行うことによって行われます https://api.telegram.org/bot $ TOKEN/getUpdatesここで、$ TOKENはBotFatherによって提供されるトークンです。何かのようなもの:
"chat":{
"id":12345,
"first_name":"Bob",
"last_name":"Jones",
"username":"bjones",
"type":"private"},
"date":1452933785,
"text":"Hi there, bot!"}}]}
チャットIDを決定したら、ボットに次のようなコードを記述できます。
id_a = [111111,2222222,3333333,4444444,5555555]
def handle(msg):
chat_id = msg['chat']['id']
command = msg['text']
sender = msg['from']['id']
if sender in id_a:
[...]
else:
bot.sendMessage(chat_id, 'Forbidden access!')
bot.sendMessage(chat_id, sender)
に基づく - python-telegram-bot
コードスニペット。ハンドラーの周りに単純なラッパーを作成できます。
def restricted(func):
"""Restrict usage of func to allowed users only and replies if necessary"""
@wraps(func)
def wrapped(bot, update, *args, **kwargs):
user_id = update.effective_user.id
if user_id not in conf['restricted_ids']:
print("WARNING: Unauthorized access denied for {}.".format(user_id))
update.message.reply_text('User disallowed.')
return # quit function
return func(bot, update, *args, **kwargs)
return wrapped
どこ conf['restricted_ids']
はIDリストである可能性があります。例: [11111111, 22222222]
。
したがって、使用法は次のようになります。
@restricted
def bot_start(bot, update):
"""Send a message when the command /start is issued"""
update.message.reply_text('Hi! This is {} speaking.'.format(bot.username))
update.message.chat_id
によるフィルタリングは私にとってはうまくいきます。チャットIDを見つけるには、ボットにメッセージを送信して、
https://api.telegram.org/bot$TOKEN/getUpdates
ここで、$TOKEN
は、fdicarloによる回答で言及されているように、BotFatherによって提供されるボットトークンです。ここで、json構造でチャットIDを見つけることができます。