如果您有兴趣,可以通过邮箱联系我:luoy-oss@qq.com
rust版本:luoy-oss/luo9_bot
python版本 :luoy-oss/luo9_bot at python
Python版本已废弃,如果您希望使用Python开发,请阅读新的Python SDK
(2026年4月13日进度:已进行基础版本推送,旧插件重新实现中)
插件
luo9-bot/luo9_sdk_cpp: 洛玖机器人的c++ sdk
luo9-bot/luo9_sdk_rust: 洛玖机器人的rust sdk
写在前面
欢迎加群一起玩!
由于部分代码过于久远,具体开发开始日期已经遗忘,以能找到的最早或最晚的一次版本为时间进行记录
所有开发版本初始版本为v1.0.0
2026年4月13日
当前:
已完成基础的luo9_bot架构搭建 -> luo9-bot/luo9-bot
已完成基础的Rust sdk -> luo9-bot/luo9_sdk_rust
已完成基础的C++ sdk -> luo9-bot/luo9_sdk_cpp
已完成基础的rust插件样例-> luo9-bot/plugin-rust-example
已完成基础的c++插件样例-> luo9-bot/plugin-cpp-example
插件暂未进行复刻
2026年3月28日
随着rust的学习,发现以往的用法过于呆板,遂决定进行rust重构
本人时间较为碎片化,多个项目均需要推进,当前luo9 rust bot项目并不被我任务是核心项目,进度较为缓慢
暂时仅在本地通过git进行版本迭代,未推送到远端
2025年4月29日
由于rust在linux下的内存管理不够熟悉,导致rust插件管理器在linux环境下出现内存越界。
同时为了使消息处理速度较快,现逐步调整python中结构,利用rust重写plugin_manager消息分发。
下方为python与rust实现同一功能不同数据量的耗时对比。
2025年3月27日
rust版本推送luoy-oss/luo9_bot at rust
2025年2月20日
调整插件结构,规范化插件编写格式,现已按新格式调整插件:achievement,api,daily_sign_in, user_register,repeat
调整/plugin/chat.py ->/utils/record.py
README.md↓↓↓
基础配置
参考config.(example).yaml
在同级目录下添加文件:config.yaml进行配置
插件编写
在plugins目录下新建你的插件
向plugins/config.yaml添加插件信息
name为插件文件夹名称(插件名称)
priority为插件优先级,建议值:1-65535,值越小,插件优先级越高
enable为插件是否启用,true为启用
1 2 3 - name: your_plugin_folder priority: 1 enable: false
main.py 必须含有:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 config = { 'name' : 'core_plugin' , 'describe' : '签到注册模块' , 'author' : 'drluo' , 'version' : '1.0.0' , 'message_types' : ['group' ] }async def group_handle (message, group_id, user_id ): pass async def private_handle (message, group_id, user_id ): pass from config import get_value value = get_value()
2024
计划利用python对老旧模块进行重构 – 2024-11-01
基础指令重构完成 – 2024-11-22
… 咕咕咕 – 2025-02-09
全部重构代码已开源:luoy-oss/luo9_bot
注册模块重构 -> user_register.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 import valueimport utilsimport luo9import randomfrom utils import ini_files as inifrom configparser import ConfigParserasync def register (group_id, qq, path ): USER_DATA_PATH = path['USER_DATA_PATH' ] ADMIN_PRIORITY_PATH = path['ADMIN_PRIORITY_PATH' ] ADMIN_FROZEN_PATH = path['ADMIN_FROZEN_PATH' ] if await utils.interactiveState_check(): msg = '[CQ:at,qq={qq}]\n' .format (qq=qq) if not await utils.frozen_check(group_id, qq, ADMIN_FROZEN_PATH): if not await utils.register_check(group_id, qq, USER_DATA_PATH): config = ConfigParser() config["注册" ] = { "是否注册" : "是" } config["个人信息" ] = { "好感" : "1" , "IV" : "70" , "心情" : "0" , } config["签到" ] = { "总积分" : "0" , "签到次数" : "0" , "签到时间" : "你还没有签过到哦" , } config["数据最值" ] = { "IV最大值" : "70" , "心情最大值" : "50" , } await ini.配置项初始化(USER_DATA_PATH, config) config = ConfigParser() config["管理权限" ] = { "{qq}" .format (qq=qq): "0" } await ini.配置项初始化(ADMIN_PRIORITY_PATH, config) config = ConfigParser() config["冻结账号" ] = { "{qq}" .format (qq=qq): "否" } await ini.配置项初始化(ADMIN_FROZEN_PATH, config) point = random.randint(1 , 10 ) msg += '注册成功!发送个人信息查看详情!\n' msg += '获得注册积分 {point} 点!' .format (point=point) await ini.写配置项(USER_DATA_PATH, "签到" , "总积分" , str (point)) else : msg += '你已经注册过了哦~\n发送个人信息查看详情!' else : msg += "已禁止(请联系管理人员)" await luo9.send_group_message(group_id, msg) else : pass
签到模块重构 -> daily_sign_in.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 import valueimport utilsimport luo9import randomfrom utils import ini_files as iniimport datetimeasync def sign_in (group_id, qq, path ): USER_DATA_PATH = path['USER_DATA_PATH' ] ADMIN_FROZEN_PATH = path['ADMIN_FROZEN_PATH' ] point = 0 total_point = 0 sign_in_count = 0 if await utils.interactiveState_check(): msg = '[CQ:at,qq={qq}]\n' .format (qq=qq) if not await utils.frozen_check(group_id, qq, ADMIN_FROZEN_PATH): if await utils.register_check(group_id, qq, USER_DATA_PATH): if not await sign_in_today(group_id, qq, USER_DATA_PATH): point = random.randint(1 , 10 ) date = datetime.datetime.now().strftime('%Y年%m月%d日' ) total_point = int (await ini.读配置项(USER_DATA_PATH, "签到" , "总积分" )) + point sign_in_count = int (await ini.读配置项(USER_DATA_PATH, "签到" , "签到次数" )) + 1 msg += '恭喜你签到成功!\n发送‘查询’查看相关信息~ \n' msg += '获得积分 {point} 点\n' .format (point=point) msg += '总积分 {total_point} 点\n' .format (total_point=total_point) msg += '签到次数 {sign_in_count} 次' .format (sign_in_count=sign_in_count) await ini.写配置项(USER_DATA_PATH, "签到" , "总积分" , str (total_point)) await ini.写配置项(USER_DATA_PATH, "签到" , "签到次数" , str (sign_in_count)) await ini.写配置项(USER_DATA_PATH, "签到" , "签到时间" , date) else : msg += '您已经签到过了哦~\n发送‘查询’查看相关信息~' else : msg += '你还没有注册哦,请先注册' else : msg += "已禁止(请联系管理人员)" await luo9.send_group_message(group_id, msg) else : pass async def sign_in_today (group_id, qq, data_path="" ): if data_path != "" : formatted_date = datetime.datetime.now().strftime('%Y年%m月%d日' ) if await ini.读配置项(data_path, "签到" , "签到时间" ) == formatted_date: return True else : return False else : pass return True async def query_data (group_id, qq, path ): USER_DATA_PATH = path['USER_DATA_PATH' ] ADMIN_FROZEN_PATH = path['ADMIN_FROZEN_PATH' ] if await utils.interactiveState_check(): msg = '[CQ:at,qq={qq}]\n' .format (qq=qq) if not await utils.frozen_check(group_id, qq, ADMIN_FROZEN_PATH): if await utils.register_check(group_id, qq, USER_DATA_PATH): total_point = int (await ini.读配置项(USER_DATA_PATH, "签到" , "总积分" )) sign_in_count = int (await ini.读配置项(USER_DATA_PATH, "签到" , "签到次数" )) sign_in_date = await ini.读配置项(USER_DATA_PATH, "签到" , "签到时间" ) msg += '总积分 {total_point} 点\n' .format (total_point=total_point) msg += '签到次数 {sign_in_count} 次\n' .format (sign_in_count=sign_in_count) msg += '签到时间 {sign_in_date}' .format (sign_in_date=sign_in_date) else : msg += '你还没有注册哦,请先注册' else : msg += "已禁止(请联系管理人员)" await luo9.send_group_message(group_id, msg) else : pass async def user_info (group_id, qq, path ): USER_DATA_PATH = path['USER_DATA_PATH' ] ADMIN_FROZEN_PATH = path['ADMIN_FROZEN_PATH' ] if await utils.interactiveState_check(): msg = '[CQ:at,qq={qq}]\n' .format (qq=qq) if not await utils.frozen_check(group_id, qq, ADMIN_FROZEN_PATH): if await utils.register_check(group_id, qq, USER_DATA_PATH): 好感 = int (await ini.读配置项(USER_DATA_PATH, "个人信息" , "好感" )) IV = int (await ini.读配置项(USER_DATA_PATH, "个人信息" , "IV" )) IV最大值 = int (await ini.读配置项(USER_DATA_PATH, "数据最值" , "IV最大值" )) 心情 = int (await ini.读配置项(USER_DATA_PATH, "个人信息" , "心情" )) 心情最大值 = int (await ini.读配置项(USER_DATA_PATH, "数据最值" , "心情最大值" )) msg += '好感: {value}\n' .format (value=好感) msg += 'IV: {value}/{value_max}\n' .format (value=IV, value_max=IV最大值) msg += '心情: {value}/{value_max}' .format (value=心情, value_max=心情最大值) else : msg += '你还没有注册哦,请先注册' else : msg += "已禁止(请联系管理人员)" await luo9.send_group_message(group_id, msg) else : pass
2023
2022
无记录,似乎这段时间从洛玖身边抹除掉了。
2020-08-26-2021-01-28
Drluo一言定时问候插件
代码基于:易语言
指令涵盖:界面操作,具体指令无记录
版本记录
Ver 1.2.6 2021-01-28
修复:群过多时,群号选择界面群号与群名不对称问题
Ver 1.2.5 2021-01-07
1.添加高级定时功能,高级定时内容支持换行代码和图片代码
(步骤:打开设置->设置定时内容->高级设置->关闭设置界面->在应用目录文件夹下创建文件“年月日.ini”->修改文件内容代码
)
(具体内容可见示例文件:20200101.ini
)
*注意:2021年1月10日 应创建文件:20210110.ini
2.定时优化
Ver 0.1.2.6(特供版)
Ver 1.3.0 2022-08-04
修复:群列表问题
1.添加每周定时,具体操作请个人尝试,详情可询问
*注意:未做删除功能,创建定时后,须手动删除
Ver 1.1.7 2020-10-19
1.新增换行代码{\r\n}
!在定时内容中使用即可
Ver 1.1.6 2020-9-25
1.新增图片代码[PHOTO:图片路径]
Ver 1.1.1 2020-9-18
1.新增通过勾选群方式来加入群号
2.增加全局群发时间间隔
3.修复一处用词错误
Ver 1.0.0 2020-8-26
1.一言定时问候发布
2020-08-06
利用Mirai,QY,QQLight等框架替代酷Q,洛玖重生。
歌曲指令
代码基于:最强编辑器~(酷Q时代的眼泪)~
指令涵盖:歌曲(睡觉|游戏|独自|喜欢)*歌曲名称 可以通过@查询别人的歌单
最初版本日期:2020-08-06(不准确)
最后一次更新日期:(不明确)
动漫指令
代码基于:最强编辑器~(酷Q时代的眼泪)~
指令涵盖:动漫(异世界|睡觉|魔法|喜欢|后宫|伪娘)*动漫名称 可以通过@查询别人的动漫
最初版本日期: 2020-08-18(不准确)
最后一次更新日期:(不明确)
2020-08-02
酷Q结束了它的使命。暂未寻找新框架,洛玖暂时陷入沉寂。
2018-2020
从接触了酷Q机器人开始,便有了洛玖,其实最开始只是看着别的人玩的挺有趣,便想着自己捯饬一个试试,慢慢的也写了不少功能。
注册模板 v3.1.0
代码基于:最强编辑器~(酷Q时代的眼泪)~
指令涵盖:注册 个人信息
最初版本日期:2019-04-28(不准确)
最后一次更新日期:(不明确)
签到模板 v3.1.0
代码基于:最强编辑器~(酷Q时代的眼泪)~
指令涵盖:查询 签到 打卡 image=http://pub.idqqimg.com
最初版本日期:2019-04-28(不准确)
最后一次更新日期:(不明确)
boss模板 v2.7.0
代码基于:最强编辑器~(酷Q时代的眼泪)~
指令涵盖:attack
最初版本日期:(不明确)
最后一次更新日期:(不明确)
互动功能
代码基于:时间久远,已无法找到源代码
指令涵盖:hi(启动互动) 拜拜(关闭互动)
最初版本日期:2019-04-28(不准确)
最后一次更新日期:(不明确)
搜索功能
代码基于:最强编辑器~(酷Q时代的眼泪)~
指令涵盖:搜索xxxx
最初版本日期:2019-04-29(不准确)
最后一次更新日期:(不明确)
商店模板 v2.4.0
代码基于:最强编辑器~(酷Q时代的眼泪)~
指令涵盖:发红包(1-9][-9]):([1-9][0-91) 购买运动饮料* 购买心情冲剂* 注册银行账户 购买水晶袋* 购买金币袋* 使用水晶袋* 使用金币袋* 购买碎片袋* 申请银行账户 购买A币* 购买糖果* 购买可乐* 购买红牛* 查询A币 萝莉商店 我的背包 赠送A币 赠送积分 商店 背包
最初版本日期:2019-05-04 (不准确)
最后一次更新日期:2019-11-30(不准确)
互动模板 v3.4.5
代码基于:最强编辑器~(酷Q时代的眼泪)~
指令涵盖:查询互动指令 查询综合指令 查询信息指令 查询银行指令 货币转换菜单 脑筋急转弯 游戏列表1 游戏列表2 游戏列表3 游戏列表4 指令列表 查询互动 游戏列表 讲笑话 冷知识 找不同 玩耍
最初版本日期:2019-05-05 (不准确)
最后一次更新日期:(不准确)
道具模板 v3.4.0
代码基于:最强编辑器~(酷Q时代的眼泪)~
指令涵盖:使用冰镇可乐* 使用运动饮料* 使用心情冲剂* 查看冰镇可乐 查看运动饮料 查看心情冲剂 使用心情冲剂 使用糖果* 使用可乐* 查看金币袋 查看水晶袋 使用红牛* 查看可乐 查看红牛 查看糖果 喂糖
最初版本日期:2019-05-05 (不准确)
最后一次更新日期:2020-01-27 (不准确)
节日模板 v1.4.0
代码基于:最强编辑器~(酷Q时代的眼泪)~
指令涵盖:端午节|念屈|端午快乐 元宵(.*?)快乐 感恩节福利 劳动最光荣 中秋福利 我的成就 国庆福利 祖国福利 新年快乐 感恩节 吃元宵 情人节 七夕
最初版本日期: 2019-10-02(不准确)
最后一次更新日期:2021-05-01(不准确)
赛马游戏
代码基于:时间久远,已无法找到源代码
指令涵盖:赛马 赛马菜单
最初版本日期: 2019-08-15
最后一次更新日期: 2019-08-15 (不准确)
真心话大冒险游戏
代码基于:时间久远,已无法找到源代码
指令涵盖:#真心话大冒险
最初版本日期:2019-08-14
最后一次更新日期:(不明确)
狼人杀游戏
代码基于:时间久远,已无法找到源代码
指令涵盖:未知
最初版本日期:2019-08-04
最后一次更新日期:(不明确)
你画我猜游戏
代码基于:时间久远,已无法找到源代码
指令涵盖:未知
最初版本日期:(不明确)
最后一次更新日期: 2019-07-02
疫情指令
代码基于:兔子自定义
指令涵盖:疫情监测 新型肺炎疫情百度 新型肺炎疫情丁香
最初版本日期:2020-01-24
最后一次更新日期:2020-01-24
始于2018年年末