Nano Hash - криптовалюты, майнинг, программирование

Ошибка объекта Discord NoneType в файлах Discord?

Я уже довольно давно возился с ботами Discord, и сегодня я столкнулся с этой ошибкой. Я хотел посмотреть, сможет ли кто-нибудь помочь мне разобраться в этом.

Ошибка будет опубликована внизу, а также мое текущее событие.

Я создаю систему тикетов для своего сервера Discord и обнаружил, что не могу сделать это без использования события On_Raw_Reaction_Add. Полезная нагрузка кажется мне очень запутанной, но у меня почти все заработало. Последнее, что осталось, - это гильдия. По какой-то причине при ссылке / вытягивании гильдии с помощью приведенного ниже фрагмента в файле guild.py при импорте Discords он говорит, что гильдия считается NoneType, но если я распечатаю ее из события, она будет работать нормально. Я просто хочу создать канал.

Фрагмент

guild = self.client.get_guild(reactionpayload.guild_id)
    @commands.Cog.listener()
    async def on_raw_reaction_add(self, reactionpayload):
        print('ran')
        db = sqlite3.connect(DATA_FILENAME)
        cursor = db.cursor()
        cursor.execute(f"SELECT ID FROM Ticket_Channel")
        channelID = cursor.fetchone()[0]
        cursor.close()
        channel = self.client.get_channel(int(channelID))
        if channel is None:
            print('Ticket System: Channel not Found!')
        else:
            if reactionpayload.message_id == channel.last_message_id:
                if not self.client.get_user(reactionpayload.user_id).bot:
                    guild = self.client.get_guild(reactionpayload.guild_id)
                    print(guild.id)
                    name = 'ticket-' + str(self.client.get_user(reactionpayload.user_id).name)
                    overwrites = {
                        guild.default_role: discord.PermissionOverwrite(read_messages=False),
                        guild.me: discord.PermissionOverwrite(read_messages=True),
                        guild.get_member(self.client.get_user(reactionpayload.user_id)): discord.PermissionOverwrite(read_messages=True)
                    }
                    channel = await guild.create_text_channel(name, overwrites=overwrites, category=self.client.get_channel(self.client.get_channel(reactionpayload.channel_id).category_id), position=100)
                    await remove_reaction('\U0001F4E9', self.client.get_user(reactionpayload.user_id))
            else:
                print(reactionpayload.message_id)
                print(channel.last_message_id)
Ignoring exception in on_raw_reaction_add
Traceback (most recent call last):
  File "C:\Users\gunzb\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\client.py", line 270, in _run_event
    await coro(*args, **kwargs)
  File "C:\Users\gunzb\Desktop\AkumaBot\cogs\ticket_system.py", line 41, in on_raw_reaction_add
    channel = await guild.create_text_channel(name, overwrites=overwrites, category=self.client.get_channel(self.client.get_channel(reactionpayload.channel_id).category_id), position=100)
  File "C:\Users\gunzb\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\guild.py", line 882, in create_text_channel
    data = await self._create_channel(name, overwrites, ChannelType.text, category, reason=reason, **options)
  File "C:\Users\gunzb\AppData\Local\Programs\Python\Python38-32\lib\site-packages\discord\guild.py", line 785, in _create_channel
    'id': target.id
AttributeError: 'NoneType' object has no attribute 'id'

Ответы:


1

get_member принимает идентификатор, а не объект User, поэтому guild.get_member(self.client.get_user(reactionpayload.user_id)) возвращает None.

@commands.Cog.listener()
async def on_raw_reaction_add(self, reactionpayload):
    if not reactionpayload.guild_id:
        return  # Private message
    print('ran')
    db = sqlite3.connect(DATA_FILENAME)
    cursor = db.cursor()
    cursor.execute(f"SELECT ID FROM Ticket_Channel")
    channelID = cursor.fetchone()[0]
    cursor.close()
    channel = self.client.get_channel(int(channelID))
    if channel is None:
        print('Ticket System: Channel not Found!')
    else:
        if reactionpayload.message_id == channel.last_message_id:
            if not self.client.get_user(reactionpayload.user_id).bot:
                guild = self.client.get_guild(reactionpayload.guild_id)
                member = guild.get_member(reactionpayload.user_id)
                print(guild.id)
                name = 'ticket-' + member.name
                overwrites = {
                    guild.default_role: discord.PermissionOverwrite(read_messages=False),
                    guild.me: discord.PermissionOverwrite(read_messages=True),
                    member: discord.PermissionOverwrite(read_messages=True)
                }
                channel = await guild.create_text_channel(name, overwrites=overwrites, category=channel.category, position=100)
                await remove_reaction('\U0001F4E9', self.client.get_user(reactionpayload.user_id))
        else:
            print(reactionpayload.message_id)
            print(channel.last_message_id)
31.10.2019
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..