1. ホーム
  2. python

[解決済み] Discord.py 別のファイルからコードを実行するにはどうすればいいですか?

2022-03-04 18:21:34

質問

私のDiscordボットのコードを少し整理したいのですが、1つの巨大なメインファイルを持つ代わりに、コマンドを異なるファイルに分割しています。他のファイルからコードを直接インポートできることは知っています。 import [file] しかし、Discordのコードではうまくいきません。 もし私が次のようなことを試すなら。

test1.py

await ctx.send("successful")

main.py

@client.command()
asnyc def test(ctx):
   import test1

いつもエラーが出ます SyntaxError: 'await' outside function . が原因なのは分かっているのですが await は非同期関数の外にあるのですが、どうすれば直るのかわかりません。もし私が test1.py を次のようなものに変更します。 print("successful") を実行すると、コンソールに正しい応答が表示されます。すでに解決策を調べてみましたが、むしろますます混乱しています。

どのように解決するのですか?

Discordには"extensions"というシステムがあり、これは特にコマンドを異なるファイルに分割するために設計されています。関数の一部だけでなく、関数全体をファイルに入れるようにしてください。そうしないと Python はエラーを出します。以下は、ドキュメントから直接引用した例です。

メインファイルです。

...create bot etc...
bot.load_extension("test")  # use name of python file here
...run bot etc...

その他のファイル(この例ではtest.pyと呼びます)。

from discord.ext import commands

@commands.command()
async def hello(ctx):
    await ctx.send('Hello {0.display_name}.'.format(ctx.author))

def setup(bot):
    bot.add_command(hello)

重要なポイントは (1) Pythonファイルを setup 関数 (2) 拡張機能を読み込む。

詳しくはこちらをご覧ください。 https://discordpy.readthedocs.io/en/stable/ext/commands/extensions.html https://discordpy.readthedocs.io/en/stable/ext/commands/cogs.html