我正在使用电报bot api制作机器人。我有一些命令只能从管理员发送。喜欢kick和ban命令。如何检查发件人是否是管理员?我正在使用python-telegram-bot
api。我不希望每个人都能禁止会员。
答案 0 :(得分:1)
答案 1 :(得分:1)
我找了一下后发现了。管理员状态存储在Telegram.ChatMember.status
下。记录here。它由bot.get_chat_member(chat_id, user_id)
使用。然后获得状态。
答案 2 :(得分:0)
其他答案是正确的,但需要额外调用API。一种有效的解决方案是缓存管理员列表。
这是一个很好的解决方案here,复制如下:
如果要将某些机器人功能限制为组管理员,则必须测试用户是否是相关组中的管理员。然而,这需要额外的API请求,这就是为什么在一段时间内缓存此信息是有意义的,特别是如果您的机器人非常繁忙。
此代码段需要this timeout-based cache decorator。 (gist mirror)
将装饰器保存到名为mwt.py
的新文件中,并将此行添加到导入中:
from mwt import MWT
然后,将以下修饰函数添加到您的脚本中。您可以根据需要更改超时。
@MWT(timeout=60*60)
def get_admin_ids(bot, chat_id):
"""Returns a list of admin IDs for a given chat. Results are cached for 1 hour."""
return [admin.user.id for admin in bot.get_chat_administrators(chat_id)]
然后你可以使用这样的函数:
if update.message.from_user.id in get_admin_ids(bot, update.message.chat_id):
# admin only
注意:此代码段不包含具有all_members_are_administrator
标记的私人聊天记录和群组。确保你处理它们。