#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)
Спасибо.