原文链接:洛玖开发日记 | 洛屿的小站


由于部分代码过于久远,具体开发开始日期已经遗忘,以能找到的最早或最晚的一次版本为时间进行记录

所有开发版本初始版本为v1.0.0

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

向plugins/config.yaml添加插件信息

name为插件文件夹名称(插件名称)

priority为插件优先级,建议值:1-65535,值越小,插件优先级越高

enable为插件是否启用,true为启用

yaml
1
2
3
- name: your_plugin_folder
priority: 1
enable: false

main.py 必须含有:

python
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']
}

# message_types 支持 group, private
# 当前未编写private消息处理部分,请留意

# 对于message_types 含有 group,你必须同步编写以下函数用于接受传递给插件的群消息:
async def group_handle(message, group_id, user_id):
pass
# 其中message为群消息内容,group_id为群号,user_id为用户qq号

# 对于message_types 含有 private,你必须同步编写:
async def private_handle(message, group_id, user_id):
pass

# 你可以在插件代码中通过以下形式,获取全局config.yaml中配置的参数
# 利用value.xxxx进行调用
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

python
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 value
import utils
import luo9
import random

from utils import ini_files as ini
from configparser import ConfigParser

async 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

python
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 value
import utils
import luo9
import random

from utils import ini_files as ini
import datetime

async 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年年末