我认为这将是一个简单的任务,但是我什至可以把它弄乱。 所以我只想让我的机器人每5分钟发送一条消息(以拖曳我的朋友)为一条特定的消息。 所以我发现这不起作用或任何其他代码。我什至没有收到错误消息。因此,我几乎一无所知,这很糟糕。
import discord
import asyncio
client = discord.Client()
async def my_background_task():
await client.wait_until_ready()
counter = 0
channel = discord.Object(id='channel_id_here')
while not client.is_closed:
counter += 1
await client.send_message(channel, counter)
await asyncio.sleep(60) # 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('token')
无论如何,这是我编写的代码,没有所有的Bot命令。
import discord
from discord.ext.commands import Bot, has_permissions
import secrets
import numpy as np
import re
TOKEN = 'mytokenasastring'
BOT = Bot(command_prefix='!')
#... some commands for my bot for my friends and myself
BOT.loop.create_task(my_background_task())
BOT.run(TOKEN)
所以我只是这样添加了上面的代码
async def my_background_task():
await BOT.wait_until_ready()
counter = 0
channel = discord.Object(id='mytestchannelidasastring') #i also tried as int but also doenst work
while not BOT.is_closed:
counter += 1
await BOT.send_message(channel, counter)
await asyncio.sleep(60) # task runs every 60 seconds
然后vs代码告诉我的Bot doenst有一个send_message方法。所以我将send_message的代码更改为此
await channel.send(counter)
但是现在我得到了警告/错误形式的VS代码,该通道确实具有send方法,所以我得到了这样的(真实?!)通道
BOT.get_channel(id='mychannelidasstring')
它仍然不起作用,或者我没有收到任何类型的错误消息...请帮助,否则我会发疯....
答案 0 :(得分:3)
尝试使用discord.tasks.loop
。
from discord.ext import tasks
counter = 0
@tasks.loop(minutes=1.0, count=None)
async def my_background_task():
global counter
channel = BOT.get_channel(123456789) # channel id as an int
counter += 1
await channel.send(f'{counter}')
my_background_task.start()
每分钟循环一次您的巨魔功能。
答案 1 :(得分:1)
似乎您正在使用一些旧的异步(v0.16.x)文档/教程,可以从send_message()
中看到并将ID编写为字符串。我建议您尝试查找更多最新的教程并改为阅读最新的文档。
有关此后到最新版本的所有主要更改,请参见here,重写(v1.x)
关于您的代码,它应该是这样的:
async def my_background_task():
await client.wait_until_ready() # ensures cache is loaded
counter = 0
channel = client.get_channel(id=112233445566778899) # replace with target channel id
while not client.is_closed():
counter += 1
await channel.send(counter)
await asyncio.sleep(60) # or 300 if you wish for it to be 5 minutes
@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()) # best to put it in here
client.run("token")
参考: