質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1831閲覧

discord.pyを使用して、DiscordBOTのステータスを定期的に変更したい

Awayume

総合スコア60

Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/10/17 14:04

編集2021/10/17 14:12

前提・実現したいこと
discord.pyの、discord.ext.tasksを使用して
定期的にBOTのステータスを変えたいです。

発生している問題・エラーメッセージ
正常にBOTは起動してもステータスには何も表示されない。
エラーなし。

該当のソースコード

python

1import os 2import discord 3from discord.ext import commands, tasks 4 5client = discord.Client() 6token = os.environ['DISCORD_BOT_TOKEN'] 7bot = commands.Bot(command_prefix='!', intents=discord.Intents.all(), help_command=None, case_insensitive=True) 8 9@bot.event 10async def on_ready(): 11 print(f"Logged in as {bot.user}") 12 13@tasks.loop(seconds = 10) 14async def change(): 15 16 if not 'status_state' in locals(): 17 status_state = 0 18 19 else: 20 21 if (status_state == 0): 22 version_data = open('version.data', 'r') 23 version = version_data.read() 24 await bot.change_presence(activity = discord.Game(f"!help | {version}")) 25 version_data.close() 26 status_state = 1 27 28 elif (status_state == 1): 29 guild_count = len(bot.guilds) 30 user_count = len(bot.users) 31 await bot.change_presence(activity = discord.Game(f"{guild_count}Servers | {user_count}Users")) 32 status_state = 0 33 34change.start() 35 36bot.run(token)

補足情報
discord.py 2.0.0a
Python 3.9.5

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

ループするたびに、status_stateがクリアされてしまうのが原因でした。
なので変数での分岐は諦め、時間での分岐をすることで解決できました。
(status.py)

python

1import discord 2from datetime import datetime 3from discord.ext import commands, tasks 4 5class Activity_status(commands.Cog): 6 7 def __init__(self, bot): 8 self.bot = bot 9 self.change.start(self.bot) 10 11 @tasks.loop(seconds = 10) 12 async def change(self, bot): 13 14 now = datetime.now() 15 now = str(now.second) 16 17 if (len(now) == 1 or now[0] == "2" or now[0] == "4"): 18 await self.bot.change_presence(activity = discord.Game("!help | Ver2.0.0")) 19 20 else: 21 guild_count = len(self.bot.guilds) 22 user_count = len(self.bot.users) 23 await self.bot.change_presence(activity = discord.Game(f"{guild_count}servers | {user_count}users")) 24 25def setup(bot): 26 return bot.add_cog(Activity_status(bot))

(main.py)

python

1//2@bot.event 3async def on_ready(): 4 bot.load_extension('status') 5//

投稿2021/10/20 09:38

編集2021/10/20 09:41
Awayume

総合スコア60

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問