koishi-plugin-toram 1.1.0 → 1.2.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.
package/lib/class.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Dishes, MonsterData, PlayerData } from "./command/interface";
1
+ import { Dish, MonsterData, PlayerData } from "./interface";
2
2
  export declare class Monster {
3
3
  type: number;
4
4
  name: string;
@@ -14,9 +14,10 @@ export declare class Monster {
14
14
  export declare class Player {
15
15
  id: number;
16
16
  name: string;
17
- dishes: Dishes[];
17
+ dishes: Dish[];
18
18
  path: number;
19
+ qqOpenId: string;
19
20
  constructor(playerData: PlayerData);
20
21
  reName(name: string): void;
22
+ getData(): PlayerData;
21
23
  }
22
- export { MonsterData };
@@ -1,3 +1,17 @@
1
1
  import { Context } from "koishi";
2
+ import { DishesTypeNames } from "../interface";
2
3
  import { Config } from "..";
4
+ export declare const dishesTypeNames: DishesTypeNames;
5
+ export declare const chineseNumToNum: {
6
+ 一: string;
7
+ 二: string;
8
+ 三: string;
9
+ 四: string;
10
+ 五: string;
11
+ 六: string;
12
+ 七: string;
13
+ 八: string;
14
+ 九: string;
15
+ 十: string;
16
+ };
3
17
  export declare function command_dishes(ctx: Context, config: Config, args: string[]): Promise<string>;
@@ -0,0 +1,3 @@
1
+ import { Context, Session } from "koishi";
2
+ import { Config } from "..";
3
+ export declare function command_register(ctx: Context, session: Session, config: Config, args: string[]): Promise<string>;
@@ -0,0 +1,3 @@
1
+ import { Context, Session } from "koishi";
2
+ import { Config } from "..";
3
+ export declare function command_updateBoss(ctx: Context, session: Session, config: Config, args: string[]): Promise<string>;
@@ -0,0 +1,3 @@
1
+ import { Context, Session } from "koishi";
2
+ import { Config } from "..";
3
+ export declare function command_updateDishes(ctx: Context, session: Session, config: Config, args: string[]): Promise<string>;
package/lib/index.d.ts CHANGED
@@ -1,6 +1,5 @@
1
1
  import { Context, Schema } from 'koishi';
2
- import { MonsterData } from './class';
3
- import { PlayerData } from './command/interface';
2
+ import { MonsterData, PlayerData } from './interface';
4
3
  export declare const inject: string[];
5
4
  export declare const name = "toram";
6
5
  declare module 'koishi' {
package/lib/index.js CHANGED
@@ -326,6 +326,8 @@ var _Monster = class _Monster {
326
326
  switch (field) {
327
327
  case "id":
328
328
  break;
329
+ case "update":
330
+ break;
329
331
  case "name":
330
332
  if (monsterData.type !== 2) {
331
333
  this.name = monsterData.name;
@@ -354,7 +356,7 @@ var _Monster = class _Monster {
354
356
  __name(_Monster, "Monster");
355
357
  var Monster = _Monster;
356
358
  var _Player = class _Player {
357
- // 门牌号
359
+ // QQ
358
360
  constructor(playerData) {
359
361
  this.id = 0;
360
362
  // 唯一标识
@@ -363,6 +365,8 @@ var _Player = class _Player {
363
365
  this.dishes = [];
364
366
  // 料理
365
367
  this.path = 0;
368
+ // 门牌号
369
+ this.qqOpenId = "";
366
370
  this.name = playerData.name;
367
371
  const dishes = JSON.parse(playerData.dishes);
368
372
  for (const dish of dishes) {
@@ -373,6 +377,15 @@ var _Player = class _Player {
373
377
  reName(name2) {
374
378
  this.name = name2;
375
379
  }
380
+ getData() {
381
+ return {
382
+ id: this.id,
383
+ name: this.name,
384
+ dishes: JSON.stringify(this.dishes),
385
+ path: this.path,
386
+ qqOpenId: this.qqOpenId
387
+ };
388
+ }
376
389
  };
377
390
  __name(_Player, "Player");
378
391
  var Player = _Player;
@@ -525,8 +538,6 @@ async function getInfo(ctx, level, config) {
525
538
  case level === config.maxLevel:
526
539
  return `
527
540
  你已经升到满级啦!`;
528
- default:
529
- return "";
530
541
  }
531
542
  }
532
543
  __name(getInfo, "getInfo");
@@ -565,6 +576,179 @@ async function getFilterWildBoss(ctx, level, length) {
565
576
  }
566
577
  __name(getFilterWildBoss, "getFilterWildBoss");
567
578
 
579
+ // src/command/register.ts
580
+ async function command_register(ctx, session, config, args) {
581
+ const name2 = args[0];
582
+ const checkResult = await checkArgs3(ctx, session, name2);
583
+ switch (checkResult.code) {
584
+ case 1001:
585
+ return makeReply(config, "register_name_undefined");
586
+ case 1002:
587
+ return makeReply(config, "register_user_repeat", [checkResult.data]);
588
+ case 1003:
589
+ return makeReply(config, "register_player_repeat", [checkResult.data]);
590
+ case 0:
591
+ await ctx.database.create("player", { id: checkResult.data, name: name2, dishes: "[]", path: 0, qqOpenId: session.event.user.id });
592
+ return makeReply(config, "register_seccess", [name2]);
593
+ case 1:
594
+ await ctx.database.set("player", { id: checkResult.data }, { qqOpenId: session.event.user.id });
595
+ return makeReply(config, "register_seccess", [name2]);
596
+ }
597
+ }
598
+ __name(command_register, "command_register");
599
+ async function checkArgs3(ctx, session, name2) {
600
+ const playerList = await ctx.database.get("player", {});
601
+ const user = playerList.find((player) => player.qqOpenId === session.event.user.id);
602
+ if (user)
603
+ return { code: 1002, data: user.name };
604
+ if (!name2)
605
+ return { code: 1001 };
606
+ const filterPlayer = playerList.find((player) => player.name === name2);
607
+ if (!filterPlayer) {
608
+ const playerIdList = playerList.map((player) => player.id);
609
+ let newId;
610
+ for (let i = 1; i <= playerList.length + 1; i++) {
611
+ if (!playerIdList.includes(i))
612
+ newId = i;
613
+ }
614
+ return { code: 0, data: newId };
615
+ }
616
+ if (filterPlayer.qqOpenId) {
617
+ return { code: 1003, data: filterPlayer.name };
618
+ } else {
619
+ return { code: 1, data: filterPlayer.id };
620
+ }
621
+ }
622
+ __name(checkArgs3, "checkArgs");
623
+
624
+ // src/command/updateDishes.ts
625
+ async function command_updateDishes(ctx, session, config, args) {
626
+ const name2 = args[0], type = args[1], level = args[2];
627
+ const checkResult = await checkArgs4(ctx, session, args);
628
+ const playerList = await ctx.database.get("player", { qqOpenId: session.event.user.id });
629
+ switch (checkResult.code) {
630
+ case 1001:
631
+ return makeReply(config, "updateDishes_args_undefined");
632
+ case 1002:
633
+ return makeReply(config, "updateDishes_level_error");
634
+ case 1003:
635
+ return makeReply(config, "updateDishes_type_error");
636
+ case 0:
637
+ await ctx.database.create("player", { id: checkResult.data["id"], name: name2, dishes: JSON.stringify(checkResult.data["dishes"]), path: 0, qqOpenId: "" });
638
+ return makeReply(config, "updateDishes_seccess", [playerList[0].name]);
639
+ case 1:
640
+ const dishes = JSON.parse(checkResult.data["dishes"]);
641
+ let push = true;
642
+ for (const dish of dishes) {
643
+ if (dish.type === checkResult.data["type"]) {
644
+ dish.level = Number(level);
645
+ push = false;
646
+ break;
647
+ }
648
+ }
649
+ if (push)
650
+ dishes.push({ type: checkResult.data["type"], level: Number(level), update: playerList[0].name });
651
+ await ctx.database.set("player", { id: checkResult.data["id"] }, { dishes: JSON.stringify(dishes) });
652
+ return makeReply(config, "updateDishes_seccess", [playerList[0].name]);
653
+ }
654
+ }
655
+ __name(command_updateDishes, "command_updateDishes");
656
+ async function checkArgs4(ctx, session, args) {
657
+ for (let i = 0; i < 3; i++) {
658
+ if (args[i] === void 0)
659
+ return { code: 1001 };
660
+ }
661
+ let name2 = args[0], type = args[1], level = args[2];
662
+ if (!/^([1-9]|10|一|二|三|四|五|六|七|八|九|十)级?$/.test(level))
663
+ return { code: 1002 };
664
+ if (/级$/.test(level))
665
+ level = level.replace(/级/g, "");
666
+ if (!/^([1-9]|10)$/.test(level))
667
+ level = chineseNumToNum[level];
668
+ let filterType = "";
669
+ for (const dishesType in dishesTypeNames) {
670
+ for (const dishesName of dishesTypeNames[dishesType]) {
671
+ if (dishesName === type)
672
+ filterType = dishesType;
673
+ }
674
+ }
675
+ if (!filterType)
676
+ return { code: 1003 };
677
+ const playerList = await ctx.database.get("player", {});
678
+ const filterPlayer = playerList.find((player) => player.name === name2);
679
+ if (!filterPlayer) {
680
+ const playerIdList = playerList.map((player2) => player2.id);
681
+ let newId;
682
+ for (let i = 1; i <= playerList.length + 1; i++) {
683
+ if (!playerIdList.includes(i))
684
+ newId = i;
685
+ }
686
+ const player = playerList.find((player2) => player2.qqOpenId === session.event.user.id);
687
+ return { code: 0, data: { id: newId, dishes: { type: filterType, level: Number(level), update: player.name } } };
688
+ }
689
+ return { code: 1, data: { id: filterPlayer.id, dishes: filterPlayer.dishes, type: filterType } };
690
+ }
691
+ __name(checkArgs4, "checkArgs");
692
+
693
+ // src/command/updateBoss.ts
694
+ async function command_updateBoss(ctx, session, config, args) {
695
+ const checkResult = await checkArgs5(ctx, session, config, args);
696
+ const playerList = await ctx.database.get("player", { qqOpenId: session.event.user.id });
697
+ switch (checkResult.code) {
698
+ case 1001:
699
+ return makeReply(config, "updateBoss_args_undefined");
700
+ case 1002:
701
+ return makeReply(config, "updateBoss_type_error");
702
+ case 1003:
703
+ return makeReply(config, "updateBoss_level_error", [`${config.maxLevel + 30}`]);
704
+ case 1004:
705
+ return makeReply(config, "updateBoss_exp_error");
706
+ case 1005:
707
+ return makeReply(config, "updateBoss_element_error");
708
+ case 0:
709
+ await ctx.database.create("monster", checkResult.data);
710
+ return makeReply(config, "updateBoss_seccess", [playerList[0].name]);
711
+ case 1:
712
+ await ctx.database.set("monster", { id: checkResult.data["id"] }, checkResult.data["args"]);
713
+ return makeReply(config, "updateBoss_seccess", [playerList[0].name]);
714
+ }
715
+ }
716
+ __name(command_updateBoss, "command_updateBoss");
717
+ async function checkArgs5(ctx, session, config, args) {
718
+ for (let i = 0; i < 6; i++) {
719
+ if (args[i] === void 0)
720
+ return { code: 1001 };
721
+ }
722
+ let name2 = args[0], type = args[1], level = args[2], exp = args[3], map = args[4], element = args[5];
723
+ if (!["定点", "定点王", "野王"].includes(type))
724
+ return { code: 1002 };
725
+ if (/级$/.test(level))
726
+ level = level.replace(/级/g, "");
727
+ if (isNaN(Number(level)) || !Number.isInteger(Number(level)) || Number(level) <= 0 || Number(level) > config.maxLevel + 30)
728
+ return { code: 1003 };
729
+ if (isNaN(Number(exp)) || !Number.isInteger(Number(exp)) || Number(exp) <= 0)
730
+ return { code: 1004 };
731
+ if (/属$/.test(element) || /属性$/.test(element))
732
+ element = element.slice(1, 2);
733
+ if (!["光", "暗", "风", "地", "水", "火"].includes(element))
734
+ return { code: 1005 };
735
+ const monsterList = await ctx.database.get("monster", {});
736
+ const filterMonsterList = monsterList.filter((monster) => monster.name === name2 && monster.map === map);
737
+ const playerList = await ctx.database.get("player", { qqOpenId: session.event.user.id });
738
+ if (filterMonsterList.length === 0) {
739
+ const monsterIdList = monsterList.map((monster) => monster.id);
740
+ let newId;
741
+ for (let i = 1; i <= monsterList.length + 1; i++) {
742
+ if (!monsterIdList.includes(i))
743
+ newId = i;
744
+ }
745
+ return { code: 0, data: { id: newId, name: name2, type: type === "野王" ? 1 : 2, baseLevel: Number(level), baseExp: Number(exp), map, element, update: playerList[0].name } };
746
+ } else {
747
+ return { code: 1, data: { id: filterMonsterList[0].id, args: { name: name2, type: type === "野王" ? 1 : 2, baseLevel: Number(level), baseExp: Number(exp), map, element, update: playerList[0].name } } };
748
+ }
749
+ }
750
+ __name(checkArgs5, "checkArgs");
751
+
568
752
  // src/functions.ts
569
753
  function makeReply(config, replyType, replaceList = []) {
570
754
  const replys = config.reply[replyType];
@@ -577,6 +761,13 @@ function makeReply(config, replyType, replaceList = []) {
577
761
  }
578
762
  __name(makeReply, "makeReply");
579
763
  async function useCommand(command, ctx, session, config, args = []) {
764
+ if (command !== "register") {
765
+ const playerList = await ctx.database.get("player", { qqOpenId: session.event.user.id });
766
+ if (playerList.length === 0) {
767
+ session.send(makeReply(config, "need_register"));
768
+ return;
769
+ }
770
+ }
580
771
  switch (command) {
581
772
  case "dishes":
582
773
  session.send(await command_dishes(ctx, config, args));
@@ -584,6 +775,15 @@ async function useCommand(command, ctx, session, config, args = []) {
584
775
  case "levelUP":
585
776
  session.send(await command_levelUP(ctx, config, args));
586
777
  break;
778
+ case "register":
779
+ session.send(await command_register(ctx, session, config, args));
780
+ break;
781
+ case "updateBoss":
782
+ session.send(await command_updateBoss(ctx, session, config, args));
783
+ break;
784
+ case "updateDishes":
785
+ session.send(await command_updateDishes(ctx, session, config, args));
786
+ break;
587
787
  }
588
788
  }
589
789
  __name(useCommand, "useCommand");
@@ -606,7 +806,10 @@ var Config = import_koishi.Schema.intersect([
606
806
  import_koishi.Schema.object({
607
807
  reply: import_koishi.Schema.object({
608
808
  help: import_koishi.Schema.array(import_koishi.Schema.string().required().role("textarea")).description("帮助的回复内容").collapse().default([
609
- "魔导书现有功能:\n1.升级 [等级]:查询该等级升级头目\n2.料理 [料理名称] (料理等级):查询高级料理名单\n3.料理 [玩家名称]:查询可能的玩家的料理信息"
809
+ "魔导书现有功能:\n0.注册 [游戏内昵称]:在魔导书处进行注册,只有注册后才能使用魔导书哦!\n1.升级 [等级]:查询该等级升级头目\n2.料理 [料理名称] (料理等级):查询高级料理名单\n3.料理 [玩家名称]:查询可能的玩家的料理信息"
810
+ ]),
811
+ need_register: import_koishi.Schema.array(import_koishi.Schema.string().required().role("textarea")).description("未注册用户调用指令时").collapse().default([
812
+ '只有注册后才能使用魔导书哦!可以输入"注册 [游戏内昵称]"来进行注册~'
610
813
  ]),
611
814
  levelUP_level_undefined: import_koishi.Schema.array(import_koishi.Schema.string().required().role("textarea")).description("指令[升级]缺失参数").collapse().default([
612
815
  '如果你要查询升级头目,请输入"升级 等级数"来进行查询哦?'
@@ -626,11 +829,56 @@ var Config = import_koishi.Schema.intersect([
626
829
  dishes_return_null: import_koishi.Schema.array(import_koishi.Schema.string().required().role("textarea")).description("指令[料理]未找到").collapse().default([
627
830
  "如果你确定输入是正确的,那大概是还没有收录这样昵称的玩家的料理吧【缩缩】",
628
831
  "【书页翻动】嗯……已查阅@_0_@条玩家记录,没有找到符合名称的玩家哦【合上书本】"
832
+ ]),
833
+ register_name_undefined: import_koishi.Schema.array(import_koishi.Schema.string().required().role("textarea")).description("指令[注册]缺失参数").collapse().default([
834
+ '如果你要进行注册的话,请输入"注册 [游戏内昵称]"来进行注册哦?'
835
+ ]),
836
+ register_user_repeat: import_koishi.Schema.array(import_koishi.Schema.string().required().role("textarea")).description("指令[注册]重复使用").collapse().default([
837
+ "盯——不要捣乱!",
838
+ "我记得你的!你是@_0_@!",
839
+ "@_0_@,不可以重复注册哦——"
840
+ ]),
841
+ register_player_repeat: import_koishi.Schema.array(import_koishi.Schema.string().required().role("textarea")).description("指令[注册]已被注册").collapse().default([
842
+ "唔?@_0_@已经被人注册过了诶——?问问青灯看是怎么回事吧?"
843
+ ]),
844
+ register_seccess: import_koishi.Schema.array(import_koishi.Schema.string().required().role("textarea")).description("指令[注册]成功").collapse().default([
845
+ "注册成功啦!欢迎@_0_@!"
846
+ ]),
847
+ updateDishes_args_undefined: import_koishi.Schema.array(import_koishi.Schema.string().required().role("textarea")).description("指令[提交料理]缺失参数").collapse().default([
848
+ '如果你要提交料理的话,请输入"提交料理 [玩家名] [料理类型] [料理等级]"来进行提交哦?'
849
+ ]),
850
+ updateDishes_level_error: import_koishi.Schema.array(import_koishi.Schema.string().required().role("textarea")).description("指令[提交料理]等级错误").collapse().default([
851
+ "输入的料理等级有误,请输入正确的等级噢?(1~10或一到十)"
852
+ ]),
853
+ updateDishes_type_error: import_koishi.Schema.array(import_koishi.Schema.string().required().role("textarea")).description("指令[提交料理]类型错误").collapse().default([
854
+ "这——这种料理是能吃的吗?"
855
+ ]),
856
+ updateDishes_seccess: import_koishi.Schema.array(import_koishi.Schema.string().required().role("textarea")).description("指令[提交料理]成功").collapse().default([
857
+ "提交料理成功!感谢@_0_@告诉魔导书!"
858
+ ]),
859
+ updateBoss_args_undefined: import_koishi.Schema.array(import_koishi.Schema.string().required().role("textarea")).description("指令[提交头目]缺失参数").collapse().default([
860
+ '如果你要提交头目的话,请输入"提交头目 [头目名] [头目类型] [基础等级] [基础经验] [所在地图] [属性]"来进行提交哦?'
861
+ ]),
862
+ updateBoss_type_error: import_koishi.Schema.array(import_koishi.Schema.string().required().role("textarea")).description("指令[提交头目]类型错误").collapse().default([
863
+ "头目类型只能选择定点王或者野王哦?"
864
+ ]),
865
+ updateBoss_level_error: import_koishi.Schema.array(import_koishi.Schema.string().required().role("textarea")).description("指令[提交头目]等级错误").collapse().default([
866
+ "输入的等级有误,请输入1-@_0_@之间的整数作为等级噢?"
867
+ ]),
868
+ updateBoss_exp_error: import_koishi.Schema.array(import_koishi.Schema.string().required().role("textarea")).description("指令[提交头目]经验错误").collapse().default([
869
+ "怎么想经验值都只能是一个正整数吧!"
870
+ ]),
871
+ updateBoss_element_error: import_koishi.Schema.array(import_koishi.Schema.string().required().role("textarea")).description("指令[提交头目]属性错误").collapse().default([
872
+ "我记得只有地风水火光暗无七种属性呢?"
873
+ ]),
874
+ updateBoss_seccess: import_koishi.Schema.array(import_koishi.Schema.string().required().role("textarea")).description("指令[提交头目]成功").collapse().default([
875
+ "提交头目成功!感谢@_0_@告诉魔导书!"
629
876
  ])
630
877
  })
631
878
  }).description("回复管理")
632
879
  ]);
633
880
  async function apply(ctx, config) {
881
+ const logger = ctx.logger("toram");
634
882
  ctx.model.extend("monster", {
635
883
  id: "integer",
636
884
  // 唯一标识
@@ -644,8 +892,10 @@ async function apply(ctx, config) {
644
892
  // 基础经验
645
893
  map: "string",
646
894
  // 所在地图
647
- element: "string"
895
+ element: "string",
648
896
  // 属性
897
+ update: "string"
898
+ // 更新人
649
899
  }, {
650
900
  primary: "id"
651
901
  });
@@ -656,12 +906,15 @@ async function apply(ctx, config) {
656
906
  // 名称
657
907
  dishes: "string",
658
908
  // 料理JSON
659
- path: "integer"
909
+ path: "integer",
660
910
  // 等级
911
+ qqOpenId: "string"
912
+ // QQ
661
913
  }, {
662
914
  primary: "id"
663
915
  });
664
916
  ctx.middleware(async (session, next) => {
917
+ logger.info(session.username);
665
918
  const message = session.event.message;
666
919
  let needHelp = false;
667
920
  for (const element of message.elements) {
@@ -675,12 +928,32 @@ async function apply(ctx, config) {
675
928
  ctx.command("account_qq").action(({ session }) => {
676
929
  return session.event.selfId;
677
930
  });
931
+ ctx.command("updateDatabase").action(async ({ session }) => {
932
+ await ctx.database.set("monster", {}, { update: "青灯百物语" });
933
+ const playerList = await ctx.database.get("player", {});
934
+ for (const player of playerList) {
935
+ const dishes = JSON.parse(player.dishes);
936
+ for (const dish of dishes) {
937
+ dish.update = "青灯百物语";
938
+ }
939
+ await ctx.database.set("player", { id: player.id }, { dishes: JSON.stringify(dishes) });
940
+ }
941
+ });
678
942
  ctx.command("料理 <料理种类> <料理等级>").action(async ({ session }, ...args) => {
679
943
  await useCommand("dishes", ctx, session, config, args);
680
944
  });
681
945
  ctx.command("升级 <等级数>").action(async ({ session }, ...args) => {
682
946
  await useCommand("levelUP", ctx, session, config, args);
683
947
  });
948
+ ctx.command("注册 <游戏内昵称>").action(async ({ session }, ...args) => {
949
+ await useCommand("register", ctx, session, config, args);
950
+ });
951
+ ctx.command("提交料理 <玩家名> <料理种类> <料理等级>").action(async ({ session }, ...args) => {
952
+ await useCommand("updateDishes", ctx, session, config, args);
953
+ });
954
+ ctx.command("提交头目 <头目名> <头目类型> <基础等级> <基础经验> <所在地图> <属性>").action(async ({ session }, ...args) => {
955
+ await useCommand("updateBoss", ctx, session, config, args);
956
+ });
684
957
  }
685
958
  __name(apply, "apply");
686
959
  // Annotate the CommonJS export names for ESM import in node:
@@ -0,0 +1,34 @@
1
+ export interface HandlerCode {
2
+ code: number;
3
+ data?: any;
4
+ }
5
+ export interface PlayerDishInfo {
6
+ name: string;
7
+ type: string;
8
+ level: number;
9
+ }
10
+ export interface DishesTypeNames {
11
+ [key: string]: string[];
12
+ }
13
+ export interface Dish {
14
+ type: string;
15
+ level: number;
16
+ update: string;
17
+ }
18
+ export interface MonsterData {
19
+ id: number;
20
+ type: number;
21
+ name: string;
22
+ baseLevel: number;
23
+ baseExp: number;
24
+ map: string;
25
+ element: string;
26
+ update: string;
27
+ }
28
+ export interface PlayerData {
29
+ id: number;
30
+ name: string;
31
+ dishes: string;
32
+ path: number;
33
+ qqOpenId: string;
34
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "koishi-plugin-toram",
3
3
  "description": "托拉姆物语小工具",
4
- "version": "1.1.0",
4
+ "version": "1.2.0",
5
5
  "contributors": [
6
6
  "青灯 <1874053520@qq.com>"
7
7
  ],