【踩坑】mirai挂机运行经常自动退出怎么办?

news/2024/11/28 19:43:00/

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn]

目录

背景介绍

解决思路

实现方法

最终效果


背景介绍

        就是说,后台运行了mcl,但经常莫名其妙自动会退出,导致每次都得手动的去服务器上重新启动mcl。而对于自己运行的需要用到mirai的软件,也得重新获取bot id。非常的麻烦!       

解决思路

        1、通过一个python脚本,定时的去检查mcl的运行状态,如果发现mcl退出了,就赶紧重新运行起来。

        2、由于这里重新运行了mcl,我们应该通知其他用到了这个mirai的软件,也需要重新获取bot id。这里使用最简单粗暴的方法:每次重启了mcl,就在指定目录下生成一个文件。而其他软件可以判断是否存在这个,从而决定是否重新获取bot id。(当然,你的软件在每次使用时,都生成一个新的bot id也行,但会导致服务器的缓存占用变高。)

实现方法

        监控mcl的python脚本——listene.py:

import subprocess
import time
import os
import atexitprocess = subprocess.Popen(['./mcl -u'])
stoped_flag = Falsedef kill_process():process.kill()atexit.register(kill_process)  # 注册进程清理函数while True:time.sleep(10)poll = process.poll()if poll is not None:print('./mcl exited unexpectedly, restarting...')process = subprocess.Popen(['./mcl -u'])stoped_flag = Trueelse:print('./mcl is running')if stoped_flag:stoped_flag = Falsewith open('mcl_restart', 'w+') as f:f.write('1')

        用到了mirai的软件中重新生成bot id的示例用法:

def qqTransfer():global botwith open('conf.json', 'r+', encoding="utf-8") as f:content = f.read()conf = json.loads(content)auth_key = conf['auth_key']bind_qq = conf['bind_qq']sleep_time = conf['sleep_time']debug_level = conf['debug_level']receive_groups = conf['receive_groups']send_groups = conf['send_groups']# receive_groups = ['537241540', '719684243']# send_groups = ['537241540', '719684243']logger.setDebugLevel(debug_level)session = bot.verifySession(auth_key)logger.DebugLog(">> session: "+session)bot.bindSession(session, bind_qq)while True:# 看这里看这里!!!!!!!!!!!!!!!!!!!if os.path.exists('mcl/mcl_restart'):print('>> 重新获取bot session')bot = QQBot()session = bot.verifySession(auth_key)logger.DebugLog(">> session: "+session)bot.bindSession(session, bind_qq)os.unlink('mcl/mcl_restart')cnt = bot.getMessageCount(session)if cnt:logger.DebugLog('>> 有消息了 => {}'.format(cnt))logger.DebugLog('获取消息内容')data = bot.getMsgFromGroup(session)if len(data) == 0:logger.DebugLog('消息为空')continuelogger.DebugLog(data)bot.parseMsgForChatGPT(data, bind_qq, session)logger.DebugLog('解析消息内容')data = bot.parseGroupMsg(data)logger.DebugLog(data)logger.DebugLog('转发消息内容')bot.sendMsgToAllGroups(session, receive_groups, send_groups, data)sleep(sleep_time)bot.releaseSession(session, bind_qq)

        该代码段取自:mirai QQ机器人最详细教程 [附Q群消息转发例程]

最终效果

         目前mcl一直没有断过。


http://www.ppmy.cn/news/105074.html

相关文章

Java制作520表白代码——爱一个人需要理由吗?

✨博主:命运之光 ✨专栏:Java经典程序设计 520表白日,每个人都期待着浪漫的表白,而作为一名热爱编程的程序员,我决定用程序员的方式来向你表达我的爱意。 在2023年5月20日这个特殊的日子里,我要用一段特别的…

kong网关安装及konga安装

一、kong安装 安装机器地址:192.168.19.50 1、自定义一个docker网络 [rootmin ~]# docker network create kong-net a9bde4e7d16e4838992000cd5612476b238f7a88f95a07c994a9f57be7f64c10查看网络是否创建成功 [rootmin ~]# docker network ls NETWORK ID NA…

【计算机网络详解】——应用层(学习笔记)

📖 前言:应用层是计算机网络体系结构的最顶层,是设计和建立计算机网络的最终目的,也是计算机网络中发展最快的部分。在本文中,我们以一些经典的网络应用为例来学习有关网络应用的原理、协议和实现方面的知识。 目录 &a…

Vue实例

1. 自定义元素 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wid…

基于FPGA:运动目标检测(包围盒仿真工程,及一些调试问题)

目录 前言一、安装器件库二、仿真工程操作1、进入文件列表2、找到bounding_box_locate.vt&#xff0c;双击打开文件3、修改路径4、路径设置5、切换回“Hierarchy”&#xff0c;即工程界面6、运行仿真7、查看波形 重点&#xff1a;调试问题三、仿真代码1、仿真顶层文件2、绘制包…

什么是Redis

概述 什么是Redis Redis(Remote Dictionary Server) 是一个使用 C 语言编写的&#xff0c;开源的&#xff08;BSD许可&#xff09;高性能非关系型&#xff08;NoSQL&#xff09;的键值对数据库。 Redis 可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串&#xff…

Linux输入输出重定向

目录 Linux输入输出重定向 Linux中的默认设备 输入输出重定向定义 输入输出重定向操作符 实用形式 标准输入、标准输出、标准错误 输出重定向案例 案例1 --- 输出重定向&#xff08;覆盖&#xff09; 案例2 --- 输出重定向&#xff08;追加&#xff09; 案例3 --- 错误…

ifconfig工具与驱动交互解析(ioctl)

Linux ifconfig&#xff08;network interfaces configuring&#xff09; Linux ifconfig命令用于显示或设置网络设备。ifconfig可设置网络设备的状态&#xff0c;或是显示目前的设置。同netstat一样&#xff0c;ifconfig源码也位于net-tools中。源码位于net-tools工具包中&am…