Discord.py присоединиться к гильдии dmall - PullRequest
0 голосов
/ 20 июня 2020

Я делаю бота, чтобы блокировать все каналы, когда его приглашают (блокирующий бот)

Но мне нужно, чтобы он отправлял DM всем пользователям на сервере, это мой код:

@bot.event
async def on_guild_join(ctx, mem):
for mem in ctx.guild.members:
        try:
            await mem.send("Hello")
        except:
             print('User dm closed')

Но у меня нет вывода, и он не DM?

Ответы [ 2 ]

2 голосов
/ 20 июня 2020

Как сказано ниже Каем, это был бы способ сделать это. Однако из-за ограничений скорости разногласий (т.е. насколько быстро вы можете что-то делать, например отправлять сообщения), я бы предложил добавить время восстановления. Для работы вам потребуется import asyncio. Учитывая, что except only печатает и не взаимодействует с api Discord, вы можете спать только после отправки сообщения.

@bot.event
async def on_guild_join(guild):
    members = guild.members
    for member in members:
        try:
            await member.send("Hello")
            await asyncio.sleep(1)
        except:
            print('User dm closed')
1 голос
/ 20 июня 2020

Это не работает, потому что on_guild_join не имеет аргумента member или ctx. on_guild_join имеет аргумент guild, см. discord.on_guild_join , а Guild содержит список участников, см. Guild.members Ваш код может выглядеть следующим образом.

@bot.event
async def on_guild_join(guild):
    members = guild.members
    for member in members:
        try:
            await member.send("Hello")
        except:
            print('User dm closed')
...