电报检查用户是否为管理员

时间:2018-01-07 11:35:44

标签: telegram-bot python-telegram-bot

我正在使用电报bot api制作机器人。我有一些命令只能从管理员发送。喜欢kick和ban命令。如何检查发件人是否是管理员?我正在使用python-telegram-bot api。我不希望每个人都能禁止会员。

3 个答案:

答案 0 :(得分:1)

您可以使用getChatMember方法。请参阅以下实例:

Awesome Telegram Bot

答案 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标记的私人聊天记录和群组。确保你处理它们。