discord.py [переписать] бот неправильно отправляет сообщение

#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?