我想在没有命令的情况下为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)
,然后它会引发另一个错误,即未定义“通道”名称。
免责声明:我今天才发现这个问题。我知道它已经解决了,但我想我可能会留下我的答案供将来使用或其他用户使用。
这是一个仅用于发送直接消息的解决方案(以我为例):
# 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转换为整数。
它对我有用。似乎您在调用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是,