DiSpotifyコード解説

<h1>なんとなーくで理解するDiSpotify解説記事 TEST版！</h1>

https://github.com/wuliao97/Dispotify

<h2>Code</h2>

<h3>main.py</h3>

```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)

```
<p>それでは適度に解説していきます。</p>
<p>まずこちら</p>

```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
```
<p>ここで他のライブラリや自作した関数や設定、他ライブラリをエイリアスを付けてインポートしてます。</p>
<br>

```py
bot = discord.Bot(
    command_prefix = "s.",
    intents        = discord.Intents.all()
)
```

<p>次にDiscord Botの宣言です</p>
<p>Prefixを`.s`にしてインテンツをすべて選択しています。</p>
<p>※インテンツについては省略させていただきます</p>
<br>

```py
@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)
```

<p>これはコマンドのエラーハンドリングです。　簡単に説明すると、エラーが発生したときに対処するコードですかね。</p>
<p></p>デコレータ(@bot.event)でイベントを宣言して埋め込みメッセージ（以降Embed）を宣言しています。</p>
<br>

```py
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)
```

<p>大本命のメイン関数です。一行ずつ解説していきますね。</p>

```py
def main(sub:bool=True):
```
<p>関数の宣言と、デフォルト引数です。なぜTrueにしてるのかというと順を追って説明します。</p>
<br>

```py
for i in cfg.cog_files:
    try:
        bot.load_extension(i)

    except Exception as err:
        print(err)
```
<p>ここだけ数行解説します。（出ないとわかりにくいので）</p>
<p>設定ファイルにあるCog（コマンドやイベントをまとめたPythonスクリプト）をFor構文でbot.load_extensionに渡してます</p>
<p>try-except構文と遺書にBotにCogを追加しています。これもエラーハンドリングを施してありますね</p>
<br>

```py
if __name__ == "__main__":
    main(True if not "sub" in sys.argv else False)
```

<p>メインスクリプトの最後の２行です。</p>
<p>メイン関数に渡す引数について解説します</p>

```py
True if not "sub" in sys.argv else False
```
実行時に渡されるコマンドライン引数を三項演算で判断してます。`sub`があった場合Falseを渡して、なかった場合Trueを渡しています</p>


<h1>後で全部書く！</h1>