#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, это настолько близко, насколько вы сможете добраться до отправки сообщения от имени пользователя.