Compare commits

..
4 Commits
Author SHA1 Message Date
Wbucket 1af84cb8ac fix : 穿透访问超时,加入超时时间 2026-10-11 12:03:10 +08:00
Wbucket db573b63bc feat : 接入服务器信息 上下文传指令参 嵌入文本md 2026-10-11 11:59:52 +08:00
Wbucket 5db68fd35f example.env 2026-10-10 12:43:59 +08:00
Wbucket 8ad83d2a7e fix : 链接和加群时机 2026-10-01 11:41:37 +08:00
4 changed files with 99 additions and 17 deletions
+3 -3
View File
@@ -70,18 +70,18 @@ class bobbySession(requests.Session):
for i in codes : for i in codes :
res.append(i.group()) res.append(i.group())
return res return res
def getInviteCode(self,step=0)->str: def getInviteCode(self,ctx:str,step=0)->str:
if step == 5: if step == 5:
raise SystemError("验证码查找失败") raise SystemError("验证码查找失败")
try : try :
codes = self.__getInvite() codes = self.__getInvite()
if codes.__len__() == 0: if codes.__len__() == 0:
self.__GenerateInvite() self.__GenerateInvite()
return self.getInviteCode(step+1) return self.getInviteCode(ctx,step+1)
rand =random.randrange(0,codes.__len__()) rand =random.randrange(0,codes.__len__())
return codes[rand] return codes[rand]
except: except:
self.Refresh() self.Refresh()
return self.getInviteCode(step+1) return self.getInviteCode(ctx,step+1)
+26 -14
View File
@@ -6,9 +6,10 @@ from botpy.message import (Message,GroupMessage)
from botpy.flags import (Flag,fill_with_flags) from botpy.flags import (Flag,fill_with_flags)
from botpy import( logger,Intents,Client) from botpy import( logger,Intents,Client)
from botpy.gateway import (BotWebSocket) from botpy.gateway import (BotWebSocket)
from botpy.types.gateway import MessagePayload from botpy.types.gateway import (MessagePayload)
import queue import queue
from botpy.types.session import Session from botpy.types.session import Session
from botpy.types.message import MarkdownPayload
from dotenv import load_dotenv from dotenv import load_dotenv
import os import os
import types import types
@@ -16,6 +17,7 @@ from bobby import bobbySession
from mcwatcher import watcher from mcwatcher import watcher
from threading import Thread from threading import Thread
import asyncio import asyncio
from serverGET import ServerGet
#环境配置 #环境配置
class Intents_ex(Intents): class Intents_ex(Intents):
@@ -105,35 +107,34 @@ class djtuWebsocket (Client) :
logger.warning("data解析失败") logger.warning("data解析失败")
return return
logger.info("入群信息:"+' 群: '+openid+" openid: "+memberid) logger.info("入群信息:"+' 群: '+openid+" openid: "+memberid)
await self.api.post_group_message(openid,event_id=eid,content='欢迎加入大海啸!\n入服教程请看链接:\nhttps://starptr.top') await self.api.post_group_message(openid,event_id=eid,content='欢迎加入大海啸!\n入服教程请看链接:\nhttps://hiso.wgfire.top/archives/ifnew')
# 触发概率不大所以可以直接提取关键字 # 触发概率不大所以可以直接提取关键字
async def parseCommand(self,msg :Message): async def parseCommand(self,msg :GroupMessage):
# 加入群聊
if msg.group_openid:
self.group_add(msg.group_openid)
commands:dict[str,types.MethodType|types.FunctionType] = { commands:dict[str,types.MethodType|types.FunctionType] = {
r'/邀请码' : bobby.getInviteCode, r'/邀请码' : bobby.getInviteCode,
r'吃什么' : lambda :"是啊吃什么" r'吃什么' : lambda ctx:"是啊吃什么" ,
r'/服务器' : ServerGet.GetNames,
} }
required = msg.content required = msg.content
reply = "" reply = ""
for cmd,func in commands.items(): for cmd,func in commands.items():
if required.find(cmd) != -1: if required.find(cmd) != -1:
try: try:
reply = func() ctx = required.split(cmd)[1]
reply = func(ctx)
except: except:
reply = "服务异常" reply = "服务异常"
break break
if reply.__len__() == 0: if reply.__len__() == 0:
reply = "你在发什么东西我怎么看不懂?" reply = "你在发什么东西我怎么看不懂?"
await msg.reply(content=reply) md = MarkdownPayload(content=reply)
await msg.reply(msg_type=2, markdown=md)
# 触发概率大,以后要做好解析防止刷屏 def group_add(self,gid :str):
async def parseGlobalMessage(self,payload):
try :
msg = payload['d']
gid = msg['group_id']
content = msg['content']
except:
return
# 加入群聊 # 加入群聊
new_group = True new_group = True
if not groups is None : if not groups is None :
@@ -143,6 +144,17 @@ class djtuWebsocket (Client) :
if new_group : if new_group :
groups.groups.append(gid) groups.groups.append(gid)
groups.save() groups.save()
# 触发概率大,以后要做好解析防止刷屏
async def parseGlobalMessage(self,payload):
try :
msg = payload['d']
gid = msg['group_id']
content = msg['content']
except:
return
# 群聊加入
self.group_add(gid)
# 解析指令 # 解析指令
commands:dict[str,types.MethodType|types.FunctionType] = { commands:dict[str,types.MethodType|types.FunctionType] = {
r'吃什么' : lambda :"是啊吃什么" r'吃什么' : lambda :"是啊吃什么"
+4
View File
@@ -0,0 +1,4 @@
SECRET=""
APP_ID=""
BOBBY_PASSWORD=""
BOBBY_ACCOUNT=""
+66
View File
@@ -0,0 +1,66 @@
import requests
from typing import List
class ServerGet :
url = r'https://mcserve-panel.hiso.de5.net/api/overview'
@staticmethod
def __getNames():
try:
res = requests.get(ServerGet.url,timeout=5)
data = res.json()
servers:list = data['servers']
return servers
except Exception as e :
return None
@staticmethod
def __getIndex(ind:int):
if ind <1 :
return None
try:
res = requests.get(ServerGet.url,timeout=5)
data = res.json()
servers:list = data['servers']
if ind>servers.__len__():
return None
server = servers[ind-1]
return server
except Exception as e :
return None
@staticmethod
def GetNames(ctx:str):
faultmsg = "(っ °Д °;)っ出错了呜....."
servers = ServerGet.__getNames()
if servers is None :
return faultmsg
if servers.__len__() == 0:
return "(っ °Д °;)っ好像...没有服务器呢"
# 试探是否有ctx对应的信息
try :
for s in servers:
if ctx.find(s['name']) != -1:
name = s['name']
s_id = s['id']
status = s['status']
online = s['online']
url = s['url']
addr = s['address']
msg = "{0} 信息如下:\n \nid: {1}\n状态: {2}\n在线人数: {3}\n信息页面: {4}\n地址: {5}".format(name,s_id,status,online,url,addr)
return msg
except:
'交给轮询试试'
# 服务器轮训
msg = 'mc服务器如下:\n \n'
try :
for i in servers:
msg += '' + """- <qqbot-cmd-input text="/服务器 {0}" show="{0}" reference="false" />""".format(str(i['name'])) +' ' + "状态:"+str(i['status'])
msg +='\n'
msg += ' \n点击蓝字获取详情~'
return msg
except:
return faultmsg