Python DM全部命令

问题描述

因此,我正在为服务器创建自定义机器人,但出现了问题,以下是我的代码

@bot.command()
@commands.has_role('| Owner')
async def dmall(ctx,desc):
    title = f'message from {ctx.message.author}'
    await ctx.send('Sending messages!')
    for members in bot.get_all_members():
        embed = discord.Embed(title=title,description=desc)
        await members.send(embed=embed)
        print('Sent a message!')
        time.sleep(3)

我得到的错误

Ignoring exception in command dmall:
Traceback (most recent call last):
  File "/home/container/discord/ext/commands/core.py",line 85,in wrapped
    ret = await coro(*args,**kwargs)
  File "/home/container/main.py",line 37,in dmall
    await members.send(embed=embed)
  File "/home/container/discord/abc.py",line 864,in send
    channel = await self._get_channel()
  File "/home/container/discord/member.py",line 250,in _get_channel
    ch = await self.create_dm()
  File "/home/container/discord/member.py",line 110,in general
    return getattr(self._user,x)(*args,**kwargs)
AttributeError: 'ClientUser' object has no attribute 'create_dm'

我一直试图弄清楚,原因是我没有在代码中的任何地方使用create_dm

解决方法

bot.get_all_members()可能是导致该错误的原因。您可以使用ctx.guild members获得成员。因此,您可以这样做:

@bot.command()
@commands.has_role('| Owner')
async def dmall(ctx,desc):
    title = f'message from {ctx.message.author}'
    await ctx.send('Sending messages!')
    for member in ctx.guild.members:
        embed = discord.Embed(title=title,description=desc)
        await member.send(embed=embed)
        print('Sent a message!')
        await asyncio.sleep(3)

我还添加了asyncio.sleep(),因为据我所知,time.sleep()会阻止所有代码,所以请不要忘记导入它。