Python Discord.py Bot间隔消息发送

时间:2020-04-22 13:19:03

标签: python discord.py

我一直在尝试使用discord.py库为Discord创建一个bot,但是当我运行该程序时,它没有按预期发送消息。这是一个简单的漫游器,它假设每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')

2 个答案:

答案 0 :(得分:0)

如果频道ID是字符串,则It should be an integer.

打开它:

self

进入:

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

答案 1 :(得分:0)

代替client.loop.create_task(my_background_task()),只需将后台函数放在on_ready 事件中。并取出 await client.wait_until_ready() 并将该函数也放入 on_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 版本,因为我不知道它是哪个版本,然后这个和其他答案可能是错误的。