首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >get_channel返回NoneType

get_channel返回NoneType
EN

Stack Overflow用户
提问于 2022-09-01 06:52:39
回答 1查看 117关注 0票数 -1

我一直在尝试完成一项相对简单的任务,即在bot连接和断开连接时向通知通道发送消息,但我得到了一个错误,即NoneType对象没有发送属性。我知道get_channel唯一不返回的方法是如果没有找到通道,但是我复制粘贴了频道ID,所以我不知道它怎么会错。

我之所以这样做,是因为尽管机器人是有功能的,但我必须手动打开/关闭它,直到托管为止。我宁愿人们自动知道。

代码在on_ready中,但在一个用于开发的测试命令中。我的主要代码基本如下:

代码语言:javascript
复制
import discord
from discord.ext import commands, tasks
from dotenv import load_dotenv
import os
import discord_general as dg

intents = discord.Intents.default()
intents.members = True
# could not do intents.message_content, it said that didnt exist,
# although I understand it is in the docs
intents.messages = True


bot = commands.Bot(intents=intents, command_prefix="!", help_command=dg.MyHelp())



@bot.command()
async def t(ctx):
    await dg.online(msg)
    await ctx.send("Done")

    

bot.run(os.getenv('TOKEN'))

我导入的文件中的代码如下:

代码语言:javascript
复制
async def online_msg():
    channel = bot.get_channel(998723366473187378)
    await channel.send("hello")

    # I have also used discord.Client.get_channel() and
    # discord.Guild.get_channel()

所有这些都会产生以下错误:跟踪(最近一次调用):文件"C:\Users\tmalo\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\discord\client.py",第343行,在_run_event中等待coro(*args,**kwargs)文件"c:\Users\tmalo\Desktop\GitHub\Worm-bot\commands\Economy.py",第20行,在调用等待"C:\Users\tmalo\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\discord\ext\commands\bot.py",(Ctx)文件"C:\Users\tmalo\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\discord\ext\commands\core.py",行863、调用等待注入(*ctx.args)中的on_command_error引发错误文件第939行中,文件"C:\Users\tmalo\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\LocalCache\local-packages\Python39\site-packages\discord\ext\commands\core.py",( **ctx.kwargs)第94行,在exc discord.ext.commands.errors.CommandInvokeError:命令中包装的**ctx.kwargs CommandInvokeError(exc)引发了一个异常: AttributeError:'NoneType‘对象没有属性'send’

我遗漏了什么吗?我甚至尝试通过服务器ID并遍历所有通道,直到匹配为止,但是我遇到了同样的问题,我的对象是NoneTypes,而不是不和谐的对象。任何帮助都将不胜感激。

*编辑:我没有将代码导入到on_ready所在的主文件中,而是尝试使用直接在主文件中编写的代码运行bot,并且运行正常。但我有更多的代码,而不是简单的“发送你好”,这就是为什么我想要它一个不同的文件。这是我第一次有这个问题。

**编辑:我决定用一种不同的方式发送这个消息,所以我不再需要帮助;但是它从未得到解决,所以如果有人知道我为什么会有问题,请告诉我。感谢任何提出解决方案的人。

EN

回答 1

Stack Overflow用户

发布于 2022-09-01 17:51:16

您可以使用discord.Object()来获取对信道的引用。

用法:

代码语言:javascript
复制
channel = discord.Object(998723366473187378)
await channel.send("Hello")

一个更有活力但效率较低的方法如下:

代码语言:javascript
复制
for channel in bot.get_all_channels():
   if channel.name == "announcements":
       await channel.send("Hello")

*注:请确保您已正确设置您的机器人,并确保您正在正确运行这些操作。您可以在这里找到有用的代码示例:https://github.com/Rapptz/discord.py/tree/v2.0.1/examples

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73565264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档