如何让Pycord开发的Discord机器人在斜杠命令触发频道发送消息?
解决方案
要让机器人在触发斜杠命令的频道发送消息,只需利用Pycord的命令上下文(ApplicationContext)获取当前频道,无需硬编码查找指定名称的频道。具体修改如下:
- 在命令函数参数中添加
ctx: discord.ApplicationContext,用于获取命令触发的上下文信息 - 删除硬编码查找
stonks频道的代码 - 使用
ctx.send()直接在触发频道发送消息 - 用
user.display_name简化用户名获取逻辑(自动优先取用户服务器昵称,无昵称则用用户名) - 移除不必要的全局变量
stripped_name
修改后的完整代码:
@bot.slash_command(name="gaycheck", description="Presents series of questions to ask user if they are gay", timeout=30) async def check(self, ctx: discord.ApplicationContext, user: discord.Member): # 直接获取用户的显示名称 name = user.display_name field = f''' {name}, {random.choice(question)} ''' embed = discord.Embed(color=0xffffff).add_field( name=f'__Is {name} gay?__', value=field, inline=False, ) # 在触发命令的频道发送消息 await ctx.send(embed=embed, view=ButtonView(timeout=30))
说明:
ctx参数包含命令触发时的所有上下文信息,包括触发频道、发起用户、所在服务器等ctx.send()会自动在触发命令的频道发送内容,无需额外查找频道user.display_name是Pycord内置的便捷属性,比手动判断昵称是否存在的逻辑更简洁可靠
内容的提问来源于stack exchange,提问作者nippleman
相关产品推荐
相关产品推荐

