Есть ли какой-либо способ для бота discord отправлять сообщения от имени пользователя, который ввел команду?

#python #discord #bots #discord.py

#python #Discord #боты #discord.py

Вопрос:

Я пытался создать бота discord на python (используя discord.py ), который может вводить сообщение, когда пользователь вводит команду (в моем случае !спам). Вот код, который я собрал.

 @client.command()
async def spam(ctx, leng, tim,*,msg):
    import time
    leng = int(leng); tim = int(tim)
    if leng > 10 :
        await ctx.send('Please do not spam too much. The limit is 10 messages.')
    else:
        for i in range(leng) :
            await ctx.send(msg)
            time.sleep(tim)
 

Кто-нибудь знает какой-либо код, который я могу ввести, который может заставить бота вводить сообщение от имени пользователя, который использовал команду? (Таким образом, это будет выглядеть так, как будто пользователь ввел сообщение вместо бота).

Заранее спасибо.

Ответ №1:

Лучший способ сделать так, чтобы это выглядело так, как будто пользователь отправил сообщение, — через веб-хук. У него будет изображение и имя его профиля, но рядом с ним все равно будет тег БОТА.

 @client.command()
async def spam(ctx, leng: int, tim: int,*,msg):
    # Checking if a webhook exists already
    webhook = discord.utils.get(await ctx.channel.webhooks(), name='Spammer')
    if webhook is None:
        # If the webhook didn't exist, we create one
        webhook = await ctx.channel.create_webhook(name='Spammer')
    if leng > 10 :
        await ctx.send('Please do not spam too much. The limit is 10 messages.')
    else:
        for i in range(leng) :
            await webhook.send(content=msg, username=ctx.author.display_name, avatar_url=ctx.author.avatar_url)
            await asyncio.sleep(tim)
 

Кроме того, я пошел дальше и изменил несколько вещей, чтобы сделать ваш код немного более эффективным. Сначала я использовал подсказки типа в строке определения вашей команды, когда вы делаете это discord.py автоматически преобразует их, как описано здесь. Я также изменил time.sleep asyncio.sleep , чтобы избежать блокировки, как описано в discord.py документы, не забудьте импортировать asyncio вверху.

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

1. Привет, спасибо, что помогли мне. Однако, когда я пытаюсь использовать команду !spam, появляется ошибка, в которой говорится: объект ‘method’ не может быть итерирован для строки webhook = discord.utils.get(ctx.chhanel. webhooks, name = ‘Спамер’). Знаете ли вы, почему возникает эта ошибка, и какой-либо способ ее исправить ?. Заранее спасибо.

2. Кроме того, есть ли какой-либо способ удалить тег БОТА у пользователя? Заранее спасибо.

3. Ах, это моя ошибка, я забыл, что webooks это не атрибут, а вместо этого сопрограмма (асинхронная функция, которую нужно ожидать), я отредактировал свой ответ, чтобы отразить исправление. Что касается вашего второго комментария, невозможно удалить тег бота no, это настолько близко, насколько вы сможете добраться до отправки сообщения от имени пользователя.