koishi-plugin-toram 0.5.5 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,65 @@
1
+ {
2
+ "type": "table",
3
+ "database": null,
4
+ "name": "toram_update",
5
+ "withoutRowId": true,
6
+ "ddl": "CREATE TABLE toram_update (id undefined, time undefined, content TEXT DEFAULT '', PRIMARY KEY (id));",
7
+ "columns": [
8
+ {
9
+ "name": "id",
10
+ "type": "undefined"
11
+ },
12
+ {
13
+ "name": "time",
14
+ "type": "undefined"
15
+ },
16
+ {
17
+ "name": "content",
18
+ "type": "TEXT",
19
+ "constraints": [
20
+ {
21
+ "type": "DEFAULT",
22
+ "definition": "DEFAULT ''"
23
+ }
24
+ ]
25
+ }
26
+ ],
27
+ "constraints": [
28
+ {
29
+ "type": "PRIMARY KEY",
30
+ "definition": "PRIMARY KEY (id)"
31
+ }
32
+ ],
33
+ "rows": [
34
+ [
35
+ 1,
36
+ 1689318000000,
37
+ "7周年活动开启,持续6周至8月25日。"
38
+ ],
39
+ [
40
+ 2,
41
+ 1689922800000,
42
+ "7周年活动追加特殊竞技场与兑换所,兑换所会在7周年活动结束后转移至夏活地图并额外持续2周至9月8日。"
43
+ ],
44
+ [
45
+ 3,
46
+ 1690527600000,
47
+ "夏日活动开启,持续6周至9月8日,配方与兑换所额外持续1周至9月15日。"
48
+ ],
49
+ [
50
+ 4,
51
+ 1691650800000,
52
+ "夏日活动追加章鱼阿健讨伐。"
53
+ ],
54
+ [
55
+ 5,
56
+ 1692342000000,
57
+ "7周年活动追加马奇史东挑战。"
58
+ ],
59
+ [
60
+ 6,
61
+ 1692946800000,
62
+ "新剧情任务\/地图\/配方。"
63
+ ]
64
+ ]
65
+ }
package/lib/index.d.ts CHANGED
@@ -6,6 +6,7 @@ export interface Config {
6
6
  升级_定点王数量: number;
7
7
  升级_野王数量: number;
8
8
  料理_最低返回数量要求: number;
9
+ 天气预报_更新数量: number;
9
10
  }
10
11
  export declare const Config: Schema<Config>;
11
12
  export declare function apply(ctx: any, config: Config): Promise<void>;
package/lib/index.js CHANGED
@@ -4,12 +4,18 @@ exports.apply = exports.Config = exports.name = void 0;
4
4
  const koishi_1 = require("koishi");
5
5
  exports.name = 'toram';
6
6
  exports.Config = koishi_1.Schema.object({
7
- 机器人qq: koishi_1.Schema.string().default('请在此处填写机器人使用的QQ号').description('机器人的使用的QQ号'),
7
+ 机器人qq: koishi_1.Schema.string().default('机器人使用的QQ号').description('请在此处填写机器人使用的QQ号'),
8
+ /*
9
+ 艾特转接_启用 : Schema.boolean().default(false).description('开启或关闭机器人收到的@消息转接'),
10
+ 艾特转接_主号qq : Schema.string().default('你使用的QQ号').description('请在此处填写你主要使用的QQ号,机器人收到的@消息会转接到该账号'),
11
+ */
8
12
  版本等级: koishi_1.Schema.number().default(250).description('当前游戏等级版本'),
9
13
  升级_定点王数量: koishi_1.Schema.number().default(6).description('使用升级指令时返回的定点王数量'),
10
14
  升级_野王数量: koishi_1.Schema.number().default(4).description('使用升级指令时返回的野王数量'),
11
- 料理_最低返回数量要求: koishi_1.Schema.number().default(15).description('使用料理指令且不指定等级时最少返回的玩家昵称数量(如果数据库数量满足)')
15
+ 料理_最低返回数量要求: koishi_1.Schema.number().default(15).description('使用料理指令且不指定等级时最少返回的玩家昵称数量(如果数据库数量满足)'),
16
+ 天气预报_更新数量: koishi_1.Schema.number().default(4).description('使用天气预报指令时返回的更新内容数量(如果数据库数量满足)')
12
17
  });
