Отправка Dm пользовательской команде в discord.py-rewrite - PullRequest
0 голосов
/ 20 июня 2020

Итак, я пытался создать команду DM, которая спрашивает нас, какому пользователю мы хотим отправить сообщение (значение) DM, ex- !vx dm THIS IS THE CONTENT OF THE MESSAGE отправит сообщение автору сообщения с вопросом - "" Кому Вы хотите dm? », И автор ответит, указав человека, которому он хочет отправить dm, и после этого он отправит DM пользователю, а затем отправит сообщение, в котором говорится:« Я отправил сообщение to X ". Я хотел, чтобы команда была такой.

@client.command()
async def dm(ctx, value):
    member = discord.Member if not discord.Member else discord.Member
    await ctx.send(f"{ctx.author.mention}, Whom do you want to send the message to?")
    def check(m):
        return m.content == member.mention == member
    await ctx.member.send(f"**{value}**")
    await ctx.member.send(f"||Sent by {ctx.author.mention} via VX Helper.||")
    e = discord.Embed(title=f"Message sent to {member.display_name}.", description=f"Message Content - {value}.", colour=0x40cc88)
    e.set_footer(text=f"Sent by {ctx.author.display_name}", icon_url=ctx.author.avatar_url)
    await ctx.channel.purge(limit=3)
    await ctx.send(embed=e)

Этот код выводит эту ошибку в heroku -

2020-06-20T12:03:12.632899+00:00 app[worker.1]: Ignoring exception in command dm:
2020-06-20T12:03:12.635752+00:00 app[worker.1]: Traceback (most recent call last):
2020-06-20T12:03:12.635825+00:00 app[worker.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/discord/ext/commands/core.py", line 85, in wrapped
2020-06-20T12:03:12.635826+00:00 app[worker.1]:     ret = await coro(*args, **kwargs)
2020-06-20T12:03:12.635861+00:00 app[worker.1]:   File "run.py", line 336, in dm
2020-06-20T12:03:12.635862+00:00 app[worker.1]:     await ctx.member.send(f"**{value}**")
2020-06-20T12:03:12.635920+00:00 app[worker.1]: AttributeError: 'Context' object has no attribute 'member'
2020-06-20T12:03:12.635960+00:00 app[worker.1]: 
2020-06-20T12:03:12.635963+00:00 app[worker.1]: The above exception was the direct cause of the following exception:
2020-06-20T12:03:12.635963+00:00 app[worker.1]: 
2020-06-20T12:03:12.635999+00:00 app[worker.1]: Traceback (most recent call last):
2020-06-20T12:03:12.636064+00:00 app[worker.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/discord/ext/commands/bot.py", line 892, in invoke
2020-06-20T12:03:12.636065+00:00 app[worker.1]:     await ctx.command.invoke(ctx)
2020-06-20T12:03:12.636097+00:00 app[worker.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/discord/ext/commands/core.py", line 824, in invoke
2020-06-20T12:03:12.636098+00:00 app[worker.1]:     await injected(*ctx.args, **ctx.kwargs)
2020-06-20T12:03:12.636131+00:00 app[worker.1]:   File "/app/.heroku/python/lib/python3.7/site-packages/discord/ext/commands/core.py", line 94, in wrapped
2020-06-20T12:03:12.636132+00:00 app[worker.1]:     raise CommandInvokeError(exc) from exc
2020-06-20T12:03:12.636184+00:00 app[worker.1]: discord.ext.commands.errors.CommandInvokeError: Command raised an exception: AttributeError: 'Context' object has no attribute 'member'

Любая помощь будет принята с благодарностью!

1 Ответ

1 голос
/ 20 июня 2020

Итак, в идеале вы должны искать вводимые пользователем данные в команде. Это избавит вас от головной боли с wait_for, хотя, похоже, вы пытались это сделать. Вот простой способ использовать код для отправки сообщения тому, кто был упомянут.

@bot.command()
async def dm(ctx, user: discord.User, *, value):
    # Send a message to the mentioned user!
    await user.send(f"**{value}**")
    await user.send(f"||Sent by {ctx.author.display_name} via VX Helper.||")

Итак, по сути, здесь есть пара вещей, которые нужно понять. Во-первых, мы анализируем аргумент user: discord.User, это человек, которому нужно отправить наше сообщение. Использование : discord.User просто означает, что D.py автоматически преобразует его в действительного пользователя, поэтому мы можем отправлять прямо этому объекту. Второе, что нужно понять, это использование *, value. Проще говоря, это означает, что все, что происходит после того, как вы упомянули пользователя, будет помещено в строку для переменной value. Вы можете узнать больше о logi c за этим здесь

После этого вы можете просто завершить sh свой код, как хотите. Надеюсь, вы нашли это полезным!

...