一時的にロールを付与する discord boty

モジュールのインポート:

import datetime
from discord.ext import commands, tasks
import discord
import json

必要なモジュールをインポートしています。はdatetime日付と時刻の操作、commandsとtasksはDiscordボット用のコマンドとタスクのエクステンション、はDiscord APIへのアクセス、はdiscordJSONjsonデータの操作に使用されます。

タイムゾーンと基準時の設定:

jst = datetime.timezone(datetime.timedelta(hours=9), 'JST')
time = datetime.time(hour=0, minute=0, second=0, tzinfo=jst)

jstは日本標準時のタイムゾーンを定義し、timeは毎日日本時間の0時間を表します。

ボットの初期化:

bot = commands.Bot(command_prefix="!", intents=discord.Intents.all())

commands.Botを使用して、ボットを作成します。command_prefixはコマンドのプレフィックスを指定し、intentsはボットがどの種類のイベントにアクセスできるか制御します。

データの読み込み:

try:
data = json.loads(open("data.json","r",encoding="utf_8").read())
except:
data = []

"data.json"ファイルからデータを読み込み、dataというリストに格納します。ファイルが存在しない場合は空のリストを使用します。

タスクの定義と実行:

@tasks.loop(time=time)
async def day_change():
await remove_role()

day_changeというタスクを定義し、毎日0時にremove_role()関数を実行します。これにより、期間が経過した際のロール剥奪が行われます。

ロール剥奪の実行:

async def remove_role():
# 現在の日付を取得し、該当するデータを探索してロールを剥奪する処理
# データ操作後、`save_data()`関数でデータを保存

remove_role()関数は、最新の日付を取得し、その日付に該当するデータを調べてロールの剥奪を行います。その後、関数でデータを保存しますsave_data()

データの保存:

def save_data():
open("data.json","w",encoding="utf_8").write(json.dumps(data))

save_data()関数は、dataリストをJSON形式でファイルに保存します。

ボットの準備完了イベント:

@bot.event
async def on_ready():
await remove_role()
day_change.start()
await tree.sync()

ボットが準備完了した際に実行されるイベントハンドラです。関数で一度ロール剥ぎを行い、タスクを開始し、ツリー構造を同期しremove_role()ますday_change

カスタムコマンドの定義:

@tree.command(name="role", description="一定期間ロールを付与します")
async def role(interaction, member:discord.Member, role:discord.Role, amount:int):
# ロール付与およびデータの更新処理

/roleコマンドに対するカスタムコマンドを定義します。指定された期間だけメンバーにロールを付与し、データを更新します。

ボットの実行:

bot.run("token")

ここでは自分"token"のボットを設定して実行してください。ボットはDiscord Developer Portalから取得できます。


すべてのコード

ここから先は

1,720字

¥ 300

この記事が気に入ったらサポートをしてみませんか?