18
+ // 插件本体
13
19
  async function apply(ctx, config) {
14
20
  // 头目信息数据库
15
21
  ctx.model.extend('toram_boss', {
@@ -20,9 +26,8 @@ async function apply(ctx, config) {
20
26
  baseEXP: 'number',
21
27
  element: 'string',
22
28
  type: 'string'
23
- }, {
24
- primary: 'id'
25
- });
29
+ }, //头目类型:定点王/野王
30
+ { primary: 'id' });
26
31
  // 玩家料理信息数据库
27
32
  ctx.model.extend('toram_dishes', {
28
33
  id: 'number',
@@ -30,67 +35,64 @@ async function apply(ctx, config) {
30
35
  type: 'string',
31
36
  level: 'number',
32
37
  effect: 'string'
33
- }, {
34
- primary: 'id'
35
- });
36
- // 料理简写数据库
38
+ }, //料理效果(游戏称呼)
39
+ { primary: 'id' });
40
+ // 料理简称数据库
37
41
  ctx.model.extend('toram_dishes_name', {
38
42
  id: 'number',
39
43
  name: 'string',
40
44
  type: 'string'
41
- }, {
42
- primary: 'id'
43
- });
45
+ }, //料理类型(游戏称呼)
46
+ { primary: 'id' });
44
47
  // 术语信息数据库
45
48
  ctx.model.extend('toram_terminology', {
46
49
  id: 'number',
47
50
  type: 'string',
48
51
  website: 'string'
49
- }, {
50
- primary: 'id'
51
- });
52
- // 术语简写数据库
52
+ }, //跳转网页
53
+ { primary: 'id' });
54
+ // 术语简称数据库
53
55
  ctx.model.extend('toram_terminology_name', {
54
56
  id: 'number',
55
57
  name: 'string',
56
58
  type: 'string'
57
- }, {
58
- primary: 'id'
59
- });
59
+ }, //游戏术语(游戏称呼)
60
+ { primary: 'id' });
61
+ // 更新内容数据库
62
+ ctx.model.extend('toram_update', {
63
+ id: 'number',
64
+ time: 'number',
65
+ content: 'string'
66
+ }, //更新内容
67
+ { primary: 'id' });
60
68
  // 数据库版本数据库
61
69
  ctx.model.extend('toram_data_version', {
62
70
  id: 'number',
63
71
  database: 'string',
64
72
  version: 'string'
65
- }, {
66
- primary: 'id'
67
- });
73
+ }, //数据库版本
74
+ { primary: 'id' });
68
75
  // 本次更新对应数据库版本
69
76
  const databasesToUpsert = [
70
- { tableName: 'toram_boss',
71
- fileName: './data/boss',
72
- version: '0.5.5' },
73
- { tableName: 'toram_dishes',
74
- fileName: './data/dishes',
75
- version: '0.5.5' },
76
- { tableName: 'toram_dishes_name',
77
- fileName: './data/dishes_name',
78
- version: '0.5.5' },
79
- { tableName: 'toram_terminology',
80
- fileName: './data/terminology',
81
- version: '0.5.5' },
82
- { tableName: 'toram_terminology_name',
83
- fileName: './data/terminology_name',
84
- version: '0.5.5' }
77
+ { tableName: 'toram_boss', fileName: './data/boss',
78
+ version: '0.6.0' },
79
+ { tableName: 'toram_dishes', fileName: './data/dishes',
80
+ version: '0.6.0' },
81
+ { tableName: 'toram_dishes_name', fileName: './data/dishes_name',
82
+ version: '0.6.0' },
83
+ { tableName: 'toram_terminology', fileName: './data/terminology',
84
+ version: '0.6.0' },
85
+ { tableName: 'toram_terminology_name', fileName: './data/terminology_name',
86
+ version: '0.6.0' },
87
+ { tableName: 'toram_update', fileName: './data/update',
88
+ version: '0.6.0' }
85
89
  ];
