如何在不和谐中使用命令切换触发 Cog 侦听器
Posted
技术标签:
【中文标题】如何在不和谐中使用命令切换触发 Cog 侦听器【英文标题】:How to toggle trigger Cog listener with command in discord 【发布时间】:2020-10-25 22:49:12 【问题描述】:我目前正在尝试制作一个不和谐机器人,当您在所需频道中键入命令!purge
时,它会不断删除所有发送的消息,当您再次键入时,它将停止删除所有消息。
通过在线学习,我知道我必须使用 Cog 侦听器,但我并不完全知道如何使用命令“触发”它。我需要@commands.Cog.listener()
段落才能使用on_message
侦听器,但我也不知道如何让它删除执行命令!purge
的通道中的消息。
我已经尝试使用布尔值在键入命令时打开和关闭,它会使用 while 循环不断删除消息,但随后 while 循环会停止。可能是因为命令的会话已过期,但不确定。
对如何使用它有什么想法吗?更具体地说,我如何以某种方式将 Cog 链接到命令?谢谢!
(我试图在这里使用的代码的编辑,但由于不相关而删除了它们)
我找到的 Cog 线程:https://***.com/a/53528504/11805086
【问题讨论】:
【参考方案1】:您必须创建一个触发命令,该命令启用或禁用清除模式,然后,在您的 on_message
函数中,您必须检查是否启用了清除模式。
以下是操作方法(在一个 cog 内): 由海报编辑
在 cogs.py 中from discord.ext import commands
class Purge_Cog(commands.Cog):
def __init__(self, bot):
self.bot = bot
self.channels =
@commands.command()
async def purge(self, ctx):
try:
if self.channels[ctx.channel]:
self.channels[ctx.channel] = False
await ctx.channel.send("Purge mode disabled!")
else:
self.channels[ctx.channel] = True
await ctx.channel.send("Purge mode enabled!")
except:
self.channels[ctx.channel] = True
await ctx.channel.send("Purge mode enabled!")
@commands.Cog.listener()
async def on_message(self, message):
try:
if self.channels[message.channel]:
await message.channel.purge(limit=999)
except:
pass
def setup(bot):
bot.add_cog(Purge_Cog(bot))
在你的主文件中添加这个(bot.py 或 main.py)
import discord
from discord.ext import commands
initial_extensions = ['cogs.cogs']
if __name__ == '__main__':
for extension in initial_extensions:
bot.load_extension(extension)
bot.run('Your token')
【讨论】:
最后,我需要为每个通道的清除创建一个布尔值列表,因为清除布尔值在所有通道中都是通用的。我在 if 语句和更改每个ctx.channel
的布尔值时遇到问题。有什么想法吗?
我的错^^。我换了帖子。希望这是最后一次编辑。 PS:结束后,你可以删除你的cmets(所以看到这篇文章的人不会浪费时间或迷路)
由于某种原因,该命令不起作用。模式消息也没有输出,现在进行故障排除。仔细检查代码是否正确。 @Mr_Spaar
我错过了 except
的拼写,并将 on_message
中的 self.channels[ctx.channel]
替换为 self.channels[message.channel]
以上是关于如何在不和谐中使用命令切换触发 Cog 侦听器的主要内容,如果未能解决你的问题,请参考以下文章