🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Discord

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

Python

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

Q&A

解決済

1回答

2616閲覧

PythonでDiscordBotにKick,Ban,Unban機能を追加したい

syu_kuri_mu

総合スコア4

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Discord

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

Python

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

0グッド

1クリップ

投稿2021/02/18 14:16

編集2021/02/19 08:31

前提・実現したいこと

DiscordBotでkick、ban、unbanの機能を追加しようとしているのですがエラーが起こり解決できませんでした。
写真のように処理後に送信されるメッセージは送られてきているので悩んでいます。
コードの!user info [UserName]のみ正常に機能し、ユーザー情報はしっかり送信されてきます。

イメージ説明

発生している問題・エラーメッセージ

Ignoring exception in command user kick: Traceback (most recent call last): File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\ext\commands\core.py", line 85, in wrapped ret = await coro(*args, **kwargs) File "p:\Discord bot\多機能bot\cogs\userinfocog.py", line 36, in kick await member.kick(reason=reason) File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\member.py", line 524, in kick await self.guild.kick(self, reason=reason) File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\guild.py", line 1886, in kick await self._state.http.kick(user.id, self.id, reason=reason) File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\http.py", line 241, in request raise Forbidden(r, data) discord.errors.Forbidden: 403 Forbidden (error code: 50013): Missing Permissions The above exception was the direct cause of the following exception: Traceback (most recent call last): File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\ext\commands\bot.py", line 902, in invoke await ctx.command.invoke(ctx) File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\ext\commands\core.py", line 1340, in invoke await ctx.invoked_subcommand.invoke(ctx) File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\ext\commands\core.py", line 864, in invoke await injected(*ctx.args, **ctx.kwargs) File "C:\Users\user\AppData\Local\Programs\Python\Python38\lib\site-packages\discord\ext\commands\core.py", line 94, in wrapped raise CommandInvokeError(exc) from exc discord.ext.commands.errors.CommandInvokeError: Command raised an exception: Forbidden: 403 Forbidden (error code: 50013): Missing Permissions

該当のソースコード

main側

lang

1USER = [ 2 'cogs.userinfocog' 3 4class MyBot(commands.Bot): 5 def __init__(self, command_prefix): 6 super().__init__(command_prefix) 7 8 for cog in USER: 9 try: 10 self.load_extension(cog) 11 except Exception: 12 traceback.print_exc() 13 14 async def on_ready(self): 15 print("ログインしました") 16 print('-------------') 17 await bot.change_presence(activity=presence) 18 19 20if __name__ == '__main__': 21 bot = MyBot(command_prefix='!') 22 bot.run(config.TOKEN) 23]

Cog側

lang

1class UserCog(commands.Cog): 2 def __int__(self, bot): 3 self.bot = bot 4 5 @commands.group() 6 async def user(self, ctx): 7 if ctx.invoked_subcommand is None: 8 await ctx.send('メインコマンドの後にサブコマンドが必要です。') 9 10 @user.command() 11 async def info(self, ctx, member : discord.Member): 12 users = discord.Embed(title=f'{member}の詳細', description='詳細', color=discord.Color.orange()) 13 users.set_author(name=ctx.author, icon_url=ctx.author.avatar_url) 14 users.set_thumbnail(url=member.avatar_url) 15 users.add_field(name='名前', value=f'**{member.display_name}#{member.discriminator}**') 16 users.add_field(name='あなたはBot?', value=member.bot) 17 users.add_field(name='作成時間', value=member.created_at, inline=False) 18 users.add_field(name='サーバーに参加した時間', value=member.joined_at) 19 await ctx.send(embed=users) 20 21 @user.command() 22 @commands.has_permissions(kick_members=True) 23 async def kick(self, ctx, member : discord.Member, reason=None): 24 kick = discord.Embed(title='メンバーをキックしました', description='Kickしたメンバーにまた来てもらうには再招待してください', color=discord.Color.red()) 25 kick.add_field(name='執行人', value=f'{ctx.author.mention}') 26 kick.add_field(name='Kickされた人', value=f'{member.mention}') 27 kick.set_thumbnail(url=member.avatar_url) 28 await ctx.send(embed=kick) 29 await member.kick(reason=reason) 30 31 @user.command() 32 @commands.has_permissions(ban_members=True) 33 async def ban(ctx, member : discord.Member, reason=None): 34 ban = discord.Embed(title='メンバーをBANしました', description='BANしたメンバーにまた来てもらうにはUNBANをし再招待してください', color=discord.Color.red()) 35 ban.add_field(name='執行人', value=f'{ctx.author.mention}') 36 ban.add_field(name='Kickされた人', value=f'{member.mention}') 37 ban.set_thumbnail(url=member.avatar_url) 38 await ctx.send(embed=ban) 39 await member.ban(reason=reason) 40 41 @user.command() 42 @commands.has_permissions(ban_members=True) 43 async def unban(ctx, member : discord.Member, reason=None): 44 unban=discord.Embed(title="BANを解除しました", color=0xff0000) 45 unban.set_thumbnail(url=user.avatar_url) 46 unban.add_field(name="対象", value=user, inline=False) 47 unban.add_field(name="実行", value=ctx.author, inline=False) 48 await user.unban() 49 await ctx.channel.send(embed=unban) 50 51def setup(bot): 52 bot.add_cog(UserCog(bot))

試したこと

main側のMyBotクラスに下記の文を追加して実行したが同様のエラーが出ました。

lang

1discord_intents = discord.Intents.all()

補足情報(FW/ツールのバージョンなど)

サーバーへの招待時、Administratorにチェックを入れサーバーへ招待しています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

コードには問題はありません。
エラーを見れば分かると思いますが、BOTの権限不足です。

  • botにkick権限があるか
  • botより上位のロールを持っている人をkickしようとしていないか

などをチェックしてみて下さい。

投稿2021/02/18 16:53

daima3629

総合スコア163

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

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

syu_kuri_mu

2021/02/19 08:26

サーバーへの招待はAdministratorにチェックを入れて招待し、main側のMyBotクラス内に"discord_intents = discord.Intents.all()"を追加して試してみましたが同様のエラーコードが出てしまいます。
daima3629

2021/02/19 12:53

僕が提示した2番目を確認してみて下さい
syu_kuri_mu

2021/02/20 06:21

確認不足でした。すみません。 自分と同じロールを付与して試したときのみ正常に動きました。 ありがとうございます!
daima3629

2021/02/20 12:57

助けになったのなら幸いです、ベストアンサーありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問