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

Telegram check if user is admin

我正在使用电报机器人 api 制作一个机器人。我有一些只能从管理员发送的命令。就像踢和禁止命令一样。如何检查发件人是否是管理员?我正在使用 python-telegram-bot api。我不希望每个人都可以禁止成员。

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

搜索了一下,找到了。管理员状态存储在 Telegram.ChatMember.status 下。它被记录在案 here。它被 bot.get_chat_member(chat_id, user_id) 使用。然后在其中获取状态。

其他答案是正确的,但需要额外调用 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 标记的私人聊天和群组不在此片段中。确保你处理好它们。