Python 如何在没有命令或事件discord.py的情况下发送消息

Python 如何在没有命令或事件discord.py的情况下发送消息,python,discord,discord.py,Python,Discord,Discord.py,我用datetime文件打印:现在是早上7点,每天早上7点。现在,因为这在命令或事件引用之外,我不知道如何在discord中发送消息,说现在是早上7点。只是为了澄清一下,这不是警报,实际上是给我的学校服务器的,它会在早上7点发出我们需要的所有东西的清单 import datetime from time import sleep import discord time = datetime.datetime.now while True: print(time()) if

我用datetime文件打印:现在是早上7点,每天早上7点。现在,因为这在命令或事件引用之外,我不知道如何在discord中发送消息,说现在是早上7点。只是为了澄清一下,这不是警报,实际上是给我的学校服务器的,它会在早上7点发出我们需要的所有东西的清单

import datetime
from time import sleep
import discord

time = datetime.datetime.now


while True:
    print(time())
    if time().hour == 7 and time().minute == 0:
        print("Its 7 am")
    sleep(1)
这就是在早上7点触发警报的原因。我只想知道当触发警报时,如何在不和谐中发送消息

如果您需要任何澄清,请询问。 谢谢

在客户端设置后,您可以使用以下格式直接向频道发送消息:

channel = client.get_channel(12324234183172)
await channel.send('hello')

一旦有了频道(在设置客户端之后),就可以根据需要编辑代码片段,以选择合适的频道和所需的消息。请记住,
“您只能在异步def函数中使用wait,而不能在其他任何地方使用。”
因此,您需要设置一个异步函数来执行此操作,而简单的
则为True:
循环可能不起作用。

从discord.py的文档中,您首先需要通过其id获取通道,然后才能发送消息

见:

您必须直接获取通道,然后调用适当的方法。例如:


希望,这会有所帮助。

您可以创建一个后台任务来完成此任务,并将消息发布到所需的频道

您还需要使用
asyncio.sleep()
而不是
time.sleep()
,因为后者正在阻塞,可能会冻结和崩溃您的机器人

我还包括了一项检查,以确保该频道不会在上午7点时每秒被垃圾邮件发送

from discord.ext import commands
import datetime
import asyncio

time = datetime.datetime.now

bot = commands.Bot(command_prefix='!')

async def timer():
    await bot.wait_until_ready()
    channel = bot.get_channel(123456789) # replace with channel ID that you want to send to
    msg_sent = False

    while True:
        if time().hour == 7 and time().minute == 0:
            if not msg_sent:
                await channel.send('Its 7 am')
                msg_sent = True
        else:
            msg_sent = False

    await asyncio.sleep(1)

bot.loop.create_task(timer())
bot.run('TOKEN')

只是出于好奇,这段代码每秒钟都在刷新,对吗?发送的消息是否每天刷新?是的,
wait asyncio.sleep(1)
等待1秒。您可以根据需要增加
msg_sent
将在第一次是早上7点时切换到
True
,并在早上7点过后切换到
False
(因此在07:01)
from discord.ext import commands
import datetime
import asyncio

time = datetime.datetime.now

bot = commands.Bot(command_prefix='!')

async def timer():
    await bot.wait_until_ready()
    channel = bot.get_channel(123456789) # replace with channel ID that you want to send to
    msg_sent = False

    while True:
        if time().hour == 7 and time().minute == 0:
            if not msg_sent:
                await channel.send('Its 7 am')
                msg_sent = True
        else:
            msg_sent = False

    await asyncio.sleep(1)

bot.loop.create_task(timer())
bot.run('TOKEN')