質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1335閲覧

Discord.pyでボタンのインタラクション時に 'Button' object has no attribute 'guild'とエラーが出る

apppple

総合スコア0

Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/10/07 10:22

Discordでチケット機能を搭載したBOTを以下の動画をほぼ丸写しの状態で作成しておりました。
下の動画で主に参考にしたのはチケット作成の部分のみで、class aclient(discord.Client):より下の部分は別の動画を参考にしながら書いていました

Transcripts | Ticketing in Discord.py (Part 4)

仕組みとしては

  1. /setupでembedメッセージとチケット作成のボタンを送信

  2. チケット作成ボタンをクリックでクリックした人のユーザー名のついたチャンネルを作成

といった感じです。

2のチケット作成ボタンをクリックしたときにAttributeError: 'Button' object has no attribute 'guild'とエラーを吐きます。

Pythonバージョンは3.10.7
Discord.pyバージョンは2.1.0a

Python

1import discord 2from discord import app_commands, utils 3 4guild_id = "1027044756389367859" 5 6 7#チケット作成 8class ticket_launcher(discord.ui.View): 9 def __init__(self) -> None: 10 super().__init__(timeout=None) 11 12 @discord.ui.button(label="チケットを作成する",style = discord.ButtonStyle.success, custom_id = "ticket_button") 13 async def ticket(self, button:discord.ui.button , interaction:discord.Interaction): 14 ticket = utils.get(interaction.guild.text_channels, name = f"🎫| {interaction.user.name}-{interaction.user.discriminator}") 15 if ticket is not None: await interaction.response.send_message(f"すでにチケットが存在しています {ticket.mention}",ephemeral=True) 16 else: 17 overwrites = { 18 interaction.guild.default_role: discord.PermissionOverwrite(view_channel = False), 19 interaction.user: discord.PermissionOverwrite(view_channel = True, send_message = True, attach_files = True, embed_links = True), 20 interaction.guild.me: discord.PermissionOverwrite(view_channel = True ,send_message = True, read_message_history = True) 21 } 22 channel = await interaction.guild.create_text_channel(name = f"🎫| {interaction.user.name}-{interaction.user.discriminator}",overwrites = overwrites, reason = f"🎫| {interaction.user.name}") 23 await channel.send(f"{interaction.user.mation} チケットが作成されました!") 24 await interaction.response.send_message(f"チケットが作成されました{channel.mention}", ephemeral= True) 25 26 27 28 29class aclient(discord.Client): 30 def __init__(self): 31 super().__init__(intents = discord.Intents.default()) 32 self.synced = False #we use this so the bot doesn't sync commands more than once 33 34 async def on_ready(self): 35 await self.wait_until_ready() 36 if not self.synced: #check if slash commands have been synced 37 await tree.sync(guild = discord.Object(id=guild_id)) #guild specific: leave blank if global (global registration can take 1-24 hours) 38 self.synced = True 39 print(f"{self.user}でログインしました") 40 41 42client = aclient() 43tree = app_commands.CommandTree(client) 44 45 46 47@tree.command(guild = discord.Object(id=guild_id), name = 'setup', description='セットアップを行います') #guild specific slash command 48async def setup(interaction: discord.Interaction): 49 await interaction.response.send_message(embed=embed,view=ticket_launcher()) 50 51client.run('TOKEN')

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

async def ticket(self, button:discord.ui.button , interaction:discord.Interaction):

async def ticket(self, interaction:discord.Interaction, button:discord.ui.button):
逆じゃないですか?

投稿2022/10/11 06:16

pecop

総合スコア409

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

apppple

2022/10/18 12:27 編集

順番を変更してみましたがだめでした... エラーコードも変わらずです
pecop

2022/10/20 05:58

そもそも`ticket`関数通ってます? async ticket()直下にprint文でも置いて反応見てみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問