关于新角色不和谐的消息[关闭]
Posted
技术标签:
【中文标题】关于新角色不和谐的消息[关闭]【英文标题】:Message on new role discord [closed] 【发布时间】:2022-01-23 08:51:15 【问题描述】:我尝试编写一个机器人,当我将某个角色分配给公会成员时,机器人会在频道中发送一条消息。 我希望机器人只为我知道其 ID 的某个角色发送消息
有人可以帮助我吗?
【问题讨论】:
欢迎来到*** la_teigne!你有任何你尝试过的代码吗? Stack 不是代码编写服务,而是我们将帮助您改进已有的内容。这称为minimal, reproducible example。也请访问How to ask a good question?。谢谢! 【参考方案1】:每次更新成员时,您可以使用on_member_update()
事件来检查更新成员的新添加角色。
先决条件
这需要启用Intents.members
。确保通过脚本启用意图,如果需要,还可以从不和谐开发者门户启用,否则以下方法将不起作用。
程序
-
使用
on_member_update()
事件触发函数调用。这为您提供了两个对象作为参数,before
和 after
。
比较before.roles
和after.roles
,如果第二个有更多成员,这仅仅意味着添加了一个新角色(这是问题中提出的)。如果是,请继续执行第 3 步。
通过与before.roles
比较,拉出新增的角色。
向提到的频道(在问题中)发送消息,您也可以使用前后数据提取可以在消息中发送的任何进一步详细信息。
示例
@client.event
async def on_member_update(before, after):
if len(before.roles) < len(after.roles):
added_role = next(role for role in after.roles if role not in before.roles)
channel = bot.get_channel('1234567890')
await channel.send("Your message")
# try sending the newly added role's name for example
await channel.send(f"Look at that! **after.nick** got new shiny **added_role.name** role!"
资源
before
, after
参数是 Member
对象
更多关于discord.Intents
【讨论】:
请不要回答没有任何自己贡献的问题。这可能是很好的意思,但最终没有帮助。 好的,谢谢,我也想过比较角色列表的大小,但我还不明白以下行。您的代码很好,但它对添加的每个角色都执行此操作,是否可以仅针对我们知道其 ID 的一个角色执行此操作? @la_teigne 在找到added_role
之后,只需添加一个额外的 if 语句,将 added_role.id
与您拥有的 id 进行比较以上是关于关于新角色不和谐的消息[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何使用机器人删除不和谐的消息,但只能使用特殊角色 node.js
如何让我的机器人忽略来自具有特定角色的人的消息? (不和谐.py)
如何让一个不和谐的 js 机器人在某人获得某个角色后向他发送消息