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

Python不和谐。py-Bot间隔消息发送

锺离晗昱
2023-03-14

我一直在尝试使用Discord为Discord创建一个机器人。但是,当我运行程序时,它没有按预期发送消息。这是一个简单的机器人,假设每10分钟向一个频道发送一条消息。我在命令行中没有收到任何错误消息,似乎看不到任何明显的错误?任何帮助都将不胜感激。

import asyncio

client = discord.Client()

async def my_background_task():
    await client.wait_until_ready()
    counter = 0
    channel = discord.Object(id='my channel ID goes here')
    while not client.is_closed:
        counter += 1
        await message.channel.send("TEST")
        await asyncio.sleep(5) # task runs every 60 seconds

@client.event
async def on_ready():
    print('Logged in as')
    print(client.user.name)
    print(client.user.id)
    print('------')

client.loop.create_task(my_background_task())
client.run('My token goes here')

共有3个答案

李甫
2023-03-14

而不是客户端。环创建任务(my_background_task()),只需将后台函数放在\u ready事件中。取出等待客户。等待_ready()并将函数也放入_ready事件中。我还更改了客户机变量,删除了不必要的代码,并添加了一些模块。

import asyncio, discord
from discord.ext import commands

client = commands.Bot(command_prefix = ".") # If you don't want a prefix just take out the parameter.

async def my_background_task():
    channel = discord.Object(id='my channel ID goes here')
    while True:
        await channel.send("TEST")
        await asyncio.sleep(5) # task runs every 60 seconds

@client.event
async def on_ready():
    print('Logged in as')
    print(client.user.name)
    print(client.user.id)
    print('------')
    my_background_task()

client.run('My token goes here')

同样在将来发布问题时,请标记python版本,因为我不知道它是哪个版本,然后这个和其他答案可能是错误的。

崔绍辉
2023-03-14

如果通道ID是字符串,则应为整数。

转动这个:

channel = discord.Object(id='my channel ID goes here')

成:

channel = discord.Object(id=101029321892839) # an example ID

如果这不能解决您的问题,请尝试将'message.channel.send'设置为'channel.send'client.is_closed应该是

client.is_closed() # put brackets
马沛
2023-03-14

虽然创建一个任务可以工作,但当有更好的选择时,我不推荐它。Dpy的command.ext插件直接内置了一个基于任务的系统,所以让我们来看看使用它。

import discord
from discord.ext import tasks

client = discord.Client()

@tasks.loop(minutes=10)
async def my_background_task():
    """A background task that gets invoked every 10 minutes."""
    channel = client.get_channel(754904403710050375) # Get the channel, the id has to be an int
    await channel.send('TEST!')
    
@my_background_task.before_loop
async def my_background_task_before_loop():
    await client.wait_until_ready()

my_background_task.start()
client.run('Your token goes here')

上述循环运行的时间取决于人类心理、能量定律和宇宙。即:

•你对此感到厌烦

停电,你的脚本停止工作

•宇宙爆炸

请在此处阅读更多信息:

  • https://discordpy.readthedocs.io/en/latest/ext/tasks/
 类似资料:
  • 在不和谐中发送私人消息的问题。以下是两个代码示例(简化)。 此代码块将消息(cookie表情符号)发回给用户,无论它是私人聊天(与机器人)还是频道 这段代码私下向用户发送了一条消息,如果用户在通道中发送了命令,它就可以工作了,我对此很满意。 问题是,我希望用户能够在频道或私人消息中向bot发送一条消息“.cookie”,并获取私人消息(cookie表情符号)。 最后一段代码。如果我发出命令。coo

  • 我有点不和谐。py bot和我使用此脚本使bot在被邀请到服务器时向主通道发送消息!但是,这不会向服务器发送任何内容!请帮忙!

  • 请不要说“已经回答”,因为我尝试了一切,包括这里的所有相关帖子,显然,我正在阅读api文档。 完全错误为: 忽略on_ready Traceback(最近一次调用)中的异常:文件“/usr/local/lib/python3.8/dist packages/discord/client.py”,第312行,在on_ready wait channel中的事件wait coro(*args,**kw

  • 我正在尝试制作一个机器人,每4小时发送一次自动消息,但由于某些原因,它无法工作。我查看了所有的google和stack overflow,但没有一个答案能帮助我。不和谐是否改变了机器人发送消息的方式? 如果我试图运行这个代码,它会给我这个错误 任何帮助将不胜感激并感谢您的时间

  • 我一直在四处寻找,似乎找不到我用Typescript制作的不和谐机器人的这个问题的答案。我的所有命令都放在它们自己的文件夹中,每个命令都有一个单独的文件。有助于保持井井有条。 我见过有人说 但这给了我并且 实际上,每当有人运行重启命令时,我会尝试在每个文本频道(从列表中给出)发送一条机器人消息,因为不管出于什么原因,人们总是重启机器人。我把它实现为一件有趣的事情,如果有人需要使用它,我会时不时地以

  • 我希望我的机器人每天在特定的时间发送一条消息,运行另一个机器人的命令。例如,我想让我的机器人写“s!t"每天凌晨2点在特定频道上,并删除机器人发送的消息。我该怎么做?