koishi-plugin-common
Advanced tools
Comparing version 1.0.4 to 1.0.5
@@ -7,7 +7,7 @@ "use strict"; | ||
const groupActionMap = {}; | ||
function registerUserAction(name, callback, fields = []) { | ||
function registerUserAction(name, callback, fields) { | ||
userActionMap[koishi_utils_1.paramCase(name)] = { callback, fields }; | ||
} | ||
exports.registerUserAction = registerUserAction; | ||
function registerGroupAction(name, callback, fields = []) { | ||
function registerGroupAction(name, callback, fields) { | ||
groupActionMap[koishi_utils_1.paramCase(name)] = { callback, fields }; | ||
@@ -30,3 +30,3 @@ } | ||
} | ||
}); | ||
}, ['authority']); | ||
registerUserAction('setFlag', async (meta, user, ...flags) => { | ||
@@ -43,6 +43,6 @@ if (!flags.length) | ||
return meta.$send('用户信息已修改。'); | ||
}); | ||
}, ['flag']); | ||
registerUserAction('unsetFlag', async (meta, user, ...flags) => { | ||
if (!flags.length) | ||
return meta.$send(`可用的 flag 有:${koishi_core_1.userFlags.join(', ')}。`); | ||
return meta.$send(`可用的标记有 ${koishi_core_1.userFlags.join(', ')}。`); | ||
const notFound = koishi_utils_1.difference(flags, koishi_core_1.userFlags); | ||
@@ -56,3 +56,3 @@ if (notFound.length) | ||
return meta.$send('用户信息已修改。'); | ||
}); | ||
}, ['flag']); | ||
registerUserAction('clearUsage', async (meta, user, ...commands) => { | ||
@@ -69,3 +69,3 @@ if (commands.length) { | ||
return meta.$send('用户信息已修改。'); | ||
}); | ||
}, ['usage']); | ||
registerUserAction('showUsage', async (meta, user, ...commands) => { | ||
@@ -81,3 +81,27 @@ const { usage } = user; | ||
].join('\n')); | ||
}); | ||
}, ['usage']); | ||
registerGroupAction('setFlag', async (meta, group, ...flags) => { | ||
if (!flags.length) | ||
return meta.$send(`可用的标记有 ${koishi_core_1.groupFlags.join(', ')}。`); | ||
const notFound = koishi_utils_1.difference(flags, koishi_core_1.groupFlags); | ||
if (notFound.length) | ||
return meta.$send(`未找到标记 ${notFound.join(', ')}。`); | ||
for (const name of flags) { | ||
group.flag |= koishi_core_1.GroupFlag[name]; | ||
} | ||
await group._update(); | ||
return meta.$send('群信息已修改。'); | ||
}, ['flag']); | ||
registerGroupAction('unsetFlag', async (meta, group, ...flags) => { | ||
if (!flags.length) | ||
return meta.$send(`可用的标记有 ${koishi_core_1.groupFlags.join(', ')}。`); | ||
const notFound = koishi_utils_1.difference(flags, koishi_core_1.groupFlags); | ||
if (notFound.length) | ||
return meta.$send(`未找到标记 ${notFound.join(', ')}。`); | ||
for (const name of flags) { | ||
group.flag &= ~koishi_core_1.GroupFlag[name]; | ||
} | ||
await group._update(); | ||
return meta.$send('群信息已修改。'); | ||
}, ['flag']); | ||
function apply(ctx, options) { | ||
@@ -92,10 +116,8 @@ const userActions = Object.keys(userActionMap).map(koishi_utils_1.paramCase).join(', '); | ||
const isGroup = 'g' in options || 'G' in options; | ||
if ('user' in options && isGroup) { | ||
if ('user' in options && isGroup) | ||
return meta.$send('不能同时目标为指定用户和群。'); | ||
} | ||
const actionList = isGroup ? groupActions : userActions; | ||
const actionMap = isGroup ? groupActionMap : userActionMap; | ||
if (!name) { | ||
if (!name) | ||
return meta.$send(`当前的可用指令有:${actionList}。`); | ||
} | ||
const action = actionMap[koishi_utils_1.paramCase(name)]; | ||
@@ -105,8 +127,9 @@ if (!action) | ||
if (isGroup) { | ||
const fields = action.fields ? action.fields.slice() : koishi_core_1.groupFields; | ||
let group; | ||
if (options.thisGroup) { | ||
group = await ctx.database.observeGroup(meta.$group); | ||
group = await ctx.database.observeGroup(meta.$group, fields); | ||
} | ||
else if (typeof options.group === 'number') { | ||
group = await ctx.database.observeGroup(options.group); | ||
else if (koishi_utils_1.isInteger(options.group) && options.group > 0) { | ||
group = await ctx.database.observeGroup(options.group, fields); | ||
} | ||
@@ -118,3 +141,3 @@ if (!group) | ||
else { | ||
const fields = action.fields.slice(); | ||
const fields = action.fields ? action.fields.slice() : koishi_core_1.userFields; | ||
if (!fields.includes('authority')) | ||
@@ -129,3 +152,3 @@ fields.push('authority'); | ||
if (!user) | ||
return meta.$send('未找到用户。'); | ||
return meta.$send('未找到指定的用户。'); | ||
if (qq !== meta.$user.id && meta.$user.authority <= user.authority) | ||
@@ -132,0 +155,0 @@ return meta.$send('权限不足。'); |
@@ -56,3 +56,2 @@ "use strict"; | ||
app.receiver.once('ready', async () => { | ||
logger.info('foo bar'); | ||
await Promise.all([ | ||
@@ -59,0 +58,0 @@ ...Object.keys(authorizeUserInverseMap).map(key => updateAuthorizeInfo(+key, authorizeUserInverseMap[+key])), |
@@ -5,2 +5,3 @@ "use strict"; | ||
ctx.command('help [command]', '显示帮助信息', { authority: 0, ...options }) | ||
.userFields(['authority', 'usage']) | ||
.shortcut('帮助', { fuzzy: true }) | ||
@@ -7,0 +8,0 @@ .shortcut('全局指令', { options: { shortcut: true } }) |
@@ -14,3 +14,3 @@ import { Context, CommandConfig } from 'koishi-core'; | ||
import repeater, { RepeaterOptions } from './repeater'; | ||
import requestHandler, { HandlerConfig } from './requestHandler'; | ||
import requestHandler, { HandlerConfig } from './request-handler'; | ||
import respondent, { Respondent } from './respondent'; | ||
@@ -17,0 +17,0 @@ import welcome, { WelcomeMessage } from './welcome'; |
@@ -33,4 +33,4 @@ "use strict"; | ||
exports.repeater = repeater_1.default; | ||
const requestHandler_1 = __importDefault(require("./requestHandler")); | ||
exports.requestHandler = requestHandler_1.default; | ||
const request_handler_1 = __importDefault(require("./request-handler")); | ||
exports.requestHandler = request_handler_1.default; | ||
const respondent_1 = __importDefault(require("./respondent")); | ||
@@ -52,3 +52,3 @@ exports.respondent = respondent_1.default; | ||
.plugin(repeater_1.default, options.repeater) | ||
.plugin(requestHandler_1.default, options) | ||
.plugin(request_handler_1.default, options) | ||
.plugin(respondent_1.default, options.respondent) | ||
@@ -55,0 +55,0 @@ .plugin(welcome_1.default, options.welcome); |
{ | ||
"name": "koishi-plugin-common", | ||
"description": "Common plugins for Koishi", | ||
"version": "1.0.4", | ||
"version": "1.0.5", | ||
"main": "dist/index.js", | ||
@@ -31,8 +31,8 @@ "typings": "dist/index.d.ts", | ||
"devDependencies": { | ||
"koishi-test-utils": "^1.1.0" | ||
"koishi-test-utils": "^1.2.1" | ||
}, | ||
"dependencies": { | ||
"koishi-core": "^1.3.0", | ||
"koishi-core": "^1.3.1", | ||
"koishi-utils": "^1.0.2" | ||
} | ||
} |
@@ -1,2 +0,2 @@ | ||
import { Context, User, userFlags, UserFlag, Meta, UserField, getTargetId, CommandConfig, GroupField, UserData, GroupData } from 'koishi-core' | ||
import { Context, User, userFlags, UserFlag, Meta, UserField, getTargetId, CommandConfig, GroupField, UserData, GroupData, GroupFlag, groupFlags, Group, userFields, groupFields } from 'koishi-core' | ||
import { isInteger, difference, Observed, paramCase } from 'koishi-utils' | ||
@@ -20,7 +20,7 @@ | ||
export function registerUserAction <K extends UserField> (name: string, callback: ActionCallback<UserData, K>, fields: K[] = []) { | ||
export function registerUserAction <K extends UserField> (name: string, callback: ActionCallback<UserData, K>, fields?: K[]) { | ||
userActionMap[paramCase(name)] = { callback, fields } | ||
} | ||
export function registerGroupAction <K extends GroupField> (name: string, callback: ActionCallback<GroupData, K>, fields: K[] = []) { | ||
export function registerGroupAction <K extends GroupField> (name: string, callback: ActionCallback<GroupData, K>, fields?: K[]) { | ||
groupActionMap[paramCase(name)] = { callback, fields } | ||
@@ -40,3 +40,3 @@ } | ||
} | ||
}) | ||
}, ['authority']) | ||
@@ -52,6 +52,6 @@ registerUserAction('setFlag', async (meta, user, ...flags) => { | ||
return meta.$send('用户信息已修改。') | ||
}) | ||
}, ['flag']) | ||
registerUserAction('unsetFlag', async (meta, user, ...flags) => { | ||
if (!flags.length) return meta.$send(`可用的 flag 有:${userFlags.join(', ')}。`) | ||
if (!flags.length) return meta.$send(`可用的标记有 ${userFlags.join(', ')}。`) | ||
const notFound = difference(flags, userFlags) | ||
@@ -64,3 +64,3 @@ if (notFound.length) return meta.$send(`未找到标记 ${notFound.join(', ')}。`) | ||
return meta.$send('用户信息已修改。') | ||
}) | ||
}, ['flag']) | ||
@@ -77,3 +77,3 @@ registerUserAction('clearUsage', async (meta, user, ...commands) => { | ||
return meta.$send('用户信息已修改。') | ||
}) | ||
}, ['usage']) | ||
@@ -88,4 +88,26 @@ registerUserAction('showUsage', async (meta, user, ...commands) => { | ||
].join('\n')) | ||
}) | ||
}, ['usage']) | ||
registerGroupAction('setFlag', async (meta, group, ...flags) => { | ||
if (!flags.length) return meta.$send(`可用的标记有 ${groupFlags.join(', ')}。`) | ||
const notFound = difference(flags, groupFlags) | ||
if (notFound.length) return meta.$send(`未找到标记 ${notFound.join(', ')}。`) | ||
for (const name of flags) { | ||
group.flag |= GroupFlag[name] | ||
} | ||
await group._update() | ||
return meta.$send('群信息已修改。') | ||
}, ['flag']) | ||
registerGroupAction('unsetFlag', async (meta, group, ...flags) => { | ||
if (!flags.length) return meta.$send(`可用的标记有 ${groupFlags.join(', ')}。`) | ||
const notFound = difference(flags, groupFlags) | ||
if (notFound.length) return meta.$send(`未找到标记 ${notFound.join(', ')}。`) | ||
for (const name of flags) { | ||
group.flag &= ~GroupFlag[name] | ||
} | ||
await group._update() | ||
return meta.$send('群信息已修改。') | ||
}, ['flag']) | ||
export default function apply (ctx: Context, options: CommandConfig) { | ||
@@ -101,10 +123,8 @@ const userActions = Object.keys(userActionMap).map(paramCase).join(', ') | ||
const isGroup = 'g' in options || 'G' in options | ||
if ('user' in options && isGroup) { | ||
return meta.$send('不能同时目标为指定用户和群。') | ||
} | ||
if ('user' in options && isGroup) return meta.$send('不能同时目标为指定用户和群。') | ||
const actionList = isGroup ? groupActions : userActions | ||
const actionMap = isGroup ? groupActionMap : userActionMap | ||
if (!name) { | ||
return meta.$send(`当前的可用指令有:${actionList}。`) | ||
} | ||
if (!name) return meta.$send(`当前的可用指令有:${actionList}。`) | ||
const action = actionMap[paramCase(name)] | ||
@@ -114,7 +134,8 @@ if (!action) return meta.$send(`指令未找到。当前的可用指令有:${actionList}。`) | ||
if (isGroup) { | ||
let group: Observed<GroupData> | ||
const fields = action.fields ? action.fields.slice() as GroupField[] : groupFields | ||
let group: Group | ||
if (options.thisGroup) { | ||
group = await ctx.database.observeGroup(meta.$group) | ||
} else if (typeof options.group === 'number') { | ||
group = await ctx.database.observeGroup(options.group) | ||
group = await ctx.database.observeGroup(meta.$group, fields) | ||
} else if (isInteger(options.group) && options.group > 0) { | ||
group = await ctx.database.observeGroup(options.group, fields) | ||
} | ||
@@ -124,3 +145,3 @@ if (!group) return meta.$send('未找到指定的群。') | ||
} else { | ||
const fields = action.fields.slice() as UserField[] | ||
const fields = action.fields ? action.fields.slice() as UserField[] : userFields | ||
if (!fields.includes('authority')) fields.push('authority') | ||
@@ -132,3 +153,3 @@ let user: User | ||
user = await ctx.database.observeUser(qq, -1, fields) | ||
if (!user) return meta.$send('未找到用户。') | ||
if (!user) return meta.$send('未找到指定的用户。') | ||
if (qq !== meta.$user.id && meta.$user.authority <= user.authority) return meta.$send('权限不足。') | ||
@@ -135,0 +156,0 @@ } else { |
@@ -69,3 +69,2 @@ import { UserData, Database, Context, GroupRole } from 'koishi-core' | ||
app.receiver.once('ready', async () => { | ||
logger.info('foo bar') | ||
await Promise.all([ | ||
@@ -72,0 +71,0 @@ ...Object.keys(authorizeUserInverseMap).map(key => updateAuthorizeInfo(+key, authorizeUserInverseMap[+key])), |
@@ -5,2 +5,3 @@ import { Context, Command, UserData, CommandConfig, MessageMeta } from 'koishi-core' | ||
ctx.command('help [command]', '显示帮助信息', { authority: 0, ...options }) | ||
.userFields(['authority', 'usage']) | ||
.shortcut('帮助', { fuzzy: true }) | ||
@@ -7,0 +8,0 @@ .shortcut('全局指令', { options: { shortcut: true } }) |
@@ -14,3 +14,3 @@ import { Context, CommandConfig } from 'koishi-core' | ||
import repeater, { RepeaterOptions } from './repeater' | ||
import requestHandler, { HandlerConfig } from './requestHandler' | ||
import requestHandler, { HandlerConfig } from './request-handler' | ||
import respondent, { Respondent } from './respondent' | ||
@@ -17,0 +17,0 @@ import welcome, { WelcomeMessage } from './welcome' |
@@ -1,2 +0,2 @@ | ||
import { MockedApp, createMeta } from 'koishi-test-utils' | ||
import { MockedApp } from 'koishi-test-utils' | ||
import echo from '../src/echo' | ||
@@ -10,14 +10,14 @@ | ||
test('basic support', async () => { | ||
await app.receive(createMeta('message', 'private', 'friend', { message: 'echo foo', userId: 123 })) | ||
await app.receiveMessage('user', 'echo foo', 123) | ||
app.shouldHaveLastRequest('send_private_msg', { message: 'foo', userId: 123 }) | ||
await app.receive(createMeta('message', 'group', 'normal', { message: 'echo foo', groupId: 123 })) | ||
app.shouldHaveLastRequest('send_group_msg', { message: 'foo', groupId: 123 }) | ||
await app.receive(createMeta('message', 'discuss', null, { message: 'echo foo', discussId: 123 })) | ||
app.shouldHaveLastRequest('send_discuss_msg', { message: 'foo', discussId: 123 }) | ||
await app.receiveMessage('group', 'echo foo', 123, 456) | ||
app.shouldHaveLastRequest('send_group_msg', { message: 'foo', groupId: 456 }) | ||
await app.receiveMessage('discuss', 'echo foo', 123, 789) | ||
app.shouldHaveLastRequest('send_discuss_msg', { message: 'foo', discussId: 789 }) | ||
}) | ||
test('send to other contexts', async () => { | ||
await app.receive(createMeta('message', 'private', 'friend', { message: 'echo -u 456 foo', userId: 123 })) | ||
await app.receiveMessage('user', 'echo -u 456 foo', 123) | ||
app.shouldHaveLastRequest('send_private_msg', { message: 'foo', userId: 456 }) | ||
await app.receive(createMeta('message', 'private', 'friend', { message: 'echo -g 456 -d 789 foo', userId: 123 })) | ||
await app.receiveMessage('user', 'echo -g 456 -d 789 foo', 123) | ||
app.shouldHaveLastRequests([ | ||
@@ -24,0 +24,0 @@ ['send_group_msg', { message: 'foo', groupId: 456 }], |
Sorry, the diff of this file is not supported yet
252026
60
2336
Updatedkoishi-core@^1.3.1