@bot.event
async def on_ready():
print("Bot is ready")
while True:
status = server.status()
player_count = status.players.online
if player_count % 10 == 1 and player_count % 100 != 11:
end = "игрока"
elif player_count % 10 in [2, 3, 4] and player_count % 100 not in [12, 13, 14]:
end = "игроков"
else:
end = "игроков"
if player_count == 0:
activity = discord.Activity(type=discord.ActivityType.watching, name=f"на {player_count} {end}")
await bot.change_presence(status=discord.Status.idle)
elif player_count != 0:
activity = discord.Activity(type=discord.ActivityType.watching, name=f"на {player_count} {end}")
else:
activity = discord.Activity(type=discord.ActivityType.playing, name=f"ВЫКЛ")
await bot.change_presence(status=discord.Status.dnd)
await bot.change_presence(activity=activity)
await asyncio.sleep(5)
Python
Python discord.py + mcstatus
при нуле игроков бот остается в статусе онлайн, вот код -
if player_count == 0:
activity = discord.Activity(type=discord.ActivityType.watching, name=f"на {player_count} {end}")
await bot.change_presence(status=discord.Status.idle)
# ^ тут ты поставил статус
...
await bot.change_presence(activity=activity)
# ^ а тут ты его сразу убрал (по умолчанию activity это Status.online)
await asyncio.sleep(5)
Проблема, с которой вы сталкиваетесь, может быть связана с тем, что в коде вы используете нулевое значение для статуса бота. Операторы условий в вашем коде не учитывают этот случай. Чтобы правильно обработать нулевое значение игроков, вам нужно добавить отдельное условие.
Вот обновленный код, который обрабатывает нулевое количество игроков и ставит соответствующий статус:
Обратите внимание, что в коде также добавлен блок try-except для обработки ошибок, которые могут возникнуть при попытке получить статус сервера.
Вот обновленный код, который обрабатывает нулевое количество игроков и ставит соответствующий статус:
import discord
import asyncio
from mcstatus import MinecraftServer
server_address = "your_server_ip"
server_port = 25565
server = MinecraftServer.lookup(f"{server_address}:{server_port}")
bot = commands.Bot(command_prefix='!')
@bot.event
async def on_ready():
print("Bot is ready")
while True:
try:
status = server.status()
player_count = status.players.online
if player_count % 10 == 1 and player_count % 100 != 11:
end = "игрока"
elif player_count % 10 in [2, 3, 4] and player_count % 100 not in [12, 13, 14]:
end = "игроков"
else:
end = "игроков"
if player_count == 0:
activity = discord.Activity(type=discord.ActivityType.watching, name=f"на {player_count} {end}")
await bot.change_presence(status=discord.Status.idle, activity=activity)
else:
activity = discord.Activity(type=discord.ActivityType.watching, name=f"на {player_count} {end}")
await bot.change_presence(status=discord.Status.online, activity=activity)
except:
activity = discord.Activity(type=discord.ActivityType.playing, name="ВЫКЛ")
await bot.change_presence(status=discord.Status.dnd, activity=activity)
await asyncio.sleep(5)
bot.run("YOUR_BOT_TOKEN")
Обратите внимание, что в коде также добавлен блок try-except для обработки ошибок, которые могут возникнуть при попытке получить статус сервера.
Похожие вопросы
- Ошибка в коде python discord.py
- Подскажите код на python discord.py что бы бот дискорд транслировал видео из сыллки Ютуб и передавал в голосовой канал
- Discord.py ошибка в коде
- Как сделать анти спам функцию в discord.py
- Что делать? Discord.py
- Напишите код на Python для Discord.
- Как переписать бота с py на js?
- Окончил курсы на степике по Python что делать дальше?
- Python программирование. Помогите написать программу.
- Почему оно не видит файлы .py?