按钮和表单问题

问题描述 投票:0回答:1

我需要创建一个功能来创建自定义临时语音通道和文本通道,用户可以在其中设置他的私人房间。

@client.event
async def on_ready():
    print('bot online')
    await private_rooms_menu()
#...
async def private_rooms_menu():
    private_rooms_menu_embed = discord.Embed(title="Private room menu")
    edit_private_rooms_channel = client.get_channel(EDIT_PRIVATE_ROOMS_ID)
    await edit_private_rooms_channel.purge(limit=None)

    menu_buttons = discord.ui.View()
    btn_change_private_room_name = discord.ui.Button(label='Change name', style=discord.ButtonStyle.primary)
    btn_private_room_open = discord.ui.Button(label='Open', style=discord.ButtonStyle.grey)
    btn_private_room_lock = discord.ui.Button(label='Lock', style=discord.ButtonStyle.grey)
    btn_private_room_give_access = discord.ui.Button(label='Give access', style=discord.ButtonStyle.green)
    btn_private_room_kick = discord.ui.Button(label='Kick', style=discord.ButtonStyle.red)

    menu_buttons.add_item(item=btn_change_private_room_name)
    menu_buttons.add_item(item=btn_private_room_open)
    menu_buttons.add_item(item=btn_private_room_lock)
    menu_buttons.add_item(item=btn_private_room_kick)
    menu_buttons.add_item(item=btn_private_room_give_access)

    async def btn_change_private_room_callback(ctx):
        changed_private_room_name = ''
        private_name_modal = discord.ui.Modal(title="Private room changing:")
        name_modal = discord.ui.TextInput(label="Enter new channel name:",
                                          placeholder='*something interesting*',
                                          required=True,
                                          max_length=MAX_PRIVATE_ROOM_NAME_LENGTH)
        private_name_modal.add_item(name_modal)

        async def on_submit(changed_name: str):
            changed_name = name_modal

        await on_submit(changed_private_room_name)
        print(changed_private_room_name)

    async def btn_private_room_open_callback(ctx):
        return

    async def btn_private_room_lock_callback(ctx):
        return

    async def btn_private_room_give_access_callback(ctx):
        return

    async def btn_private_room_kick_callback(ctx):
        return

    btn_change_private_room_name.callback = btn_change_private_room_callback
    btn_private_room_open.callback = btn_private_room_open_callback
    btn_private_room_lock.callback = btn_private_room_lock_callback
    btn_private_room_give_access.callback = btn_private_room_give_access_callback
    btn_private_room_kick.callback = btn_private_room_kick_callback

    await edit_private_rooms_channel.send(embed=private_rooms_menu_embed, view=menu_buttons, silent=True)

这个菜单应该对每个在他的私人房间里的人来说都是可交互的。 问题在于

async def btn_change_private_room_callback(ctx):

不起作用。 pycharm中没有错误,只是在discord聊天中显示“此交互失败” this interaction failed 我试图完全删除该函数中的所有内容,只留下 print(),但出现了同样的问题

另外,我觉得modal有几个错误,我只是不知道怎么写

python discord discord.py bots
1个回答
0
投票
async def btn_change_private_room_callback(ctx):
        changed_private_room_name = ''
        private_name_modal = discord.ui.Modal(title="Private room changing:")
        name_modal = discord.ui.TextInput(label="Enter new channel name:",
                                          placeholder='*something interesting*',
                                          required=True,
                                          max_length=MAX_PRIVATE_ROOM_NAME_LENGTH)
        private_name_modal.add_item(name_modal)

        await ctx.response.send_modal(private_name_modal)

顺便说一句,使用交互,ctx 在这种情况下很混乱

© www.soinside.com 2019 - 2024. All rights reserved.