fix : 移除dev

This commit is contained in:
Wbucket
2026-09-30 16:23:55 +08:00
parent cac4856f2f
commit 5db01d429d
+185 -187
View File
@@ -1,187 +1,185 @@
from typing import Any, List from typing import Any, List
from botpy.connection import ConnectionSession from botpy.connection import ConnectionSession
from botpy.message import (Message) from botpy.message import (Message)
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)
import queue import queue
from botpy.types.session import Session from botpy.types.session import Session
from dotenv import load_dotenv from dotenv import load_dotenv
import os import os
import types import types
from bobby import bobbySession from bobby import bobbySession
from mcwatcher import watcher from mcwatcher import watcher
from threading import Thread from threading import Thread
import asyncio import asyncio
#环境配置 #环境配置
class Intents_ex(Intents): class Intents_ex(Intents):
def __init__(self, **kwargs: bool) -> None: def __init__(self, **kwargs: bool) -> None:
arg_tmp = dict[str,bool]() arg_tmp = dict[str,bool]()
arg_ex = dict[str,bool]() arg_ex = dict[str,bool]()
for key, value in kwargs.items(): for key, value in kwargs.items():
if key in ['member_event']: if key in ['member_event']:
arg_ex[key] = value arg_ex[key] = value
else: else:
arg_tmp[key] = value arg_tmp[key] = value
super().__init__(**arg_tmp) super().__init__(**arg_tmp)
for key , value in arg_ex.items() : for key , value in arg_ex.items() :
setattr(self, key, value) setattr(self, key, value)
@Flag @Flag
def member_event(self): def member_event(self):
return 1 << 24 return 1 << 24
class BotWebsocket_ex(BotWebSocket): class BotWebsocket_ex(BotWebSocket):
def __init__(self, session: Session, _connection: ConnectionSession): def __init__(self, session: Session, _connection: ConnectionSession):
super().__init__(session, _connection) super().__init__(session, _connection)
self._parser['group_member_add'] = lambda aaw:self._connection.dispatch("group_member_add",aaw) self._parser['group_member_add'] = lambda aaw:self._connection.dispatch("group_member_add",aaw)
class djtuWebsocket (Client) : class djtuWebsocket (Client) :
def __init__( def __init__(
self, intents: Intents, self, intents: Intents,
timeout: int = 5, timeout: int = 5,
is_sandbox=False, is_sandbox=False,
log_config: str | dict | None = None, log_config: str | dict | None = None,
log_format: str| None = None, log_format: str| None = None,
log_level: int |None= None, log_level: int |None= None,
bot_log: bool | None = True, bot_log: bool | None = True,
ext_handlers: dict | List[dict] | bool = True): ext_handlers: dict | List[dict] | bool = True):
self.q = queue.Queue() self.q = queue.Queue()
super().__init__(intents, timeout, is_sandbox, log_config, log_format, log_level, bot_log, ext_handlers) super().__init__(intents, timeout, is_sandbox, log_config, log_format, log_level, bot_log, ext_handlers)
async def bot_connect(self, session): async def bot_connect(self, session):
""" """
newConnect 启动一个新的连接,如果连接在监听过程中报错了,或者被远端关闭了链接,需要识别关闭的原因,能否继续 resume newConnect 启动一个新的连接,如果连接在监听过程中报错了,或者被远端关闭了链接,需要识别关闭的原因,能否继续 resume
如果能够 resume,则往 sessionChan 中放入带有 sessionID 的 session 如果能够 resume,则往 sessionChan 中放入带有 sessionID 的 session
如果不能,则清理掉 sessionID,将 session 放入 sessionChan 中 如果不能,则清理掉 sessionID,将 session 放入 sessionChan 中
session 的启动,交给 start 中的 for 循环执行,session 不自己递归进行重连,避免递归深度过深 session 的启动,交给 start 中的 for 循环执行,session 不自己递归进行重连,避免递归深度过深
param session: session对象 param session: session对象
""" """
logger.info("[botpy] 会话启动中...") logger.info("[botpy] 会话启动中...")
client = BotWebsocket_ex(session, self._connection) client = BotWebsocket_ex(session, self._connection)
try: try:
await client.ws_connect() await client.ws_connect()
except (Exception, KeyboardInterrupt, SystemExit) as e: except (Exception, KeyboardInterrupt, SystemExit) as e:
await client.on_error(e) await client.on_error(e)
async def on_group_at_message_create(self, message: Message): async def on_group_at_message_create(self, message: Message):
await self.parseCommand(message) await self.parseCommand(message)
async def on_group_message_create(self,message:Message): async def on_group_message_create(self,message:Message):
# 目前不启用 # 目前不启用
# return self.parseGlobalMessage(message) # return self.parseGlobalMessage(message)
return return
async def on_group_member_add(self,payload): async def on_group_member_add(self,payload):
# await message.reply(content="awdwa") # await message.reply(content="awdwa")
openid = 'null' openid = 'null'
memberid = 'null' memberid = 'null'
eid ='null' eid ='null'
try : try :
eid = payload['id'] eid = payload['id']
data = payload['d'] data = payload['d']
openid = data['group_openid'] openid = data['group_openid']
memberid = data['member_openid'] memberid = data['member_openid']
except: except:
logger.warning("data解析失败") logger.warning("data解析失败")
return return
logger.info("入群信息:"+' 群: '+openid+" openid: "+memberid) logger.info("入群信息:"+' 群: '+openid+" openid: "+memberid)
print("palayload"+str(payload)) print("palayload"+str(payload))
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://starptr.top')
# 触发概率不大所以可以直接提取关键字 # 触发概率不大所以可以直接提取关键字
async def parseCommand(self,msg :Message): async def parseCommand(self,msg :Message):
commands:dict[str,types.MethodType|types.FunctionType] = { commands:dict[str,types.MethodType|types.FunctionType] = {
r'/邀请码' : bobby.getInviteCode, r'/邀请码' : bobby.getInviteCode,
r'吃什么' : lambda :"是啊吃什么" r'吃什么' : lambda :"是啊吃什么"
} }
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() reply = func()
except: except:
reply = "服务异常" reply = "服务异常"
break break
if reply.__len__() == 0: if reply.__len__() == 0:
reply = "你在发什么东西我怎么看不懂?" reply = "你在发什么东西我怎么看不懂?"
await msg.reply(content=reply) await msg.reply(content=reply)
# 触发概率大,以后要做好解析防止刷屏 # 触发概率大,以后要做好解析防止刷屏
async def parseGlobalMessage(self,msg:Message): async def parseGlobalMessage(self,msg:Message):
await msg.reply(content="awda") await msg.reply(content="awda")
# 监听队列,接受其他线程的消息 # 监听队列,接受其他线程的消息
async def mcloop(self): async def mcloop(self):
while True: while True:
if self.q.empty(): if self.q.empty():
# time.sleep会阻塞整个线程我去 # time.sleep会阻塞整个线程我去
await asyncio.sleep(20) await asyncio.sleep(20)
else: else:
try : try :
msg = self.q.get() msg = self.q.get()
if group_open_id is None: if group_open_id is None:
logger.error("群聊不存在") logger.error("群聊不存在")
continue continue
asyncio.create_task(self.api.post_group_message(group_open_id,content=msg)) asyncio.create_task(self.api.post_group_message(group_open_id,content=msg))
except Exception as e: except Exception as e:
logger.error("MCWatcher发送群聊任务失败:\n"+str(e)) logger.error("MCWatcher发送群聊任务失败:\n"+str(e))
# source # source
load_dotenv(".env") load_dotenv(".env")
bbyAccount = os.getenv("BOBBY_ACCOUNT") bbyAccount = os.getenv("BOBBY_ACCOUNT")
bbyPasswd = os.getenv("BOBBY_PASSWORD") bbyPasswd = os.getenv("BOBBY_PASSWORD")
appid = os.getenv("APP_ID") appid = os.getenv("APP_ID")
secret_bot = os.getenv("SECRET") secret_bot = os.getenv("SECRET")
group_open_id = os.getenv("GROUP_OPEN_ID") group_open_id = os.getenv("GROUP_OPEN_ID")
dev = os.getenv("DEV") dev = os.getenv("DEV")
if appid is None or secret_bot is None : if appid is None or secret_bot is None :
raise SystemExit("未找到bot配置!") raise SystemExit("未找到bot配置!")
logger.info("登录账号:"+appid) logger.info("登录账号:"+appid)
# bobby Session # bobby Session
if not dev is None: if bbyAccount is None or bbyPasswd is None :
if bbyAccount is None or bbyPasswd is None : raise SystemError("未找到账密配置")
raise SystemError("未找到账密配置") if appid is None or secret_bot is None :
if appid is None or secret_bot is None : raise SystemError("未找到bot配置")
raise SystemError("未找到bot配置") bobby = bobbySession(bbyAccount,bbyPasswd)
bobby = bobbySession(bbyAccount,bbyPasswd)
async def main(ws:djtuWebsocket, *args: Any, **kwargs: Any) -> None:
async def main(ws:djtuWebsocket, *args: Any, **kwargs: Any) -> None: async with ws as ws:
async with ws as ws: logger.info("启动并发异步ing...")
logger.info("启动并发异步ing...") mcloop = ws.mcloop()
mcloop = ws.mcloop() # 你*的为什么retcoro true的话会报错啊
# 你*的为什么retcoro true的话会报错啊 # 协程对象不会不是这个异步回话而是httpx吧?
# 协程对象不会不是这个异步回话而是httpx吧? bot = ws.start(*args, **kwargs,ret_coro=False)
bot = ws.start(*args, **kwargs,ret_coro=False) if bot is None:
if bot is None: logger.error("bot不给协程啊")
logger.error("bot不给协程啊") return
return try:
try: await asyncio.gather(bot,mcloop)
await asyncio.gather(bot,mcloop) except Exception as e :
except Exception as e : logger.error(e)
logger.error(e)
# bot初始化
# bot初始化 ws = djtuWebsocket(Intents_ex(public_messages=True,member_event=True))
ws = djtuWebsocket(Intents_ex(public_messages=True,member_event=True))
# 启动mcwatcher线程
# 启动mcwatcher线程 def pushQuene(cont:str):
def pushQuene(cont:str): ws.q.put(cont)
ws.q.put(cont) Thread(target=watcher.MCWatcher,name="watcher",kwargs={
if not dev is None : "hookfunction":pushQuene,
Thread(target=watcher.MCWatcher,name="watcher",kwargs={ "logging":logger
"hookfunction":pushQuene, }).start()
"logging":logger
}).start() # bot线程运行
asyncio.run(main(ws,appid=appid,secret=secret_bot))
# bot线程运行
asyncio.run(main(ws,appid=appid,secret=secret_bot))