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