AttributeError:“ NoneType”对象没有属性“ channels”

时间:2018-10-10 13:58:53

标签: python discord discord.py discord.py-rewrite

嗨,我的Discord机器人模块出现问题。我收到AttributeError: 'NoneType' object has no attribute 'channels'的信息,但不确定如何将其抛出:

这就是我正在使用的东西:

from discord.ext import commands
from discord.utils import get
import logging as log
from datetime import datetime,timedelta
import discord
import os
from .utils import checks
from run import UKGBot


import asyncio


class Pinner():
    """Pins messages to a specific channel."""

    def __init__(self, bot: UKGBot):
        self.bot = bot



    async def on_message(self, message):
        """Listen for message then pin it"""
        try:
            guild = message.guild
            channel = get(message.guild.channels, name="gtky")
            pins = await message.channel.pins()
            if message.channel == channel and message.type != discord.MessageType.pins_add:
                if len(pins) == 20:
                    await message.unpin(pins[-1])
                await asyncio.sleep(3) 
                await message.pin()

        except discord.Forbidden:
            print("No permissions to do that!")


    def setup(bot):
        """Setup function"""
        to_add = Pinner(bot)
        bot.add_listener(to_add.on_message, 'on_message')
        bot.add_cog(to_add)

2 个答案:

答案 0 :(得分:1)

您尝试访问某个对象的channels属性,但是该对象为None ==其他语言中的Null。

在您的代码中,您唯一引用渠道的地方是message.guild.channels,在channel = get(message.guild.channels, name="gtky")行中,因此消息对象的guild属性是None

答案 1 :(得分:0)

之所以会这样,是因为message.guildNoneguild之所以是None,是因为私人消息(两个用户之间的直接消息)不会通过公会。

如果您的漫游器发送或接收任何私人消息,则这些消息将以None作为其message.guild属性。