DiscordBotには基本的に好きなステータスメッセージを設定できます。
画像のように、Bot名の下に表示されるのがステータスメッセージです。
これをチャットからコマンドで変更できるようにしてみます。
実装
まずはBot起動時にメッセージを設定してみましょう。
import discord
from discord.ext import commands
# 諸々セットアップ
intents = discord.Intents.default()
intents.message_content = True
bot = commands.Bot(command_prefix='/', intents=intents)
# 起動時にメッセージを設定
@bot.event
async def on_ready():
await channel.send("起動しました") # 起動通知
await bot.change_presence(activity=discord.Game(name="ステータスメッセージだよ"))
change_presence
で自由にステータスメッセージを設定できます。
設定可能なアクティビティは以下の通り。詳しくは参考ページをご覧ください。
- Activity
- Game (〜をプレイ中)
- Streaming (〜を再生中)
- CustomActivity
Activityを最適化したものがGame/Streamingです。最適なものを選択しましょう。
(ドキュメントを読んだ限りは割と拡張性がありそうなので活用したい)
# 例:testをプレイ中
await bot.change_presence(activity=discord.Activity(name="test", type=discord.ActivityType.playing))
コマンドで変更する
メッセージを変更するたびに再起動するのは面倒なので、管理者用コマンドで即時変更できるようにしていきます。
@bot.command(name="sm", description="ステータスメッセージを変更します")
async def sm(ctx, sm: str):
if ctx.user.guild_permissions.administrator:
await bot.change_presence(activity=discord.Activity(name=sm, type=discord.ActivityType.playing))
await ctx.response.send_message(f"ステータスメッセージを「{sm}」に変更しました")
else:
await ctx.response.send_message("このコマンドは管理者専用です。")
ctx.user.guild_permissions.administrator
でコマンド実行者が管理者権限を持っているか判定し、trueであれば実際に変更。その通知を返します。
お読みいただきありがとうございました。
参考