当前位置: 首页 > 知识库问答 >
问题:

使用python的discord时,“NoneType”对象没有属性“send”

陆翰藻
2023-03-14

我想在没有命令的情况下为discord编写一条bot消息。但是我在运行代码时遇到了一个问题。错误为:“非类型”对象没有“发送”属性

Traceback(最近的调用最后):文件"D:/Development/Code Python/Bot Discord/discord-testbot.py",第18行,在my_background_task等待channel.send(通道,'New')
属性错误:'NoneType'对象没有属性'send'

import discord
client = discord.Client()

@client.event
async def on_ready():
    print('Bot is ready')
async def my_background_task():
    
    await client.wait_until_ready()
    await channel.send(channel, 'Bot say')
client.loop.create_task(my_background_task())
client.run(tokenBot)

如果我删除linechannel=client。获取通道(574514361394266125),然后它会引发另一个错误,即未定义“通道”名称。

共有2个答案

郎聪
2023-03-14

免责声明:我今天才发现这个问题。我知道它已经解决了,但我想我可能会留下我的答案供将来使用或其他用户使用。

这是一个仅用于发送直接消息的解决方案(以我为例):

# DM message
@client.command(aliases=["dm"])
@commands.has_permissions(administrator=True)
async def _dm_(ctx, content, user_id):
    # Variables
    user = client.get_user(int(user_id))
    msg = "Sending to DM!"

    # Process
    await ctx.send(msg)
    print(msg)
    await user.send(content)

在这种情况下,我的问题最初是通过不和谐作为字符串填充user_id。现在,它将其作为字符串接收,然后将ID转换为整数。

倪灿
2023-03-14

它对我有用。似乎您在调用client.get_channel(id)之前调用client.wait_until_ready()(您已经发送了编辑过的代码,所以我不能保证)。

这段代码对我来说很好:

async def background():
   await client.wait_until_ready()
   channel = client.get_channel(int(MY_CHANNEL))
   await channel.send("Test")

client.loop.create_task(background())

由于discord.pyv1.1,您可以更轻松、更安全地声明和管理后台任务。

这就是我们在cog中的工作方式:

import discord
from discord.ext import tasks, commands

class OnReady_Message(commands.Cog):
   def __init__(self, client):
      self.client = client
      self.send_onready_message.start()

   def cog_unload(self):
      self.send_onready_message.close()
      return

   # task
   @tasks.loop(count = 1)  # do it only one time
   async def send_onready_message(self):
      channel = self.client.get_channel(int(MY_CHANNEL))
      await channel.send("Test")

   @send_onready_message.before_loop  # wait for the client before starting the task
   async def before_send(self):
      await self.client.wait_until_ready()

      return

   @send_onready_message.after_loop  # destroy the task once it's done
   async def after_send(self):
      self.send_onready_message.close()

      return

最后,要运行任务send\u onready\u message(),我们可以创建一个task\u runner()对象,或者只需在任务实例中创建。

这将允许您轻松运行所有任务:

# importing the tasks
from cogs.tasks.on_ready_task import OnReady_Message

class Task_runner:
   def __init__(self, client)
      self.client = client

   def run_tasks(self):
      OnReady_Message(self.client)

      return

在您的主文件中:

import discord
from discord.ext import commands
from cogs.tasks.task_runner import Task_runner

client = commands.Bot(command_prefix = PREFIX)

runner = Task_runner(client)
runner.run_tasks()

client.run(token)

没有Task\u runner()我们有:

import discord
from discord.ext import commands
from cogs.tasks.on_ready_task import OnReady_Message

client = commands.Bot(command_prefix = PREFIX)

OnReady_Message(client)

client.run(TOKEN)

上面的示例只能在您的discord.py版本是最新的情况下工作。

要知道是否是,您可以在终端中运行:

>>> import discord
>>> discord.__version__
'1.2.3'

如果您的版本较旧,可以在终端中使用以下命令进行更新:

pip install discord.py --upgrade

希望有帮助!

 类似资料:
  • 此外,尝试在最后添加“if member not None:wait member.remove_roles(role)else:Print(error)”,每次尝试删除角色时都会出现错误,以防万一会有所帮助。 它能够在添加反应后给我一个角色,但在这里移除反应后无法移除角色

  • 如果pk_col值为空,则应打印未定义的主键。但我得到了这个错误。“NoneType”对象没有属性“rdd”。

  • 我是硒网络驱动程序的新手,目前使用Python来编写脚本。现在我想应用参数,我使用Excel应用了数据驱动方法。基本上只有第一个循环ok,它可以读取和写入第一行的数据,但之后不能。 首先,我在Python文件中创建它(作为新模块): 接下来,我编写以下代码以在登录和注销过程中包含数据驱动测试: 我得到了错误属性错误:“NoneType”对象没有属性“send_keys”,所以我认为包括等待/睡眠可

  • 问题内容: 下面的代码给出了错误: 码: 问题答案: 从代码中,我可以看到你希望允许用户下载pdf。 现在开始 去 http://localhost:5000

  • 问题内容: 我的程序看起来像 当我运行它时,它会抛出我 不知道为什么会这样?当我已经在每个列表的开头创建列表时 问题答案: 实际上,您存储在此处: 更改列表并返回 例:

  • 问题内容: 我遇到了这个问题,我不明白为什么。 我从我的应用程序中获取了代码,并制作了此测试代码,因此您不必费劲地查看我的要求。 我有这个工作在其他代码。但是,在将两者进行比较之后,我无法为自己的一生解决这个问题。 在此应用程序中,出现错误“ AttributeError:’NoneType’对象没有属性’delete’”。 问题答案: 在这一行: grid不返回任何内容,因此entryBox是,