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 +27 -2
- package/package.json +7 -4
- package/src/index.ts +32 -18
- package/src/service.ts +17 -0
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# kokkoro-plugin-kfc
|
|
2
2
|
|
|
3
|
-
|
|
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
|
-
|
|
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.
|
|
4
|
-
"description": "
|
|
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":
|
|
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.
|
|
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
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
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
|
-
|
|
27
|
+
useCommand('/疯狂星期四', async context => {
|
|
28
|
+
if (shouldTrigger(context.content)) {
|
|
29
|
+
logger.debug('发送疯狂星期四请求', { method: 'GET', url: KFC_API });
|
|
14
30
|
|
|
15
|
-
|
|
16
|
-
throw new Error(`接口请求失败,状态码 ${response.status}`);
|
|
17
|
-
}
|
|
18
|
-
const { success, message, text } = <CrazyThursday>await response.json();
|
|
31
|
+
const result = await fetchCrazyThursday();
|
|
19
32
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
+
}
|