Commit d175b3f1 authored by nanahira's avatar nanahira

add rc

parent 9524ea1e
Pipeline #3110 passed with stages
in 4 minutes and 13 seconds
...@@ -4,6 +4,10 @@ export const DefaultRollText = ...@@ -4,6 +4,10 @@ export const DefaultRollText =
'{{&name}} {{#reason}}因为 {{&reason}} 而{{/reason}}投掷了 {{count}} 个 {{size}} 面骰子,投掷出了 {{result}} 点。{{#formula}}\n{{&formula}}{{/formula}}'; '{{&name}} {{#reason}}因为 {{&reason}} 而{{/reason}}投掷了 {{count}} 个 {{size}} 面骰子,投掷出了 {{result}} 点。{{#formula}}\n{{&formula}}{{/formula}}';
defaultTemplateMap.set('roll', DefaultRollText); defaultTemplateMap.set('roll', DefaultRollText);
export const DefaultRcText =
'{{&name}} {{#reason}}因为 {{&reason}} 而{{/reason}}检点的结果: {{&maximumValue}}/100={{&result}} {{#success}}成功。恭喜!{{/success}}{{^success}}失败。差一点点了,再接再厉!{{/success}}';
defaultTemplateMap.set('rc', DefaultRcText);
export const TooMuchCountText = export const TooMuchCountText =
'{{&name}} {{#reason}}因为 {{&reason}} 而{{/reason}}投掷了 {{count}} 个 {{size}} 面骰子。\n骰子滚落了一地,找不到了。'; '{{&name}} {{#reason}}因为 {{&reason}} 而{{/reason}}投掷了 {{count}} 个 {{size}} 面骰子。\n骰子滚落了一地,找不到了。';
defaultTemplateMap.set('too_much_count', TooMuchCountText); defaultTemplateMap.set('too_much_count', TooMuchCountText);
......
...@@ -34,6 +34,11 @@ export interface RollResult extends CommonResult { ...@@ -34,6 +34,11 @@ export interface RollResult extends CommonResult {
results?: number[]; results?: number[];
} }
export interface RcResult extends CommonResult {
maximumValue: number;
success?: boolean;
}
export interface KoishiSessionLike { export interface KoishiSessionLike {
userId?: string; userId?: string;
username?: string; username?: string;
...@@ -221,6 +226,31 @@ export class AppService { ...@@ -221,6 +226,31 @@ export class AppService {
AppService.rollProcess(rollResult); AppService.rollProcess(rollResult);
return await this.renderTemplate('roll', rollResult, userData.groupId); return await this.renderTemplate('roll', rollResult, userData.groupId);
} }
async rcCheck(
userData: KoishiSessionLike,
maximumValue: number,
reason: string,
): Promise<string> {
const { user, group, profile, banReason } = await this.getDatabaseUserData(
userData,
);
if (banReason) {
return await this.renderTemplate('bad_user', { reason: banReason });
}
if (!maximumValue || maximumValue < 0 || maximumValue > 100) {
return await this.renderTemplate('bad_params', {}, userData.groupId);
}
const result = Math.floor(Math.random() * 101);
const rcResult: RcResult = {
name: profile ? profile.getDisplayUsername(userData.username) : user.name,
reason,
maximumValue,
result,
success: result <= maximumValue,
};
return await this.renderTemplate('rc', rcResult, userData.groupId);
}
async getGroupTemplate(userData: KoishiSessionLike, key: string) { async getGroupTemplate(userData: KoishiSessionLike, key: string) {
const { user, group, profile, banReason } = await this.getDatabaseUserData( const { user, group, profile, banReason } = await this.getDatabaseUserData(
userData, userData,
......
...@@ -79,7 +79,7 @@ export class BotController { ...@@ -79,7 +79,7 @@ export class BotController {
.option('count', '-c <count:posint> 骰子数量', { fallback: 1 }) .option('count', '-c <count:posint> 骰子数量', { fallback: 1 })
.option('size', '-s <count:posint> 骰子面数', { fallback: 6 }) .option('size', '-s <count:posint> 骰子面数', { fallback: 6 })
.option('reason', '-r <reason:text> 骰子说明') .option('reason', '-r <reason:text> 骰子说明')
.alias('rd', 'roll') .alias('rd', 'roll', 'r')
.usage('也支持 .rd<size> 和 .r<count>d<size> [reason] 这样的传统语法。') .usage('也支持 .rd<size> 和 .r<count>d<size> [reason] 这样的传统语法。')
.example('.rolldice -c 2 -s 6 -r "行动判定"') .example('.rolldice -c 2 -s 6 -r "行动判定"')
.action(async (argv, args) => { .action(async (argv, args) => {
...@@ -93,6 +93,15 @@ export class BotController { ...@@ -93,6 +93,15 @@ export class BotController {
}; };
return await this.appService.rollDice(rollResult, session); return await this.appService.rollDice(rollResult, session);
}); });
globalCtx
.command('rc <maximum:posint> [reason:text]', '检点')
.alias('ra')
.usage('进行一次检点。结果小于预设数值则成功。')
.example('.rc 50 占卜')
.action(async (argv, maximum, reason) => {
const session = argv.session;
return await this.appService.rcCheck(session, maximum, reason);
});
const groupCommand = groupCtx.command('group', '群内指令'); const groupCommand = groupCtx.command('group', '群内指令');
groupCtx groupCtx
.command('dismiss', '退群,请使用这个命令,而不是踢我出去。') .command('dismiss', '退群,请使用这个命令,而不是踢我出去。')
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment