怎么让Telegram机器人只对指定人开放?
4 个回答
这个需求很常见,实现也不难,关键在于加一层身份认证。
要获得用户ID,这个可以在用户给机器人发送消息的时候获取到(从update.message.from_user.id获取)。
创建白名单列表,whitelist = [123456, 654321]等。
在执行用户指令之前,首先判断该用户ID是否在白名单内,不在则回复"无权限操作"
如果是python的话,建议在python-telegram-bot的handler前加一个权限检查的decorator。这样所有的命令都可以统一检查。
记得把自己ID放进去,不然容易把自己锁外面。
群里几个老铁id你可以让他们和机器人私聊一次,你后台记下来。
手动名单虽然需要手动维护,但安全可靠,能保证只有指定的人可以与你的机器人进行交互。
Telegram机器人权限控制可以分为两步实现。
1. 机器人过滤代码层 - 在收到消息后,首先判断发送者是否在白名单,发送者Id可通过getUpdates接口获取。
2. 激活隐私模式 - 在@BotFather中,将机器人设置成 "Private" 模式,这样陌生人就无法通过命令来触发机器人。
建议先自己实现一个基于第一种方式的id白名单校验逻辑,代码实现不复杂,网上有很多现成示例代码。
群内老铁添加机器人后,你手动发信息激活一下关系即可。
设置后需要测试白名单用户可以正常访问。
你的代码里可以添加一个白名单判断,当接受到消息后,可以判断消息的发送者的ID是否是在允许发送的ID列表中,如果不在则忽略。具体的实现可以分为以下几步:
1. 获取你信任用户的Telegram ID,不是用户名,而是数字唯一ID
2. 在机器人代码入口处加入身份校验(不同语言实现不同)
3. 可选项:设置管理员指令,远程添加/删除白名单
代码层面实现最稳妥,其他方式易绕过。使用python-telegram-bot库写机器人,它会自动将用户ID带上,方便做这步判断。测试边界情况,例如ID伪装攻击。
你的机器人添加用户身份校验,比如发送命令的时候先查下用户id是否为白名单。具体实现如下:
/
1. 在机器人代码中取得用户ID,每一个Telegram账号都有唯一的ID
2. 制作一个白名单,把你那几个老铁的id放进去
3. 收到消息时判断ID是否在白名单,不在则直接忽略或回复“无权限”
4. 让用户先发一个指定暗号,比如“老铁认证”,然后你手动添加他们的id进白名单
这样就可以做到控制谁可以谁不可,代码层面用python的话,用if user_id in 白名单就行,其他语言类似。