なんとなーくで理解するDiSpotify解説記事 TEST版!
Code
main.py
"""Config and Funcs"""
import config as cfg
import funcs as fcs
"""Libraries for Discord"""
import discord
from discord.ext import commands
"""Using Other Libraries"""
import sys
import datetime
bot = commands.Bot(
command_prefix = "s.",
intents = discord.Intents.all()
)
"""
@bot.event
async def on_command_error(inter, error):
e = discord.Embed(title="Error", description=error, color=discord.Color.red())
await inter.respond(embeds=[e], ephemeral=True)
"""
@bot.event
async def on_application_command_error(ctx: discord.ApplicationContext, error: discord.DiscordException):
e = discord.Embed(description=error, color=discord.Color.red())
await ctx.respond(embeds=[e], ephemeral=True)
def main(to:bool=True):
for i in cfg.cog_files:
try:
bot.load_extension(i)
except Exception as err:
print(err)
if to:
bot.run(cfg.TOKEN)
else:
bot.run(cfg.SUB)
if __name__ == "__main__":
t = True if not "sub" in sys.argv else False
main(False)
それでは適度に解説していきます。
まずこちら
"""Config and Funcs"""
import config as cfg
import funcs as fcs
"""Libraries for Discord"""
import discord
from discord.ext import commands
"""Using Other Libraries"""
import sys
import datetime
ここで他のライブラリや自作した関数や設定、他ライブラリをエイリアスを付けてインポートしてます。
bot = discord.Bot(
command_prefix = "s.",
intents = discord.Intents.all()
)
次にDiscord Botの宣言です
Prefixを`.s`にしてインテンツをすべて選択しています。
※インテンツについては省略させていただきます
@bot.event
async def on_command_error(inter, error):
e = discord.Embed(title="Error", description=error, color=discord.Color.red())
await inter.respond(embeds=[e], ephemeral=True)
@bot.event
async def on_application_command_error(ctx, error: discord.DiscordException):
e = discord.Embed(title="Error", description=error, color=discord.Color.red())
await ctx.respond(embeds=[e], ephemeral=True)
これはコマンドのエラーハンドリングです。 簡単に説明すると、エラーが発生したときに対処するコードですかね。
デコレータ(@bot.event)でイベントを宣言して埋め込みメッセージ(以降Embed)を宣言しています。def main(sub:bool=True):
for i in cfg.cog_files:
try:
bot.load_extension(i)
except Exception as err:
print(err)
token = cfg.TOKEN if sub else cfg.SUB
bot.run(token)
大本命のメイン関数です。一行ずつ解説していきますね。
def main(sub:bool=True):
関数の宣言と、デフォルト引数です。なぜTrueにしてるのかというと順を追って説明します。
for i in cfg.cog_files:
try:
bot.load_extension(i)
except Exception as err:
print(err)
ここだけ数行解説します。(出ないとわかりにくいので)
設定ファイルにあるCog(コマンドやイベントをまとめたPythonスクリプト)をFor構文でbot.load_extensionに渡してます
try-except構文と遺書にBotにCogを追加しています。これもエラーハンドリングを施してありますね
if __name__ == "__main__":
main(True if not "sub" in sys.argv else False)
メインスクリプトの最後の2行です。
メイン関数に渡す引数について解説します
True if not "sub" in sys.argv else False
実行時に渡されるコマンドライン引数を三項演算で判断してます。sub
があった場合Falseを渡して、なかった場合Trueを渡しています