使用Discord.py制作一个在预定日期发送消息的机器人

时间:2019-08-23 18:22:53

标签: python timer bots discord discord.py

我正在尝试制作一个将预定消息发送到特定文本通道的机器人。 例如,在我生日那天说“生日快乐”,或者每天早晨说“早安”。 该机器人似乎无法正常工作,因为我的文字频道中没有任何内容。

import discord,random,asyncio,os
from datetime import datetime
from discord.ext import commands

token = '#mytokenhere'
bot=commands.Bot(command_prefix='!')

send_time='01:41' #time is in 24hr format
message_channel_id='0000000000000' #channel ID to send images to

@bot.event
async def on_ready():
    print(bot.user.name)
    print(bot.user.id)

async def time_check():
    await bot.wait_until_ready()
    message_channel=bot.get_channel(message_channel_id)
    while not bot.is_closed:
        now=datetime.strftime(datetime.now(),'%H:%M')
        if now.hour() == 1 and now.minute() == 52:
            message= 'a'
            await message_channel.send(message)
            time=90
        else:
            time=1
        await asyncio.sleep(time)

bot.loop.create_task(time_check())


bot.run('token')

2 个答案:

答案 0 :(得分:2)

在这里,您将使用tasks extension

这样的操作
from discord.ext import commands, tasks

bot = commands.Bot("!")

target_channel_id = 1234

@tasks.loop(hours=24)
async def called_once_a_day():
    message_channel = bot.get_channel(target_channel_id)
    print(f"Got channel {message_channel}")
    await message_channel.send("Your message")

@called_once_a_day.before_loop
async def before():
    await bot.wait_until_ready()
    print("Finished waiting")

called_once_a_day.start()
bot.run("token")

答案 1 :(得分:0)

您也可以尝试使用aiocron。

pip安装aiocron

https://github.com/gawel/aiocron

在bot.run(TOKEN)之前的机器人代码中添加以下内容

import aiocron

CHANNEL_ID=1234

@aiocron.crontab('0 * * * *')
async def cornjob1():
    channel = bot.get_channel(CHANNEL_ID)
    await channel.send('Hour Cron Test')