問題
discord-py-slash-command
を用いてスラッシュコマンドを扱うcogの開発をしています.
cogのサンプルコードを見ると,cog側でguild_ids
を指定していました.
そのためライブラリとしてcogを作成すると,利用側からはギルドコマンドにするか,グローバルコマンドにするか選択できませんでした.
どのようにすれば利用側でguild_ids
を指定することができますか?
環境
- python 3.7
- discord.py 1.7.3
- discord-py-slash-command 2.3.1
試したこと
通常コマンドはping
のようにデコレータで登録されます.
そこで,hoge
のように@
を用いずに直接デコレータを適用すればいいのではないかと考えました.
しかし実際にhoge
コマンドを用いると,エラーが発生してしまいました.
ping/cog.py
(ping
ライブラリとして定義)
python
1from typing import List 2from discord.ext import commands 3from discord_slash import cog_ext, SlashContext 4 5guild_ids = [11111111111111111111] 6 7class PingCog(commands.Cog): 8 def __init__(self, bot: commands.Bot, g_ids: List[int] = None): 9 self.bot = bot 10 # 関数でコマンドを登録(NG) 11 self.hoge = cog_ext.cog_slash(name='hoge', description='hoge fuga', guild_ids=g_ids)(self.hoge) 12 13 async def hoge(self, ctx: SlashContext): 14 await ctx.send('fuga') 15 16 # デコレータでコマンドを登録(OK) 17 @cog_ext.cog_slash(name='ping', description='ping pong', guild_ids=guild_ids) 18 async def ping(self, ctx: SlashContext): 19 await ctx.send('pong')
main.py
(pip install -e /path/to/library
で上記ライブラリを導入)
python
1from discord.ext import commands 2from discord_slash import SlashCommand 3import ping 4 5bot_token = 'xxxxxxxxxxxxxxxxxxxxxxxxx' 6 7bot = commands.Bot(command_prefix='!') 8slash = SlashCommand(bot, sync_commands=True) 9guild_ids = [11111111111111111111] 10bot.add_cog(ping.PingCog(bot, guild_ids))
動作とエラー
/ping
→ pong
が投稿される(OK)
/hoge
→ インタラクションに失敗しました
が表示される(NG)
An exception has occurred while executing command `hoge`: Traceback (most recent call last): File "X:XXXXX\venv\lib\site-packages\discord_slash\client.py", line 1185, in invoke_command await func.invoke(ctx, **args) File "X:XXXXX\venv\lib\site-packages\discord_slash\model.py", line 208, in invoke return await self.func(self.cog, *args, **kwargs) TypeError: hoge() takes 2 positional arguments but 3 were given
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。