#python #python-3.x #discord.py #discord.py-rewrite
#python #python-3.x #discord.py
Вопрос:
Привет, у меня возникла проблема при отправке сообщения из канала в прямые сообщения пользователей. Сообщение при использовании @user, за которым следует сообщение, должно указывать пользователя, я не уверен, почему это не работает.
Упоминание в сообщении должно содержать пользовательский объект.
Вот код:
@commands.Cog.listener()
async def on_message(self, message):
"""Send a message thread reply to user."""
for member in message.mentions: #get user object from mention in message?
if not member.dm_channel:
await member.create_dm()
try:
time = datetime.utcnow()
embed = discord.Embed(title=f"Reply", timestamp=time, colour=discord.Colour(0xff8100))
embed.add_field(name="Message:", value="test message")
await member.dm_channel.send(embed=embed)
except discord.Forbidden:
await message.channel.send(f"Reply cannot be sent because {member.name}'s direct messages are set to private.")
except discord.HTTPException:
await message.channel.send('I failed in sending the message.')
except Exception as e:
await message.channel.send(f'There's been a problem while sending the message that's not of type "Forbidden" or'
f' "HTTPException", but {e}.')
else:
await message.channel.send(f'Reply sent to {member.name}')
Комментарии:
1. В чем проблема, с которой ты столкнулся?
2. Отправка сообщения из текстового канала пользователю направляет сообщения с использованием упоминания пользователя. Ошибки нет, но проблема в коде, препятствующая отправке сообщения в DM пользователя.
3. Возможно, вы захотите попробовать изменить @commands.Cog.listener() на @client.event или что бы вы ни настроили для своего экземпляра бота.
4. Это винтик, поэтому, чтобы зарегистрировать событие из винтика нового стиля, я должен использовать декоратор commands.Cog.listener для прослушивания событий. @client.event у меня не сработало бы.
Ответ №1:
В discord.py на самом деле вам больше не нужно создавать каналы dm. Просто выполните await ctx.author.send(# whatever message you want)
Если вы пытаетесь создать команду, которая отправляет ОПРЕДЕЛЕННЫЙ DM автору сообщения, вы можете попробовать это
@client.command()
async def dm(ctx, *, message):
await ctx.author.send(f"This is your dm {message}")
Это чрезвычайно просто. Дайте мне знать в комментариях, если у вас есть какие-либо вопросы или я неправильно понял вашу проблему.
РЕДАКТИРОВАТЬ: Если вы хотите отправить dm ОПРЕДЕЛЕННОМУ УЧАСТНИКУ, вы можете попробовать это.
@client.command()
async def dm(ctx, member: discord.Member, *, message):
await member.send(message)
Надеюсь, ваша проблема была решена.
PS: В будущем, пожалуйста, объясните ваши вопросы / проблемы более подробно.