3 回答
TA贡献1906条经验 获得超10个赞
您可以创建一个后台任务来执行此操作并将消息发布到所需的频道。
您还需要使用asyncio.sleep()而不是time.sleep()因为后者会阻塞并且可能会冻结并崩溃您的机器人。
我还添加了一项检查,以便该频道不会在早上 7 点的每一秒都收到垃圾邮件。
discord.pyv2.0
from discord.ext import commands, tasks
import discord
import datetime
time = datetime.datetime.now
class MyClient(commands.Bot):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.msg_sent = False
async def on_ready(self):
channel = bot.get_channel(123456789) # replace with channel ID that you want to send to
await self.timer.start(channel)
@tasks.loop(seconds=1)
async def timer(self, channel):
if time().hour == 7 and time().minute == 0:
if not self.msg_sent:
await channel.send('Its 7 am')
self.msg_sent = True
else:
self.msg_sent = False
bot = MyClient(command_prefix='!', intents=discord.Intents().all())
bot.run('token')
discord.pyv1.0
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')
TA贡献1847条经验 获得超7个赞
从Discord.py 文档中,当您设置了客户端时,您可以使用以下格式直接向频道发送消息:
channel = client.get_channel(12324234183172) await channel.send('hello')
拥有频道后(设置客户端后),您可以根据需要编辑该代码片段,以选择适当的频道以及所需的消息。请记住"You can only use await inside async def functions and nowhere else."
,您需要设置一个异步函数来执行此操作,并且您的简单While True:
循环可能不起作用
TA贡献1862条经验 获得超6个赞
根据discord.py的文档,您首先需要通过其id获取频道,然后才能发送消息。
您必须直接获取通道,然后调用适当的方法。例子:
channel = client.get_channel(12324234183172) await channel.send('hello')
希望这可以帮助。
添加回答
举报