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_result
和rolesIDuserHas
看看是否真的有有任何共同的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) 检查消息是不是包含列表中的元素的正确方法是啥?