mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-08-20 17:30:59 +00:00
feat: 热重载前后更新bot事件订阅
This commit is contained in:
@@ -77,7 +77,7 @@ def main(first_time_init=False):
|
|||||||
timeout=config.process_message_timeout, retry=config.retry_times,
|
timeout=config.process_message_timeout, retry=config.retry_times,
|
||||||
first_time_init=first_time_init)
|
first_time_init=first_time_init)
|
||||||
|
|
||||||
if first_time_init: # 不是热重载之后的启动,则不启动新的bot线程
|
if first_time_init: # 不是热重载之后的启动,则不启动新的bot线程
|
||||||
qq_bot_thread = threading.Thread(target=qqbot.bot.run, args=(), daemon=True)
|
qq_bot_thread = threading.Thread(target=qqbot.bot.run, args=(), daemon=True)
|
||||||
qq_bot_thread.start()
|
qq_bot_thread.start()
|
||||||
|
|
||||||
|
|||||||
+28
-13
@@ -3,10 +3,13 @@ import json
|
|||||||
import os
|
import os
|
||||||
import threading
|
import threading
|
||||||
|
|
||||||
|
import mirai.models.bus
|
||||||
import openai.error
|
import openai.error
|
||||||
from mirai import At, GroupMessage, MessageEvent, Mirai, Plain, StrangerMessage, WebSocketAdapter, HTTPAdapter, \
|
from mirai import At, GroupMessage, MessageEvent, Mirai, Plain, StrangerMessage, WebSocketAdapter, HTTPAdapter, \
|
||||||
FriendMessage, Image
|
FriendMessage, Image
|
||||||
|
|
||||||
|
from mirai.models.bus import ModelEventBus
|
||||||
|
|
||||||
from mirai.models.message import Quote
|
from mirai.models.message import Quote
|
||||||
|
|
||||||
import config
|
import config
|
||||||
@@ -77,7 +80,32 @@ class QQBotManager:
|
|||||||
|
|
||||||
pkg.utils.context.set_qqbot_manager(self)
|
pkg.utils.context.set_qqbot_manager(self)
|
||||||
|
|
||||||
|
# Caution: 注册新的事件处理器之后,请务必在unsubscribe_all中编写相应的取消订阅代码
|
||||||
|
@self.bot.on(FriendMessage)
|
||||||
|
async def on_friend_message(event: FriendMessage):
|
||||||
|
go(self.on_person_message, (event,))
|
||||||
|
|
||||||
|
@self.bot.on(StrangerMessage)
|
||||||
|
async def on_stranger_message(event: StrangerMessage):
|
||||||
|
go(self.on_person_message, (event,))
|
||||||
|
|
||||||
|
@self.bot.on(GroupMessage)
|
||||||
|
async def on_group_message(event: GroupMessage):
|
||||||
|
go(self.on_group_message, (event,))
|
||||||
|
|
||||||
|
def unsubscribe_all():
|
||||||
|
assert isinstance(self.bot, Mirai)
|
||||||
|
bus = self.bot.bus
|
||||||
|
assert isinstance(bus, mirai.models.bus.ModelEventBus)
|
||||||
|
|
||||||
|
bus.unsubscribe(FriendMessage, on_friend_message)
|
||||||
|
bus.unsubscribe(StrangerMessage, on_stranger_message)
|
||||||
|
bus.unsubscribe(GroupMessage, on_group_message)
|
||||||
|
|
||||||
|
self.unsubscribe_all = unsubscribe_all
|
||||||
|
|
||||||
def first_time_init(self, mirai_http_api_config: dict):
|
def first_time_init(self, mirai_http_api_config: dict):
|
||||||
|
"""热重载后不再运行此函数"""
|
||||||
|
|
||||||
if 'adapter' not in mirai_http_api_config or mirai_http_api_config['adapter'] == "WebSocketAdapter":
|
if 'adapter' not in mirai_http_api_config or mirai_http_api_config['adapter'] == "WebSocketAdapter":
|
||||||
bot = Mirai(
|
bot = Mirai(
|
||||||
@@ -103,18 +131,6 @@ class QQBotManager:
|
|||||||
|
|
||||||
self.bot = bot
|
self.bot = bot
|
||||||
|
|
||||||
@self.bot.on(FriendMessage)
|
|
||||||
async def on_friend_message(event: FriendMessage):
|
|
||||||
go(self.on_person_message, (event,))
|
|
||||||
|
|
||||||
@self.bot.on(StrangerMessage)
|
|
||||||
async def on_stranger_message(event: StrangerMessage):
|
|
||||||
go(self.on_person_message, (event,))
|
|
||||||
|
|
||||||
@self.bot.on(GroupMessage)
|
|
||||||
async def on_group_message(event: GroupMessage):
|
|
||||||
go(self.on_group_message, (event,))
|
|
||||||
|
|
||||||
def send(self, event, msg, check_quote=True):
|
def send(self, event, msg, check_quote=True):
|
||||||
asyncio.run(
|
asyncio.run(
|
||||||
self.bot.send(event, msg, quote=True if hasattr(config,
|
self.bot.send(event, msg, quote=True if hasattr(config,
|
||||||
@@ -122,7 +138,6 @@ class QQBotManager:
|
|||||||
|
|
||||||
# 私聊消息处理
|
# 私聊消息处理
|
||||||
def on_person_message(self, event: MessageEvent):
|
def on_person_message(self, event: MessageEvent):
|
||||||
|
|
||||||
reply = ''
|
reply = ''
|
||||||
|
|
||||||
if event.sender.id == self.bot.qq:
|
if event.sender.id == self.bot.qq:
|
||||||
|
|||||||
@@ -21,11 +21,13 @@ def walk(module, prefix=''):
|
|||||||
|
|
||||||
|
|
||||||
def reload_all():
|
def reload_all():
|
||||||
|
# 解除bot的事件注册
|
||||||
|
import pkg
|
||||||
|
pkg.utils.context.get_qqbot_manager().unsubscribe_all()
|
||||||
# 执行关闭流程
|
# 执行关闭流程
|
||||||
logging.info("执行程序关闭流程")
|
logging.info("执行程序关闭流程")
|
||||||
import main
|
import main
|
||||||
main.stop()
|
main.stop()
|
||||||
import pkg
|
|
||||||
|
|
||||||
context = pkg.utils.context.context
|
context = pkg.utils.context.context
|
||||||
walk(pkg)
|
walk(pkg)
|
||||||
|
|||||||
Reference in New Issue
Block a user