python - Discord.py 使“wait_for”仅在私人消息中有效
问题描述
我在制作这个不和谐机器人时遇到了一个问题。每当用户运行命令!!bug
时,都会有一条私人消息,用户必须在其中回答几个问题。问题是,无论何时运行该命令,您仍然可以在运行该命令的聊天中回答问题。
如果用户在私人消息中写入,我希望它只等待用户响应,而不是运行命令的聊天。所以这行代码:
responseDesc = await self.client.wait_for('message', check=lambda message: message.author == ctx.author, timeout=300)
仅当用户在私人消息中写入时才应该工作。
这是我的代码:
import discord
from discord.ext import commands
import asyncio
emojis = ["\u2705", "\U0001F6AB", "\u274C"]
class Bug(commands.Cog):
def __init__(self, client):
self.client = client
@commands.command()
async def bug(self, ctx, desc=None, rep=None):
await ctx.channel.purge(limit=1)
user = ctx.author
await ctx.author.send('```Please explain the bug```')
responseDesc = await self.client.wait_for('message', check=lambda message: message.author == ctx.author, timeout=300)
description = responseDesc.content
await ctx.author.send('```Please provide pictures/videos of this bug```')
responseRep = await self.client.wait_for('message', check=lambda message: message.author == ctx.author, timeout=300)
replicate = responseRep.content
await ctx.author.send('Your bug report has been sent.')
embed = discord.Embed(title='Bug Report', color=0x00ff00)
embed.add_field(name='Description',
value=description, inline=False)
embed.add_field(name='Replicate', value=replicate, inline=True)
embed.add_field(name='Reported By', value=user, inline=True)
adminBug = self.client.get_channel(733721953134837861)
message = await adminBug.send(embed=embed)
for emoji in emojis:
await message.add_reaction(emoji)
@commands.Cog.listener()
async def on_reaction_add(self, reaction, user):
reaction_message = reaction.message
message = await reaction_message.channel.fetch_message(reaction_message.id)
my_embed = message.embeds[0]
emoji = reaction.emoji
if user.bot:
return
if emoji == "\u2705":
fixed_channel = self.client.get_channel(733722567449509958)
await fixed_channel.send(embed=my_embed)
elif emoji == "\U0001F6AB":
notBug = self.client.get_channel(733722584801083502)
await notBug.send(embed=my_embed)
elif emoji == "\u274C":
notFixed = self.client.get_channel(733722600706146324)
await notFixed.send(embed=my_embed)
else:
return
def setup(client):
client.add_cog(Bug(client))
解决方案
您可以检查频道是否为私人频道if isinstance(message.channel, discord.DMChannel)
推荐阅读
- amazon-dynamodb - 更新表达式无效:两个文档路径相互重叠 Appsync
- java - 有没有办法在 Java 中将 Else 与 Catch 结合起来?
- reactjs - SWR,围绕 useSWR 钩子创建一个包装器以显示加载状态
- installation - 如何重新定位 Inno Setup 的卸载程序?
- neovim - Nvim lsp - 更改 lspconfig 诊断消息位置
- amazon-web-services - EKS 中的持久存储无法配置卷
- python - 从 Python 中的 Pandas DataFrame 中随机删除 n 个连续的、不重叠的行
- r - R:while 和 if-else 循环
- docker - 如何创建两个共享代码和资产的 NestJS 存储库?
- android - 尝试通过选择器共享图像时未出现主题和文本