Discord.py 警告命令(帮助我)mass dm

Posted

技术标签:

【中文标题】Discord.py 警告命令(帮助我)mass dm【英文标题】:Discord.py Warning Command (help me) mass dm 【发布时间】:2020-03-31 00:26:05 【问题描述】:

几天前我试图创建一个警告命令,一个 dm mass 类型,但不是发送给所有服务器用户,而是只发送几个人到一个特定的角色。

我只能创建一个批量 dm 命令

        @commands.command()
    async def all(self, ctx,*,message):
        for mem in ctx.guild.members:
            try:
                await mem.send(message)
                await ctx.send(f'**Sent dm to:** mem.name')
            except:
                await ctx.send(f'**User dm closed** mem.name')
                print('User dm closed')

【问题讨论】:

【参考方案1】:

在 Discord.py rewrite 的文档中,您确实可以找到所有内容。包括成员对象具有的对象:https://discordpy.readthedocs.io/en/latest/api.html?highlight=member#member。当您阅读文档时,您会看到您可以使用mem.roles 来获取成员拥有的角色对象列表。

您可以遍历用户拥有的角色列表并检查角色的字符串值是否等于所需的角色。如果是所需的角色,您可以向该成员发送消息。

您需要使用str(role) == desired_role 而不是role == desired_role 的原因是role 是一个对象。而且您不能将对象与字符串进行比较。

@commands.command()
async def message_user_w_role(self, ctx, desired_role):
    # For every member in the guild in which the message was send.
    for mem in ctx.guild.members:
        # Members.roles gives list with roles. Thus you need to iterate and check if role == desired role
        for role in mem.roles:
            if str(role) == desired_role:
                try:
                    # Sends the dm if the user has the desired role
                    await mem.send("YOUR MESSAGE")
                    await ctx.send("ANOTHER MESSAGE")
                    break
                except:
                    # If the user closed his dm's
                    await ctx.send("ANOTHER MESSAGE")
                    print("User dm closed")

【讨论】:

以上是关于Discord.py 警告命令(帮助我)mass dm的主要内容,如果未能解决你的问题,请参考以下文章

如何将 discord.py 帮助命令放入嵌入中?

Discord 机器人帮助命令 [discord.py]

我需要帮助在 discord py 中创建 discord py temp 静音命令

我想使用 discord.py 创建一个多页帮助命令

Discord.py 帮助命令(对编辑消息做出反应)

在 discord.py 中显示设置前缀的命令(重写)