86
90
  // 玩家等级差经验倍率
87
91
  const PlayerExpRate = [11, 11, 11, 11, 11, 10, 9, 7, 3];
88
92
  // 玩家料理信息数据库
89
93
  const NumberReplace = { '一': '1', '二': '2', '三': '3', '四': '4', '五': '5', '六': '6', '七': '7', '八': '8', '九': '9', '十': '10' };
90
94
  // 随手用到的变量
91
- let n;
92
- let x;
93
- let text;
95
+ var n, x, text;
94
96
  // 查不到玩家料理信息回复
95
97
  const DishesPlayerNotFind = [
96
98
  '魔导书里还没有这个人的料理记录哦?去找青灯让她加一下吧~',
@@ -127,6 +129,12 @@ async function apply(ctx, config) {
127
129
  '居然!青灯没有收录这个游戏术语!怎么回事呢~',
128
130
  '虽然但是,魔导书里没有这个游戏术语的记录呢——'
129
131
  ];
132
+ // 查不到下次更新内容回复
133
+ const NextUpdateNotFind = [
134
+ '啊,我猜青灯忘了告诉我之后的更新内容了【】',
135
+ '居然!魔导书里没有下次游戏更新的记录!快和青灯说一声!',
136
+ '唔姆唔姆,我能和你说我也不知道下次更新会更新什么吗?'
137
+ ];
130
138
  // 料理对应效果列表
131
139
  const DishesEffect = {
132
140
  '炖牛肉': '仇恨值增加', '奶油炖菜': '仇恨值减少',
@@ -149,87 +157,84 @@ async function apply(ctx, config) {
149
157
  // 检查现有数据库版本,不相符则进行更新
150
158
  for (const database of databasesToUpsert) {
151
159
  const { tableName, fileName, version } = database;
152
- const ver = await ctx.database.get('toram_data_version', { database: tableName });
153
- if (ver[0]?.version !== version) {
160
+ const VersionList = await ctx.database.get('toram_data_version', { database: tableName });
161
+ if (VersionList[0]?.version !== version) {
154
162
  const json = require(fileName);
155
163
  const data = json.rows;
156
164
  session.send(`正在写入数据表【${tableName}】...`);
165
+ // 数据更新
157
166
  for (const row of data) {
158
- if (tableName == 'toram_boss') {
159
- await ctx.database.upsert('toram_boss', [
160
- { id: row[0], name: row[1], level: row[2], map: row[3], baseEXP: row[4], element: row[5], type: row[6] }
161
- ]);
162
- }
163
- if (tableName == 'toram_dishes') {
164
- await ctx.database.upsert('toram_dishes', [
165
- { id: row[0], name: row[1], type: row[2], level: row[3], effect: row[4] }
166
- ]);
167
- }
168
- if (tableName == 'toram_dishes_name') {
169
- await ctx.database.upsert('toram_dishes_name', [
170
- { id: row[0], name: row[1], type: row[2] }
171
- ]);
172
- }
173
- if (tableName == 'toram_terminology') {
174
- await ctx.database.upsert('toram_terminology', [
175
- { id: row[0], type: row[1], website: row[2] }
176
- ]);
177
- }
178
- if (tableName == 'toram_terminology_name') {
179
- await ctx.database.upsert('toram_terminology_name', [
180
- { id: row[0], name: row[1], type: row[2] }
181
- ]);
167
+ switch (tableName) {
168
+ case 'toram_boss':
169
+ await ctx.database.upsert('toram_boss', [
170
+ { id: row[0], name: row[1], level: row[2], map: row[3], baseEXP: row[4], element: row[5], type: row[6] }
171
+ ]);
172
+ break;
173
+ case 'toram_dishes':
174
+ await ctx.database.upsert('toram_dishes', [
175
+ { id: row[0], name: row[1], type: row[2], level: row[3], effect: row[4] }
176
+ ]);
177
+ break;
178
+ case 'toram_dishes_name':
179
+ await ctx.database.upsert('toram_dishes_name', [
180
+ { id: row[0], name: row[1], type: row[2] }
181
+ ]);
182
+ break;
183
+ case 'toram_terminology':
184
+ await ctx.database.upsert('toram_terminology', [
185
+ { id: row[0], type: row[1], website: row[2] }
186
+ ]);
187
+ break;
188
+ case 'toram_terminology_name':
189
+ await ctx.database.upsert('toram_terminology_name', [
190
+ { id: row[0], name: row[1], type: row[2] }
191
+ ]);
192
+ break;
193
+ case 'toram_update':
194
+ await ctx.database.upsert('toram_update', [
195
+ { id: row[0], time: row[1], content: row[2] }
196
+ ]);
197
+ break;
198
+ default:
199
+ break;
182
200
  }
183
201
  }
202
+ // 数据库版本更新
184
203
  await ctx.database.upsert('toram_data_version', [{ database: tableName, version: version }], 'database');
185
204
  }
186
205
  x++;
187
206
  }
207
+ // 无需更新返回
188
208
  if (x === 0) {
189
209
  return '当前无需更新数据呢~';
190
210
  }
211
+ // 更新完毕返回
191
212
  return '数据写入完毕!';
192
213
  }
193
214
  // 错误提示
194
215
  catch (err) {
195
216
  if (err.code === 'MODULE_NOT_FOUND') {
196
- if (err.message.includes('/boss')) {
197
- return '写入中断……未在data文件夹里找到文件boss.json';
198
- }
199
- if (err.message.includes('/dishes_name')) {
200
- return '写入中断……未在data文件夹里找到文件dishes_name.json';
201
- }
202
- if (err.message.includes('/dishes')) {
203
- return '写入中断……未在data文件夹里找到文件dishes.json';
204
- }
205
- if (err.message.includes('/terminology')) {
206
- return '写入中断……未在data文件夹里找到文件terminology.json';
207
- }
208
- if (err.message.includes('/terminology_name')) {
209
- return '写入中断……未在data文件夹里找到文件terminology_name.json';
210
- }
217
+ return '写入中断……数据文件缺失!请更新插件或联系插件作者';
211
218
  }
212
219
  }
213
220
  });
214
221
  // 被@时
215
- ctx.middleware(async (session, next) => {
216
- let { elements } = session;
222
+ ctx.middleware(async ({ session }, next, ...args) => {
223
+ let { elements } = session, text = args[0];
217
224
  for (const element of elements) {
218
225
  if (element.type == "at") {
219
226
  if (element.attrs.id == config.机器人qq) {
220
- return '魔导书现有功能:\n①升级 等级:查询该等级升级头目\n②天气预报:查看本次大更新的覆盖内容\n③料理 料理名称 [料理等级]:查询高级料理名单(结果通常用拼音排序)\n④料理 玩家名称:查询该玩家的料理信息\n⑤游戏术语 [术语名称]:查询游戏术语';
227
+ /*
228
+ if (config.艾特转接_启用 == true && text != undefined){
229
+
230
+ }
231
+ */
232
+ return '魔导书现有功能:\n①升级 等级:查询该等级升级头目\n②天气预报:查看接下来' + config.天气预报_更新数量 + '次更新的内容\n③料理 料理名称 [料理等级]:查询高级料理名单(结果通常用拼音排序)\n④料理 玩家名称:查询该玩家的料理信息\n⑤游戏术语 [术语名称]:查询游戏术语';
221
233
  }
222
234
  }
223
235
  }
224
236
  return next();
225
237
  });
226
- // 未来更新信息-天气预报
227
- ctx.middleware(async (session, next) => {
228
- if (session.content === '天气预报') {
229
- return '【托拉姆物语3.24大更一览-哔哩哔哩】 https://b23.tv/cWX9yjU';
230
- }
231
- return next();
232
- });
233
238
  // 料理指令
234
239
  ctx.command('料理 <料理种类> <料理等级>').action(async ({ session }, ...args) => {
235
240
  let DishesName = args[0], DishesLevelChoice = args[1];
@@ -290,7 +295,7 @@ async function apply(ctx, config) {
290
295
  GetAllLevelDishes.sort(function (a, b) {
291
296
  let alv = a.level;
292
297
  let blv = b.level;
293
- return b - a;
298
+ return blv - alv;
294
299
  });
295
300
  const LevelUnder8Dishes = GetAllLevelDishes.map((player) => {
296
301
  return `${player?.name}(${player?.level}级)`;
@@ -437,5 +442,24 @@ async function apply(ctx, config) {
437
442
  const Terminology = GetTerminology[0];
438
443
  return Terminology.website;
439
444
  });
445
+ // 天气预报指令
446
+ ctx.command('天气预报').action(async () => {
447
+ let UpdateList, DateString;
448
+ const Date_now = new Date();
449
+ const timestamp_now = Date_now.getTime();
450
+ UpdateList = await ctx.database.get('toram_update', { time: { $gte: timestamp_now } });
451
+ if (UpdateList.length != 0) {
452
+ const FixUpdateList = UpdateList
453
+ .sort((a, b) => a.time - b.time)
454
+ .slice(0, config.天气预报_更新数量);
455
+ const Updates = FixUpdateList.map(Update => {
456
+ const Update_Date = new Date(Update.time);
457
+ DateString = `${Update_Date.getMonth() + 1}月${Update_Date.getDate()}日`;
458
+ return `${DateString}更新:${Update?.content}`;
459
+ }).join('\n');
460
+ return Updates;
461
+ }
462
+ return NextUpdateNotFind[Math.floor(Math.random() * NextUpdateNotFind.length)];
463
+ });
440
464
  }
441
465
  exports.apply = apply;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "koishi-plugin-toram",
3
3
  "description": "托拉姆物语小工具",
4
- "version": "0.5.5",
4
+ "version": "0.6.0",
5
5
  "contributors": [
6
6
  "青灯 <1874053520@qq.com>"
7
7
  ],
package/readme.md CHANGED
@@ -14,56 +14,4 @@
14
14
 
15
15
  4.在群里@机器人即可查看机器人的功能
16
16
 
17
- QQ:1874053520
18
-
19
- ————————————
20
-
21
- 0.5.5
22
-
23
- 等级上限预载至250
24
-
25
- 数据库内容更新
26
-
27
- ————————————
28
-
29
- 0.5.2
30
-
31
- 初步填充数据表toram_terminology及toram_terminology_name
32
-
33
- ————————————
34
-
35
- 0.5.1
36
-
37
- 新增游戏术语查询功能【需要数据表toram_terminology及toram_terminology_name】
38
-
39
- 料理数据更新【504→507】
40
-
41
- ————————————
42
-
43
- 0.5.0
44
-
45
- 数据库结构更新,请在数据表toram_data_version中移除toram_dishes_effect的记录
46
-
47
- 料理数据更新【496→504】
48
-
49
- ————————————
50
-
51
- 0.4.x
52
-
53
- 5.料理数据更新
54
- 4.支持'xx级'及部分汉字数字的写法作为参数
55
- 3.指令参数无结果时会随机返回少量语句
56
- 2.修复了升级指令错误的bug
57
- 1.修复了数据文件写入无效的bug
58
- 0.新增数据文件写入功能!!!数据写入完毕后就可以正常使用啦~
59
- 暂时移除组队大厅相关功能
60
-
61
- ————————————
62
-
63
- 0.3.x
64
-
65
- 6.料理查询功能优化【需要更新数据表】
66
- 5.料理查询支持输入玩家昵称【需要数据表toram_dishes_effect】
67
- 4.料理查询功能优化
68
- 3.新增料理查询功能【需要数据表toram_dishes及toram_dishes_name】
69
- 2.本插件当前具有以下功能:1.升级查询【需要数据表toram_boss】2.组队大厅相关
17
+ QQ:1874053520