1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

DiSpotifyコード解説

Last updated at Posted at 2023-05-02

なんとなーくで理解する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を渡しています

後で全部書く!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?