#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, ни у бота нет возможности узнать об этом, поскольку сообщение изначально пришло не с сервера.