我试图制作一个discord的机器人来让Minecraft服务器在线,但启动机器人后,值没有改变.

import discord
from discord.ext import commands
from discord import Interaction

import minestat
import time


def player_count():
    i = 0

    while (i < 1):
        ms = minestat.MineStat('serverip', serverport)
        print('Minecraft server status of %s on port %d:' % (ms.address, ms.port))
        if ms.online:
            server_status = ('Sunucu Aktif! version %s  %s out of %s players.' % (ms.version, ms.current_players, ms.max_players))
            return server_status  # Return the server status instead of assigning to global variable

client = commands.Bot(command_prefix=".", intents=discord.Intents.all())


@client.event
async def on_ready():
    server_status = player_count()  # Call the player_count function to get the status
    await client.change_presence(activity=discord.activity.Game(name=server_status), status=discord.Status.idle)
    print(f"{client.user.name} is logged in")

client.run("bot_token")

try 过,但我也有同样的问题:

import discord
from discord.ext import commands
from discord import Interaction
import minestat
import time


def player_count():
    ms = minestat.MineStat('serverip', serverport)
    server_status = ('Sunucu Aktif! version %s  %s out of %s players.' % (ms.version, ms.current_players, ms.max_players))
    return server_status  # Return the server status instead of assigning to global variable

client = commands.Bot(command_prefix=".", intents=discord.Intents.all())


@client.event
async def on_ready():
    server_status = player_count()  # Call the player_count function to get the status
    await client.change_presence(activity=discord.activity.Game(name=server_status), status=discord.Status.idle)
    print(f"{client.user.name} is logged in")
    while True:
        time.sleep(60)
        server_status = player_count()
        await client.change_presence(activity=discord.activity.Game(name=server_status), status=discord.Status.idle)


client.run("bot_token")

错误:

[2024-05-05 00:34:51][INFO]不一致.客户端:使用静态令牌登录 [2024-05-05 00:34:52][INFO]不一致.网关:碎片ID无已连接到网关(会话ID:c29fff29e2317467a3bfbca68c76aa83). RS的Main已登录 [2024-05-05 00:35:43][警告]不一致.网关:碎片ID无心跳阻塞超过10秒. 循环线程回溯(最近一次调用): 文件"C:\Users\playe\PycharmProjects\pythonProject1\main.py",第27行,在 Client.run("MTIzNjQxMTI2ODk4NjgzMDg3OQ.Gvzhao.__aMFjviZKlS8AG09KDBI2bkslSeXMYH2FMA7s") 运行中的文件"C:\Users\playe\PycharmProjects\pythonProject1.venv\Lib\site-packages\discord\client.py",行860 Asyncio.run(runner()) 文件"C:\Users\playe\AppData\Local\Programs\Python\Python312\Lib\asyncio\runners.py",第194行,正在运行 Return Runner.Run(Main) 文件"C:\Users\playe\AppData\Local\Programs\Python\Python312\Lib\asyncio\runners.py",第118行,正在运行 返回self._loop.run_Until_Complete(任务) 在RUN_"C:\Users\playe\AppData\Local\Programs\Python\Python312\Lib\asyncio\base_events.py",_COMPLETE中,文件运行第674行 Self.run_ever() RUN_"C:\Users\playe\AppData\Local\Programs\Python\Python312\Lib\asyncio\windows_events.py",中的文件RUN第322行 Super().run_ever() 文件"C:\Users\playe\AppData\Local\Programs\Python\Python312\Lib\asyncio\base_events.py",第641行,位于RUN_HEWEVER中 Sel._run_once() 文件"C:\Users\playe\AppData\Local\Programs\Python\Python312\Lib\asyncio\base_events.py",行1987,In_Run_Once 句柄._run() 文件运行行88,in_"C:\Users\playe\AppData\Local\Programs\Python\Python312\Lib\asyncio\events.py", Self._context.run(sel._allback,*sel._args) 文件运行事件第441行,In_"C:\Users\playe\PycharmProjects\pythonProject1.venv\Lib\site-packages\discord\client.py",_Event 等待coro(*args,**kwargs) 文件就绪,ON_"C:\Users\playe\PycharmProjects\pythonProject1\main.py",中的第22行 睡眠时间(60)

我改变


i = 0
def player_count(): 
   while i < 1:
       ms = minestat.MineStat('cakalistan.aternos.me', 29049)
       if ms.online:
          print('Server is online running version %s with %s out of %s players.' % (ms.version,         ms.current_players, ms.max_players))
       server_status = ('Sunucu Aktif! version %s  %s out of %s players.' % (ms.version, ms.current_players, ms.max_players))
    return server_status  # Return the server status instead of assigning to global variable

并添加


    while True:
        time.sleep(60)
        server_status = player_count()
        await client.change_presence(activity=discord.activity.Game(name=server_status), status=discord.Status.idle)

推荐答案

time.sleep(60)正在阻止discord机器人的主循环.

更改为:

await asyncio.sleep(60)

不要忘记:

import asyncio

Python相关问答推荐

Conda更新在两个版本的fMT之间翻转

从原始DF和计算的总和创建新的框架

替换为Pandas

Django关于UniqueBindition的更新

Pandas数据帧处理Pandas表中Json内的嵌套列表以获取后续Numpy数组

try 使用tensorFlow.keras.models时optree Import错误

Python中两个矩阵的自定义Hadamard风格产物

Altair -箱形图边界设置为黑色,中线设置为红色

Polars -转换为PL后无法计算熵.列表

使用Beautiful Soup获取第二个srcset属性

使用Python Cerberus初始化一个循环数据 struct (例如树)(v1.3.5)

在Pandas框架中截短至固定数量的列

将HTML输出转换为表格中的问题

根据条件将新值添加到下面的行或下面新创建的行中

如何获取TFIDF Transformer中的值?

用NumPy优化a[i] = a[i-1]*b[i] + c[i]的迭代计算

如何将一个动态分配的C数组转换为Numpy数组,并在C扩展模块中返回给Python

如何使Matplotlib标题以图形为中心,而图例框则以图形为中心

在嵌套span下的span中擦除信息

如何使用Numpy. stracards重新编写滚动和?