Пытаюсь настроить разрешения для бота discord, но, похоже, не могу

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

#Discord #python-3.6 #discord.py

Вопрос:

Итак, я создаю бота discord для сервера, который я использую, и хотел добавить функцию цензуры, чтобы, если пользователь сказал что-то в списке «Запрещенные слова», не находясь в определенном канале (рабочем), он отредактировал сообщение, чтобы вместо него было «[отредактировано]». Я считаю, что сам код работает, но я получаю это сообщение об ошибке каждый раз, когда я его тестирую. Я попытался добавить разрешения через портал разработчика Discord (выбрав «OAuth2», выбрав область «бот» и управление ролями, просмотр каналов, отправка сообщений, управление сообщениями, чтение истории сообщений и упоминание разрешений для всех), скопировал ссылку и добавил ее на мой сервер тестирования, но, похоже, она все еще не работает вместе с соответствующими разрешениями через роль. Полная ошибка:

 Traceback (most recent call last):
  File "C:UsersMeAppDataLocalProgramsPythonPython36libsite-packagesdiscordclient.py", line 312, in _run_event
    await coro(*args, **kwargs)
  File "C:UsersMeDesktopProductiveProgramming ProjectsPython 3OtherMyBotbot.py", line 32, in on_message
    await message.edit(content = editedMessage)
  File "C:UsersMeAppDataLocalProgramsPythonPython36libsite-packagesdiscordmessage.py", line 843, in edit
    data = await self._state.http.edit_message(self.channel.id, self.id, **fields)
  File "C:UsersMeAppDataLocalProgramsPythonPython36libsite-packagesdiscordhttp.py", line 241, in request
    raise Forbidden(r, data)
discord.errors.Forbidden: 403 Forbidden (error code: 50005): Cannot edit a message authored by another user
  

Код

 import discord
bot=discord.Client()

@bot.event
async def on_ready():
    print('Logged in')
    print("Username: %s" % (bot.user.name))
    print("Userid: %s" % (bot.user.id))

@bot.event
async def on_message(message):
    if message.author.id == bot.user.id:
        return
    bannedWords=['chink','dyke','fag','ook','molest','nig','rape','retard','spic','zipperhead','tranny']
    print(str(message))
    print(str(message.content))
    if "name='no-rules-lol'" not in str(message): #probably a better way to do this but it works
        for word in bannedWords:
            if word in message.content.lower():
                await message.channel.send('{0.author.mention}, you have used a word that is black-listed please read <#754763230169006210> to get a full list of black-listed words'.format(message))
                #await message.edit(content = message   'this has been edited')
                editedMessage=str(message.content.replace(word,'[redacted]'))
                await message.edit(content = editedMessage)

bot.run(Token)
  

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

1. Невозможно отредактировать сообщение другого пользователя в Discord или Discord API. Такого разрешения нет даже для администраторов.

2. О, хорошо, итак, следующая лучшая вещь, которую я предполагаю, — это просто удалить ее?

3. Да, похоже, это правильный путь.

Ответ №1:

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

 await message.delete()
  

Это так просто.

Если вы добавляете больше команд в свой бот, вы можете просто добавить это в свой on_message наконец:

 await bot.process_commands(message)
  

Спасибо.