这应该每15分钟在频道中发送一条消息。 由于某种原因,它不起作用。它也没有显示任何错误。有人可以帮我解决这个问题吗?
import time
from discord.ext import commands
message = 'choose roles from <#728984187041742888>'
channel_id = 742227160944869437 # the channel id (right click on the channel to get it)
time_spacing = 15*60 # s : 15min
class auto(commands.Cog):
def __init__(self, bot):
self.bot = bot
@commands.Cog.listener()
async def spamm(self, ctx):
while True:
time.sleep(time_spacing)
await ctx.get_channel(channel_id).send(message)
@commands.Cog.listener()
async def on_ready(self):
print(f'Sp4mm3r {self.bot.user} has connected to Discord!')
print('Sending message :', message, 'every', time_spacing, 'seconds')
def setup(bot):
bot.add_cog(auto(bot))
----------更正的版本----------- 发现问题是我没有开始任务,并且不打算在其中使用time.sleep。
from discord.ext import tasks
from discord.ext import commands
time = 30*60
class Automessager(commands.Cog):
def __init__(self, bot):
self.bot = bot
self.message = 'Choose roles from <#728984187041742888>'
self.channel1 = 725550664561983519
self.text.start()
@tasks.loop(seconds=time)
async def text(self):
try:
channel = self.bot.get_channel(self.channel1)
await channel.send(self.message)
except Exception as e:
print(e)
@commands.Cog.listener()
async def on_ready(self):
print(f'{self.bot.user} has connected to Discord!')
print(f'Sending message: {self.message} every {time} seconds')
def setup(bot):
bot.add_cog(Automessager(bot))
答案 0 :(得分:1)
您的代码中有两个错误:
get_channel()
是commands.Bot
方法,而不是discord.Context
方法。time.sleep()
等待15分钟,它将冻结您的整个齿轮。要进行循环,可以使用task.loop()
而不是使用齿轮监听器:
from discord.ext import task
from discord.ext import commands
class auto(commands.Cog):
def __init__(self, bot):
self.bot = bot
self.message = 'Choose roles from <#728984187041742888>'
self.channel_id = 742227160944869437
self.minutes = 15
@task.loop(minutes=self.minutes)
async def spamm(self, ctx):
channel = self.bot.get_channel(self.channel_id)
await channel.send(self.message)
@commands.Cog.listener()
async def on_ready(self):
print(f'Sp4mm3r {self.bot.user} has connected to Discord!')
print(f'Sending message: {self.message} every {self.minutes} minutes')
def setup(bot):
bot.add_cog(auto(bot))
PS:我已将channel_id
,message
和minutes
设置为类变量。您也不需要使用time.sleep()
。