【问题标题】: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_result 和rolesIDuserHas 看看是否真的有有任何共同的ID。
  • 也是关于 SQL 注入攻击的强制性警告。
  • @JohnGordon 好的,所以我尝试了你的建议,没有任何改变,我面临同样的问题。

标签: python sqlite discord discord.py discord.py-rewrite


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 2023-03-03
    • 2021-07-06
    • 1970-01-01
    • 2021-03-31
    • 2010-12-22
    相关资源
    最近更新 更多