Вопрос о проверке команд и проблема с использованием аргумента команды

#python #discord.py #discord.py-rewrite

#python #discord.py

Вопрос:

У меня вопрос о проверке команд и о том, возможно ли обойти аргумент команды. Я создаю команду ответа для своего почтового бота discord, вместо использования команды reply <user> <message> я хотел бы удалить аргумент user и просто использовать reply <message> .

Однако мне нужно получить пользователя так, как я это делал при использовании его в качестве аргумента команды. Возможно ли это?

Вот над чем я работаю:

 @commands.command()
@checks.is_channel_mod()
async def reply(self, ctx, user: discord.User, *, message):
    """Send a message thread reply to user."""
    if not user.dm_channel:
        await user.create_dm()
    try:
        if ctx.message.channel.name == f"{user.name.lower()}{user.discriminator}":
            time = datetime.utcnow()
            msg_sent = message[:2000] or "blank"
            embed = discord.Embed(title=f"Moderator Reply", description=msg_sent, timestamp=time, colour=discord.Colour(0xff8100))
            embed.set_footer(text=f"Sent by {ctx.author.name}#{ctx.author.discriminator}")
            msg = await user.dm_channel.send(embed=embed)
            await ctx.send(f"{ctx.author.name} sent a reply to {user.name}.")
        else:
            await ctx.send(f'Please check you have the correct channel or thread ID.')

    except discord.Forbidden:
        await ctx.send(f"Reply cannot be sent because {user.name}'s direct messages are set to private.")
    except discord.HTTPException:
        await ctx.send('I failed in sending the message.')
    except Exception as e:
        await ctx.send(f'There's been a problem while sending the message that's not of type "Forbidden" or'
                       f' "HTTPException", but {e}.')
  

Ответ №1:

Я бы сделал это следующим образом, вы можете заменить pass на все, что вы хотите, чтобы произошло.

 user = ""

@client.event
async def on_message(message):
    global user
    if "Direct Message" in str(message.channel):
        user = message.author

@client.command()
async def reply(ctx, *, message):
    global user
    if user != "":
        pass
        return
    await ctx.send("No messages recieved")