3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

discord.pyで定期的に変わるbotのステータスをいい感じに実装する

Last updated at Posted at 2024-03-25

はじめに

Discordのbotの定期的に変わるステータスをよく見かけるので実装する方法を紹介します。

この記事の対象者

  • ある程度Pythonの知識があり、discord.pyで定期的に変わるbotのステータスを実装したい。

前提知識

  • 基本的なPythonの記法と仕様を理解している
  • discord.pyの基本的な使い方を知っている

実装

実際のコード

main.py
import asyncio

import discord


# ステータス変更
async def change_status(statuses: dict, interval: int):
    while True:
        key = list(statuses.keys())[0]
        value = statuses.pop(key)
        statuses[key] = value

        if value == "playing":  # ~をプレイ中
            status = discord.Activity(type=discord.ActivityType.playing, name=key)
        elif value == "streaming":  # ~を配信中
            status = discord.Activity(type=discord.ActivityType.streaming, name=key)
        elif value == "listening":  # ~を再生中
            status = discord.Activity(type=discord.ActivityType.listening, name=key)
        elif value == "watching":  # ~を視聴中
            status = discord.Activity(type=discord.ActivityType.watching, name=key)
        elif value == "competing":  # ~に参戦中
            status = discord.Activity(type=discord.ActivityType.competing, name=key)
        else:  # その他
            status = discord.Activity(type=discord.ActivityType.custom, name=key)
    
        await bot.change_presence(activity=status)
    
        await asyncio.sleep(interval) # インターバル(秒)


# ステータス定義 ({key}を{value}中)
statuses = {
    "Minecraft": "playing",
    "YouTube": "watching",
    "Spotify": "listening"
}


@bot.event
async def on_ready():
    print(f'Logged in as {bot.user.name}')
    await change_status(statuses, 30)

解説

change_status()関数

この非同期関数は、与えられたステータスとインターバルに基づいて、botのステータスを変更するループを作成します。ステータスは辞書形式で与えられ、キーは表示したいアクティビティ、値はそのアクティビティのタイプです。各アクティビティにはそれぞれ適切なdiscord.ActivityTypeが割り当てられます。例えば、"playing"の場合はdiscord.ActivityType.playingが、"watching"の場合はdiscord.ActivityType.watchingが使用されます。よって、"Minecraft": "playing"とした場合、botのステータスは"Minecraftをプレイ中"と表示されます。キーと値は上から順に取り出され、循環するように処理されます。

on_ready()デコレータ

そしてon_ready()デコレータはbotが起動し準備が完了したときに実行されます。このイベントが発生すると、change_status関数を呼び出します。

終わりに

最後まで読んで頂きありがとうございます。不備があれば是非コメントで指摘して下さい。

3
2
2

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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?