web-dev-qa-db-ja.com

テレグラムボットへのアクセスを制限する方法

Telegram Botにメッセージを送信すると、問題なく応答します。

私と私だけがメッセージを送信できるようにアクセスを制限したいと思います。

どうやってやるの?

10
E.B

フィールドでメッセージをフィルタリングするupdate.message.from.id

8
ihoru

この質問はpython-telegram-botに関連しているため、以下の情報はそれに関連しています。

ボットのディスパッチャーにハンドラーを追加するときは、さまざまなビルド済みフィルターを指定するか(詳細は docsgithub )、カスタムフィルターを作成して着信をフィルター処理できます更新。

特定のユーザーへのアクセスを制限するには、ハンドラーを初期化するときにFilters.user(username="@telegramusername")を追加する必要があります。例:

dispatcher.add_handler(CommandHandler("start", text_callback, Filters.user(username="@username")))

このハンドラーは、ユーザー名/startのユーザーからのみ@usernameコマンドを受け入れます。

ユーザー名の代わりにユーザーIDを指定することもできます。後者は一定ではなく、時間の経過とともに変更される可能性があるため、強くお勧めします。

8
gyunter

ボットとの会話を開始し、メッセージを送信します。これにより、メッセージと会話のチャット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)
3
fdicarlo

に基づく - 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))
2
Pronex

update.message.chat_idによるフィルタリングは私にとってはうまくいきます。チャットIDを見つけるには、ボットにメッセージを送信して、

https://api.telegram.org/bot$TOKEN/getUpdates

ここで、$TOKENは、fdicarloによる回答で言及されているように、BotFatherによって提供されるボットトークンです。ここで、json構造でチャットIDを見つけることができます。

0
Dave Reikher