Ошибка в Discord.py?

#python #discord.py

Вопрос:

Поэтому я работаю над винтиками, которые могут заставить моего бота работать в качестве модмейла. Пока что вот код:

 import discord
from discord.ext.commands import Bot
from discord.ext import commands
import asyncio
client = commands.Bot(command_prefix="!")

class Modmail(commands.Cog):
    def __init__(self, bot):
        self.bot = bot

    @commands.Cog.listener()
    async def on_message(self, message):
        empty_array = []
        modmail_channel = discord.utils.get(message.guild.get_all_channels(), name="modmail")

        if message.author == message.user:
            return
        if str(message.channel.type) == "private":
            if message.attachments != empty_array:
                files = message.attachments
                await modmail_channel.send("<@"   message.author.id   ">: ")

                for file in files:
                    await modmail_channel.send(file.url)
            else:
                await modmail_channel.send("<@"   str(message.author.id)   ">: "   message.content)

        elif str(message.channel) == "modmail" and message.content.startswith("<"):
            member_object = message.mentions[0]
            if message.attachments != empty_array:
                files = message.attachments
                await member_object.send("**[MOD]** "   "**"   message.author.display_name   "**: ")

                for file in files:
                    await member_object.send(file.url)
            else:
                index = message.content.index(" ")
                string = message.content
                mod_message = string[index:]
                await member_object.send("**[MOD]** "   "**"   message.author.display_name   "**: "   mod_message)

def setup(bot):
    bot.add_cog(Modmail(bot))
 

Итак, проблема в том, что когда я запускаю его, я получаю эту ошибку:

 Ignoring exception in on_message
Traceback (most recent call last):
  File "C:UsersBlueAppDataLocalProgramsPythonPython39libsite-packagesdiscordclient.py", line 343, in _run_event
    await coro(*args, **kwargs)
  File "c:UsersBlueDocumentsProjectArticuno (Canary)automod.py", line 39, in on_message
    channel = discord.utils.get(guild.channels, name="📝║logs")
AttributeError: 'NoneType' object has no attribute 'channels'
Ignoring exception in on_message
Traceback (most recent call last):
  File "C:UsersBlueAppDataLocalProgramsPythonPython39libsite-packagesdiscordclient.py", line 343, in _run_event
    await coro(*args, **kwargs)
  File "c:UsersBlueDocumentsProjectArticuno (Canary)modmail.py", line 14, in on_message
    modmail_channel = discord.utils.get(message.guild.get_all_channels(), name="modmail")
AttributeError: 'NoneType' object has no attribute 'get_all_channels'
 

Что я должен исправить? Потому что, насколько я знаю, сообщение и гильдия не могут работать вместе. Но если я сделаю message.get_all_channels(), у него будет еще одна ошибка!

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

1. Сообщение не будет иметь гильдии, если это сообщение DM. Кто-то управляет вашим ботом?

2. Когда я запускаю и запускаю БОТА, он выдает эту ошибку. И я был единственным, кто управлял БОТОМ

3. Как я уже сказал, прямые сообщения не имеют гильдий. Что вы ожидаете message.guild увидеть в этом случае?

4. Ну, если у меня только message.get_all_channel , у меня будет эта ошибка: игнорирование исключения в on_message обратная трассировка (самый недавний призыв последнего): файл «C:UsersBlueAppDataLocalProgramsPythonPython39libsite-packagesdiscordclient.py», строка 343, в _run_event ждут Коро(*параметр args, **kwargs) файл «c:UsersBlueDocumentsProjectArticuno (Канарейка)modmail.py», строка 13, в on_message modmail_channel = розни.утилиты.вам(сообщение.get_all_channels(), имя=»modmail») Ошибка атрибута: объект «Сообщение» не имеет атрибута «get_all_channels»

5. Ты упускаешь главное. Сообщение получено через DM. Насколько известно Discord, ваш бот может работать на сотне серверов одновременно. Для какого сервера вы ожидаете получить все каналы? Ни у Discord, ни у бота нет возможности узнать об этом, поскольку сообщение изначально пришло не с сервера.