1
0

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で好きなステータスメッセージを設定する

Posted at

DiscordBotには基本的に好きなステータスメッセージを設定できます。

image.png

画像のように、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であれば実際に変更。その通知を返します。

お読みいただきありがとうございました。

参考

1
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?