You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Discord按钮点击时无法检测已存在私人文本频道的问题求助

Discord按钮点击时无法检测已存在私人文本频道的问题求助

我写了一个Discord机器人的按钮功能,需求是:点击按钮时为当前用户和指定角色(一般是管理员)创建一个私人文本频道;如果用户再次点击,要能识别出已经存在以他命名的频道,避免重复创建。

但现在遇到的问题是,系统根本检测不到已存在的重复频道。

以下是我写的按钮代码:

class MyView(discord.ui.View):
    def __init__(self):
        super().__init__(timeout=None)
        self.value = None

    @discord.ui.button(label="Create new private channel", style=discord.ButtonStyle.gray)
    async def menu1(self, interaction: discord.Interaction, button: discord.ui.Button):
        guild = interaction.guild
        targeted_role = guild.get_role(1056649402330132551)

        overwrites = {
            guild.default_role: discord.PermissionOverwrite(read_messages=False),
            targeted_role: discord.PermissionOverwrite(read_messages=True),
            interaction.user: discord.PermissionOverwrite(read_messages=True)
        }

        name = "Bot-made channel for " + interaction.user.__str__()
        cat = discord.utils.get(guild.categories, name = 'brendan')
        all_channels = interaction.channel.category.channels
        channel_exists = discord.utils.get(interaction.channel.category.text_channels, name= name)

        if not channel_exists:
            await guild.create_text_channel(name= "Bot-made channel for " + interaction.user.name, category=cat, overwrites=overwrites)
        else:
            await interaction.response.send_message("You have already created a private channel.", ephemeral = True)

我卡在了这段检测频道是否存在的逻辑上:

channel_exists = discord.utils.get(interaction.channel.category.text_channels, name= name)

if not channel_exists:
    await guild.create_text_channel(name= "Bot-made channel for " + interaction.user.name, category=cat, overwrites=overwrites)
else:
    await interaction.response.send_message("You have already created a private channel.", ephemeral = True)

我本来以为是因为按钮点击后没有实时更新频道列表,但调试后发现discord.utils.get()获取到的文本频道是最新的,可还是检测不到重复。

目前我在考虑一个替代方案:用户点击按钮后,直接取消他对按钮所在原频道的查看权限,这样他就没法重复点击了,但这不是最优解。

我刚接触Python,不管是逻辑修正还是其他优化建议,都欢迎大家提出,谢谢各位的时间!

备注:内容来源于stack exchange,提问作者Brendan

火山引擎 最新活动