kokkoro-plugin-kfc 3.0.0 → 3.0.2

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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # kokkoro-plugin-kfc
2
2
 
3
- vivo 50
3
+ 肯德基网络梗,随机获取一条疯狂星期四文案。
4
4
 
5
5
  ## 安装
6
6
 
@@ -10,8 +10,33 @@ bun add kokkoro-plugin-kfc
10
10
 
11
11
  ## 指令
12
12
 
13
+ ```text
14
+ /疯狂星期四
15
+ ```
16
+
13
17
  发送「/疯狂星期四」,插件会随机返回一条疯狂星期四文案。
14
18
 
15
19
  ## 快捷方式
16
20
 
17
- 消息中出现「周四」「星期四」「木曜日」「肯德基」「KFC」「V我50」「微我五十」「vivo50」或「Thursday」等常见说法时,也会触发插件。
21
+ 消息中包含以下任意一类关键词时,插件也会随机返回一条疯狂星期四文案。
22
+
23
+ - 付款梗,例如「V我50」、「微我五十」或「vivo50」
24
+ - 肯德基,例如「肯德基」或「KFC」
25
+ - 星期四,例如「周四」、「星期四」、「木曜日」或「Thursday」
26
+
27
+ 北京时间每周四,消息中出现「麦当劳」、「金拱门」、「华莱士」、「汉堡王」、「德克士」或「塔斯汀」时,也会随机返回一条疯狂星期四文案。
28
+
29
+ > [!WARNING]
30
+ > 快捷方式会在整段消息中查找关键词,因此链接地址中包含 `v50` 或 `kfc` 时也可能触发插件。该问题将在后续版本中优化。
31
+
32
+ 群聊需要开启「获取群内全部消息」权限。
33
+
34
+ ## API
35
+
36
+ 其他插件可以从 `service` 入口导入 `fetchCrazyThursday()`。该函数返回疯狂星期四接口的完整响应:
37
+
38
+ ```typescript
39
+ import { fetchCrazyThursday } from 'kokkoro-plugin-kfc/service';
40
+
41
+ const result = await fetchCrazyThursday();
42
+ ```
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "kokkoro-plugin-kfc",
3
- "version": "3.0.0",
4
- "description": "vivo 50",
3
+ "version": "3.0.2",
4
+ "description": "肯德基网络梗,随机获取一条疯狂星期四文案。",
5
5
  "keywords": [
6
6
  "bot",
7
7
  "kokkoro",
@@ -17,12 +17,15 @@
17
17
  "license": "MIT",
18
18
  "author": "Yuki <admin@yuki.sh>",
19
19
  "type": "module",
20
- "exports": "./src/index.ts",
20
+ "exports": {
21
+ ".": "./src/index.ts",
22
+ "./service": "./src/service.ts"
23
+ },
21
24
  "files": [
22
25
  "src"
23
26
  ],
24
27
  "peerDependencies": {
25
- "@kokkoro/core": "^3.1.3",
28
+ "@kokkoro/core": "^3.1.4",
26
29
  "typescript": "^6.0.3"
27
30
  }
28
31
  }
package/src/index.ts CHANGED
@@ -1,25 +1,39 @@
1
- import { useCommand } from '@kokkoro/core';
1
+ import { useCommand, useLogger } from '@kokkoro/core';
2
2
 
3
- interface CrazyThursday {
4
- readonly success: boolean;
5
- readonly message: string;
6
- readonly text: string;
7
- }
3
+ import { fetchCrazyThursday, KFC_API } from './service';
4
+
5
+ const logger = useLogger();
6
+
7
+ const PAYMENT = /(?:vivo|[v微]\s*(?:我|me)?)\s*(?:50|五十)/i;
8
+ const KFC = /(?:肯德基|kfc)/i;
9
+ const THURSDAY = /(?:周四|星期四|木曜日|thursday)/i;
10
+ const BURGER_BRANDS = /(?:麦当劳|金拱门|华莱士|汉堡王|德克士|塔斯汀)/i;
11
+
12
+ const KEYWORDS = [PAYMENT, KFC, THURSDAY];
13
+ const SHORTCUT = new RegExp([...KEYWORDS, BURGER_BRANDS].map(pattern => pattern.source).join('|'), 'i');
14
+ const WEEKDAY_FORMAT = new Intl.DateTimeFormat('en-US', {
15
+ timeZone: 'Asia/Shanghai',
16
+ weekday: 'long',
17
+ });
8
18
 
9
- const KFC_API = new URL('https://kfc.yuki.sh');
19
+ function shouldTrigger(content: string) {
20
+ if (KEYWORDS.some(pattern => pattern.test(content))) {
21
+ return true;
22
+ }
23
+ return WEEKDAY_FORMAT.format(new Date()) === 'Thursday' && BURGER_BRANDS.test(content);
24
+ }
10
25
 
11
26
  export default () => {
12
- useCommand('/疯狂星期四', async () => {
13
- const response = await fetch(KFC_API);
27
+ useCommand('/疯狂星期四', async context => {
28
+ if (shouldTrigger(context.content)) {
29
+ logger.debug('发送疯狂星期四请求', { method: 'GET', url: KFC_API });
14
30
 
15
- if (!response.ok) {
16
- throw new Error(`接口请求失败,状态码 ${response.status}`);
17
- }
18
- const { success, message, text } = <CrazyThursday>await response.json();
31
+ const result = await fetchCrazyThursday();
19
32
 
20
- return success ? text : message;
21
- })
22
- .shortcut(/(?:vivo|[v微]\s*(?:我|me)?)\s*(?:50|五十)/i)
23
- .shortcut(/(?:肯德基|kfc)/i)
24
- .shortcut(/(?:周四|星期四|木曜日|thursday)/i);
33
+ logger.debug('收到疯狂星期四响应', result);
34
+ logger.info('已获取疯狂星期四文案');
35
+
36
+ return result.success ? result.text : result.message;
37
+ }
38
+ }).shortcut(SHORTCUT);
25
39
  };
package/src/service.ts ADDED
@@ -0,0 +1,17 @@
1
+ export interface CrazyThursday {
2
+ readonly success: boolean;
3
+ readonly message: string;
4
+ readonly text: string;
5
+ }
6
+
7
+ export const KFC_API = 'https://kfc.yuki.sh';
8
+
9
+ /** 请求随机的疯狂星期四文案,并返回完整的接口响应。 */
10
+ export async function fetchCrazyThursday(): Promise<CrazyThursday> {
11
+ const response = await fetch(KFC_API);
12
+
13
+ if (!response.ok) {
14
+ throw new Error(`接口请求失败,状态码 ${response.status}`);
15
+ }
16
+ return <CrazyThursday>await response.json();
17
+ }