【发布时间】:2021-03-19 00:14:20
【问题描述】:
好的,所以我用 python 创建了一个机器人,并设置了它,所以它总是启动和一切,但我想发出一条消息,它不断设置为服务器中的当前用户数。
我不知道该怎么做,如果能得到任何帮助,我将不胜感激。我已经得到消息 id、频道 id 和公会 id,我只需要知道如何编辑消息以及如何每隔 10 秒左右进行一次。
感谢您的帮助!
【问题讨论】:
好的,所以我用 python 创建了一个机器人,并设置了它,所以它总是启动和一切,但我想发出一条消息,它不断设置为服务器中的当前用户数。
我不知道该怎么做,如果能得到任何帮助,我将不胜感激。我已经得到消息 id、频道 id 和公会 id,我只需要知道如何编辑消息以及如何每隔 10 秒左右进行一次。
感谢您的帮助!
【问题讨论】:
from discord.ext import commands
from typing import Union
import asyncio
import discord
_CH = Union[discord.TextChannel, discord.VoiceChannel, discord.CategoryChannel]
_C = commands.Context
class StatusCog(commands.Cog):
INTERVAL = 60
TEMPLATE = 'Online: {}, All: {}'
def __init__(self, bot: commands.Bot):
self.bot = bot
self.running = False
self.STATUS_DICT = {'online': 0, 'offline': 0, 'idle': 0, 'dnd': 0}
@commands.group(invoke_without_command=True)
async def count(self, ctx: _C):
pass
@count.command()
async def start(self, ctx: _C, channel: _CH):
self.running = True
while self.running:
status = self.STATUS_DICT.copy()
for member in ctx.guild.members:
s = member.status
for key in status.keys():
if getattr(s, key, False):
status[key] += 1
break
await channel.edit(name=self.TEMPLATE[:].format(list(status.values())))
await asyncio.sleep(self.INTERVAL)
@count.command()
async def stop(self, ctx: _C):
self.running = False
def setup(bot: commands.Bot):
bot.add_cog(Cog(bot))
【讨论】: