#python #url-rewriting #notifications #discord #discord.py
#python #url-переписывание #уведомления #Discord #discord.py
Вопрос:
Недавно мой бот решил не работать после изменения чего-то, совершенно не связанного с этим фрагментом кода. Когда я прошу его отправить сообщение автору сообщения ( message.author.send()
), он отправляет уведомление, но на самом деле никаких сообщений не появляется. Я получаю значок бота со значком 1 ping, но при нажатии новые сообщения не могут быть прочитаны. Вот соответствующий код:
async def on_message(self, Message):
print('Scanning message')
blacklisted_words = [
# I won't show these here for obvious reasons
]
offendingwords = []
cursefound = False
for cursecheck in blacklisted_words:
if cursecheck in Message.content.lower():
cursefound = True
offendingwords.append(cursecheck)
if cursefound == True:
print('Found curse word, user notifiedn')
await Message.delete()
words = []
for word in offendingwords:
words.append(word)
await Message.author.send(f'Please watch your language in <#{Message.channel.id}>!nOffending word(s) - `{str(words)}`')
cursefound = False
else:
print('No curse words foundn')
Пожалуйста, извините за мое ужасное форматирование, я все еще новичок в Python.
Он также выдает ошибку атрибута:
await Message.author.send(f'Please watch your language in <#{Message.channel.id}>!nOffending word(s) - `{str(words)}`')
AttributeError: 'ClientUser' object has no attribute 'send'
Постарайтесь максимально упростить это, пожалуйста, я слишком легко запутываюсь. Спасибо!
Ответ №1:
Это происходит потому, что бот пытается отправить те же слова, которые запрещены в списке, следовательно, сообщение удаляется.
Вы можете сделать следующее, добавить оператор if, чтобы игнорировать бота.
@bot.event
async def on_message(Message):
async def on_message(self, Message):
#If the message author is not a BOT, Then run the following statement Else return
if not Message.author.bot:
print('Scanning message')
blacklisted_words = [
# I won't show these here for obvious reasons
]
offendingwords = []
cursefound = False
for cursecheck in blacklisted_words:
if cursecheck in Message.content.lower():
cursefound = True
offendingwords.append(cursecheck)
if cursefound == True:
print('Found curse word, user notifiedn')
await Message.delete()
words = []
for word in offendingwords:
words.append(word)
await Message.author.send(f'Please watch your language in <#{Message.channel.id}>!nOffending word(s) - `{str(words)}`')
cursefound = False
else:
print('No curse words foundn')
Ответ №2:
Если вы хотите отправить dm автору, message.author
у него нет функции send() . Вы могли бы создать функцию для этого примерно так:
async def send_dm(ctx, member: discord.Member, *, message):
channel = await member.create_dm()
await channel.send(message)
И передайте member
как автор сообщения. Затем передайте сообщение как то, что вы хотите отправить. Это должно исправить AttributeError
то, что вы получаете.
Комментарии:
1. Ты что, с ума сошел, откуда message.author. отправка не отправляет DM?