Discord.py:检查用户是不是具有列表中的角色 ID 不起作用

Posted

技术标签:

【中文标题】Discord.py:检查用户是不是具有列表中的角色 ID 不起作用【英文标题】:Discord.py: Check if user has role ID from list not workingDiscord.py:检查用户是否具有列表中的角色 ID 不起作用 【发布时间】:2021-04-08 02:39:33 【问题描述】:

我目前正在为我的 Discord.py 机器人进行反应角色配置,但在尝试将用户列入黑名单以获取角色时遇到了问题。这是我的代码:

    cursor.execute(f"SELECT blacklists FROM reactionroles WHERE message_id = payload.message_id AND emojis = 'reaction'")

    blacklist_result = cursor.fetchone()

    member = payload.member

    rolesUserHas = member.roles
    rolesIDuserHas = []

    for role in rolesUserHas:
      rolesIDuserHas.append(role.id)
      print(rolesIDuserHas)

    if any(item in blacklist_result for item in rolesIDuserHas):
      await member.send(f'x_mark You are blacklisted from picking up roles from that message.')
      return
    else:
      pass

但是,当我给自己一个列入黑名单的角色时,它并没有取消或通知我,它只是继续这个过程,就好像它认为我没有这个角色一样。没有给出错误,我不知道为什么会这样。

【问题讨论】:

恕我直言,这个问题属于 github:github.com/Rapptz/discord.py/issues SQL 结果以 rows 的形式获取,实现为列表。 blacklist_result 实际上是一个值的列表。所以你想使用blacklist_result = cursor.fetchone()[0] blacklists 是否肯定包含您要列入黑名单的角色 ID(作为整数)?您是否在任何地方都有错误处理程序来吞噬错误?打印出blacklist_resultrolesIDuserHas 看看是否真的有任何共同的ID。 也是关于 SQL 注入攻击的强制性警告。 @JohnGordon 好的,所以我尝试了你的建议,没有任何改变,我面临同样的问题。 【参考方案1】:

请注意,discord.py 中的每个id 属性都是以 10 为底的整数,而不是字符串。将您的数据库结果转换为整数,或将 ids 转换为字符串:

role_ids = list(map(str, [r.id for r in member.roles]))

【讨论】:

以上是关于Discord.py:检查用户是不是具有列表中的角色 ID 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

我的 discord.py 机器人有啥方法可以检查用户是不是具有使用命令的特定权限?

(discord.py) 检查消息是不是包含列表中的元素的正确方法是啥?

检查语音频道中的人是不是打开了视频(discord.py)[关闭]

如何检查用户是不是提供了参数 discord.py

discord.py - 检查是不是找不到子命令

检查用户是不是在语音频道 discord.py