Py_r
@Py_r

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

discord.pyのチケットシステム

行いたいこと

Discordでボタンを押すとその人と管理者が見れるプライベートチャンネルを作るシステムを作りたい

環境

Python3.9.6
macOS BigSur
VisualStudioCode

書いたソースコード

#coding:utf-8
import discord
from discord.ext import commands
from discord_buttons_plugin import *
cl=commands.Bot(command_prefix='p!')
button=ButtonsClient(cl)
token='MY_TOKEN'
@cl.event
async def on_ready():
    print('Booting Bot ...')

@cl.command()
async def create_panel(ctx):
    await button.send(
        content='チケット作成',
        channel=ctx.channel.id,
        components=[
            ActionRow([
                Button(
                    label='お問い合わせ',
                    style=ButtonType().Primary,
                    custom_id='create_inquiry'
                )
            ]),ActionRow([
                Button(
                    label='購入',
                    style=ButtonType().Danger,
                    custom_id='create_buy'
                )
            ])
        ]
    )

@button.click
async def create_inquiry(ctx):
    #ここ

@button.click
async def create_buy(ctx):
    #ここ

cl.run(token)

#ここ に入るコードを教えていただきたいです。

0

1Answer

まずdiscord_buttons_pluginは今後の開発に支障をきたす恐れがあるため、Discord.py V2.0以降に搭載されているApp_commandsやdiscord.uiキットを推奨します。
まず、チケットシステムは
「チケットを開く」ボタン押下

プライベートチャンネル作成(要するに権限設定を行う)

作成したチャンネルに閉じるボタンを配置

「チケットを閉じる」ボタン押下

そのチャンネルを削除またはなんらかの方法で保存する

このようなフローチャートを考えてみてください。
Text channelを作るメソッドにはGuild.create_text_channelCategoryChannel.create_text_channelなどを使うことができます。
引数にoverwritesとしてこのようなdictを渡せば、実行した人のみが見れるチャンネルになります。

overwrites = {
    ctx.default_role: discord.PermissionsOverwrite(read_messages=False),
    ctx.author: discord.PermissionsOverwrite(read_messages=True, send_messages=True)
}

あとは考えてみてください直ぐわかるはずです
何か不明点ありましたらご連絡ください
0Like

Your answer might help someone💌