Discord.py не отправляете dm?

#python #discord #discord.py #dm

#python #Discord #discord.py #dm

Вопрос:

 #MassDM Command
@bot.command()
async def massdm(ctx, msg):
    await ctx.message.delete()
    show_cursor()
    wipeinput = input(Fore.RED "Are you sure you want to mass dm? (WARNING: This happens really fast so it will probably flag your account)(y or n): ")
    hide_cursor()
    if wipeinput == "y" or wipeinput == "Y":
        for user in ctx.guild.members:
            if user != bot.user:
                try:
                    channel = await user.create_dm()
                    await channel.send(msg)
                    print(Fore.GREEN   f'Sent to user "{user.name}"')
                except:
                    print(Fore.YELLOW   f'Failed to DM user "{user.name}"')
                    pass
        print(Fore.GREEN "Finished")
 

Когда я запускаю это, он просто говорит «Готово» и ничего не делает. когда я удаляю try / except, это не выдает ошибку? Я думаю, что у меня есть все надлежащие намерения

Комментарии:

1. это работает, только если у вас есть сервер, на который он похож, можно ли это исправить?

2. Я думаю, что это может быть проблемой с намерениями, какие намерения вы включили?

3. intents = discord.Intents().all()

Ответ №1:

Вы допускаете ошибку в этой строке:

 wipeinput = input(Fore.RED "Are you sure you want to mass dm? (WARNING: This happens really fast so it will probably flag your account)(y or n): ")
 

Кажется, вы ждете ответа. Способ сделать это с wait_for помощью функции. Вы должны изменить это на это:

 await ctx.send("Are you sure you want to mass dm? (WARNING: This happens really fast so it will probably flag your account)(y or n)?")

wipeinput = bot.wait_for('message')  # You can add another parameter to check if the input is valid and what you want.
 

Кроме того, я не уверен в том, что такое функции show_cursor() и. hide_cursor() Они также могут быть причиной того, что что-то не работает.

РЕДАКТИРОВАТЬ: (Спасибо IPSDSILVA за указание на это) Несмотря на то, что приведенный мной код не связан с проблемой в сообщении, любая проблема в коде может привести к тому, что ваш код не будет работать

Комментарии:

1. извините, я не понимаю. Проблема заключалась в том, что он не отправлял сообщения dm. Что бы это решило?

2. Хотя код не вращается вокруг DMs (в этом посте), если где-то есть проблема с кодом, программа может работать неправильно.

Ответ №2:

Вот полный код, в котором все работает.

 @client.command(pass_context=True)
async def massdm(ctx):
    await ctx.message.delete()
    for member in list(client.get_all_members()):
        try:
            embed = discord.Embed(title="Test",
                                  description="Test!",
                                  color=discord.Colour.blurple())
            embed.set_thumbnail(
                url="test")
            embed.set_footer(
                text=
                "test"
            )
            await asyncio.sleep(30)
            await member.send(embed=embed)
        except:
            pass
        #await ctx.send(f"Messaged: {member.name}")
        print(f"Messaged: {member.name}")