Проблема в discord.py logs

Рейтинг: 0Ответов: 1Опубликовано: 17.03.2023
from discord.ext import commands
import discord

class Logs(commands.Cog):

    def __init__(self, bot):
        self.bot = bot
        print('Module {} is loaded'.format(self.__class__.__name__))

    @commands.Cog.listener()
    async def on_member_join(self, member):
        message = f"{member.name} joined the server."
        await self.bot.get_channel("1081301042140037282").send(message)

    @commands.Cog.listener()
    async def on_member_remove(self, member):
        message = f"{member.name} left the server."
        await self.bot.get_channel("1081301042140037282").send(message)

    @commands.Cog.listener()
    async def on_message_edit(self, before, after):
        message = f"Message before changes {before.content}\n" \
              f"Message after changes {after.content}"
        await self.bot.get_channel("1085913983585886270").send(message)

    @commands.Cog.listener()
    async def on_message_delete(self, message):
        message = f"Deleted message: {message.content}\n"
        await self.bot.get_channel("1085913983585886270").send(message)

    @commands.Cog.listener()
    async def on_voice_state_update(self, member: discord.Member, before: discord.VoiceState,
                                    after: discord.VoiceState):
        if before.channel is None:
            message = f"{member.display_name} joined the channel {after.channel.mention}"
            await self.bot.get_channel("1085913983585886270").send(message)
        elif after.channel is None:
            message = f"{member.display_name} left the channel {before.channel.mention}"
            await self.bot.get_channel("1085913983585886270").send(message)
        elif before.channel != after.channel:
            message = f"{member.display_name} moved from the channel {before.channel.mention}" \
                  f" into the channel {after.channel.mention}"
            await self.bot.get_channel("1085913983585886270").send(message)


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

Выдает ошибку:

Ignoring exception in on_message_delete
Traceback (most recent call last):
  File "C:\bot_my\venv\lib\site-packages\discord\client.py", line 343, in _run_event
    await coro(*args, **kwargs)
  File "C:\bot_my\cogs\logs.py", line 34, in on_message_delete
    await self.bot.get_channel("1085913983585886270").send(message)
AttributeError: 'NoneType' object has no attribute 'send'

Ответы

▲ 1Принят

Ваша ошибка обозначает то, что бот не может отправить сообщение в канал, т.к. получил его как None. Скорее всего это из-за str. Попробуйте указать ID канала без кавычек:

    @commands.Cog.listener()
    async def on_member_join(self, member):
        message = f"{member.name} joined the server."
        await self.bot.get_channel(1081301042140037282).send(message)

    #В остальных эвентах тоже следует убрать кавычки.