Files
vcbot-napcat/model/McList.py
2025-07-05 17:26:12 +08:00

88 lines
3.5 KiB
Python

import requests
import json
import logging
import toml
class McList:
def __init__(self,server,page):
self.server = server
self.page = page
def main(self):
with open('./config.toml', 'r', encoding='utf-8') as f:
config = toml.load(f)
# 获取所需字段
velocity_ip = config.get("velocity_ip")
velocity_port = config.get("velocity_port")
velocity_token = config.get("velocity_token")
# API URL
url = f"http://{velocity_ip}:{velocity_port}/vc/query"
# 请求头
headers = {
"Content-Type": "application/json",
"Authorization": velocity_token # 替换为你的 API 密钥
}
# 请求体
payload = {
"server": self.server,
"page": self.page
}
# 发送 POST 请求
try:
response = requests.post(url, headers=headers, data=json.dumps(payload))
# 检查响应状态码
if response.status_code == 200:
logging.info("请求成功!返回结果:")
response_data = response.json()
logging.info(json.dumps(response_data, indent=4, ensure_ascii=False)) # 格式化输出 JSON
# 提取 player_number 值
player_number = response_data.get("player_number", "player_number 字段不存在")
totalpage = response_data.get("totalPage", "totalPage 字段不存在")
players = response_data.get("players", "players 字段不存在")
try:
page = int(self.page)
formatted_page = page + 1
except Exception as e:
logging.error(f"请求过程中出现异常: {e}")
return "服务繁忙,请稍后再逝"
try:
formatted_totalpage = int(totalpage)
if formatted_totalpage == 0:
formatted_totalpage = 1
elif formatted_totalpage == -1:
return f"服务器:{self.server} 不存在"
else:
formatted_totalpage = totalpage
success = True
except Exception as e:
logging.info(f"请求过程中出现异常: {e}")
return "服务器繁忙,请稍后再逝"
if players is None :
logging.info("玩家列表为空")
formatted_players = ""
else:
try:
formatted_players = "\n".join(f"{i+1}{player}" for i, player in enumerate(players))
except Exception as e:
logging.info(f"请求过程中出现异常: {e}")
return "服务器繁忙,请稍后再逝"
answer = f"当前服务器共有{player_number}个玩家,\n{formatted_players} \n [{formatted_page}页/{formatted_totalpage}页]"
return answer
else:
logging.info(f"请求失败!状态码: {response.status_code}")
logging.info(f"错误信息: {response.text}")
logging.info(response.json)
return "服务器繁忙,请稍后再逝"
except Exception as e:
logging.info(f"请求过程中出现异常: {e}")
return "服务器繁忙,请稍后再逝"