koishi-plugin-common
Advanced tools
Comparing version 3.0.0-beta.9 to 3.0.0-beta.10
@@ -17,5 +17,2 @@ "use strict"; | ||
exports.GroupAction = new Action(); | ||
function extractEnumKeys(data) { | ||
return Object.values(data).filter(value => typeof value === 'string'); | ||
} | ||
exports.UserAction.add('setAuth', async (session, user, value) => { | ||
@@ -37,3 +34,3 @@ const authority = Number(value); | ||
exports.UserAction.add('setFlag', async (session, user, ...flags) => { | ||
const userFlags = extractEnumKeys(koishi_core_1.User.Flag); | ||
const userFlags = koishi_utils_1.enumKeys(koishi_core_1.User.Flag); | ||
if (!flags.length) | ||
@@ -51,3 +48,3 @@ return `可用的标记有 ${userFlags.join(', ')}。`; | ||
exports.UserAction.add('unsetFlag', async (session, user, ...flags) => { | ||
const userFlags = extractEnumKeys(koishi_core_1.User.Flag); | ||
const userFlags = koishi_utils_1.enumKeys(koishi_core_1.User.Flag); | ||
if (!flags.length) | ||
@@ -107,3 +104,3 @@ return `可用的标记有 ${userFlags.join(', ')}。`; | ||
exports.GroupAction.add('setFlag', async (session, group, ...flags) => { | ||
const groupFlags = extractEnumKeys(koishi_core_1.Group.Flag); | ||
const groupFlags = koishi_utils_1.enumKeys(koishi_core_1.Group.Flag); | ||
if (!flags.length) | ||
@@ -121,3 +118,3 @@ return `可用的标记有 ${groupFlags.join(', ')}。`; | ||
exports.GroupAction.add('unsetFlag', async (session, group, ...flags) => { | ||
const groupFlags = extractEnumKeys(koishi_core_1.Group.Flag); | ||
const groupFlags = koishi_utils_1.enumKeys(koishi_core_1.Group.Flag); | ||
if (!flags.length) | ||
@@ -150,3 +147,3 @@ return `可用的标记有 ${groupFlags.join(', ')}。`; | ||
.action(async ({ session, options }, name, ...args) => { | ||
const isGroup = 'g' in options || 'G' in options; | ||
const isGroup = 'group' in options || 'thisGroup' in options; | ||
if ('user' in options && isGroup) | ||
@@ -153,0 +150,0 @@ return '不能同时目标为指定用户和群。'; |
@@ -22,3 +22,2 @@ "use strict"; | ||
const { blackList = [], respondents = [], throttle, welcome = defaultMessage } = options; | ||
// eslint-disable-next-line @typescript-eslint/no-unused-expressions | ||
blackList.length && ctx.prependMiddleware((session, next) => { | ||
@@ -31,3 +30,2 @@ for (const word of blackList) { | ||
}); | ||
// eslint-disable-next-line @typescript-eslint/no-unused-expressions | ||
respondents.length && ctx.middleware((session, next) => { | ||
@@ -34,0 +32,0 @@ const message = koishi_utils_1.simplify(session.message); |
@@ -11,3 +11,2 @@ import { Context, Session } from 'koishi-core'; | ||
times: number; | ||
assignee: number; | ||
users: Record<number, number>; | ||
@@ -18,6 +17,5 @@ } | ||
onRepeat?: RepeatHandler; | ||
onDuplicateRepeat?: RepeatHandler; | ||
onInterruptRepeat?: RepeatHandler; | ||
onInterrupt?: RepeatHandler; | ||
} | ||
export default function apply(ctx: Context, options?: RepeaterOptions): void; | ||
export {}; |
@@ -6,3 +6,3 @@ "use strict"; | ||
const states = {}; | ||
function getState(groupId, assignee) { | ||
function getState(groupId) { | ||
return states[groupId] || (states[groupId] = { | ||
@@ -12,8 +12,7 @@ message: '', | ||
times: 0, | ||
assignee, | ||
users: {}, | ||
}); | ||
} | ||
ctx.on('before-send', ({ groupId, message, selfId }) => { | ||
const state = getState(groupId, selfId); | ||
ctx.on('before-send', ({ groupId, message }) => { | ||
const state = getState(groupId); | ||
state.repeated = true; | ||
@@ -29,8 +28,8 @@ if (state.message === message) { | ||
}); | ||
ctx.prependMiddleware((session, next) => { | ||
const { message, groupId, userId, selfId } = session; | ||
ctx.middleware((session, next) => { | ||
const { message, groupId, userId } = session; | ||
// never respond to messages from self | ||
if (ctx.app.bots[userId]) | ||
if (ctx.bots[userId]) | ||
return; | ||
const state = getState(groupId, selfId); | ||
const state = getState(groupId); | ||
const check = (handle) => { | ||
@@ -43,25 +42,18 @@ const text = handle === null || handle === void 0 ? void 0 : handle(state, message, userId); | ||
}; | ||
// duplicate repeating & normal repeating | ||
if (message === state.message) { | ||
// avoid duplicate counting | ||
if (state.assignee === selfId) { | ||
state.times += 1; | ||
state.users[userId] = (state.users[userId] || 0) + 1; | ||
} | ||
// duplicate repeating & normal repeating | ||
return state.users[userId] > 1 && check(options.onDuplicateRepeat) | ||
|| state.times > 1 && check(options.onRepeat) | ||
|| next(); | ||
state.times += 1; | ||
state.users[userId] = (state.users[userId] || 0) + 1; | ||
return check(options.onRepeat) || next(); | ||
} | ||
else { | ||
// interrupt repeating | ||
const result = check(options.onInterruptRepeat); | ||
if (result) | ||
return result; | ||
// unrepeated message | ||
state.message = message; | ||
state.repeated = false; | ||
state.times = 1; | ||
state.users = { [userId]: 1 }; | ||
return next(); | ||
} | ||
// interrupt repeating | ||
const result = check(options.onInterrupt); | ||
if (result) | ||
return result; | ||
// unrepeated message | ||
state.message = message; | ||
state.repeated = false; | ||
state.times = 1; | ||
state.users = { [userId]: 1 }; | ||
return next(); | ||
}); | ||
@@ -68,0 +60,0 @@ } |
{ | ||
"name": "koishi-plugin-common", | ||
"description": "Common plugins for Koishi", | ||
"version": "3.0.0-beta.9", | ||
"version": "3.0.0-beta.10", | ||
"main": "dist/index.js", | ||
@@ -34,9 +34,9 @@ "typings": "dist/index.d.ts", | ||
"devDependencies": { | ||
"koishi-test-utils": "^4.0.0-beta.5" | ||
"koishi-test-utils": "^4.0.0-beta.6" | ||
}, | ||
"dependencies": { | ||
"axios": "^0.19.2", | ||
"koishi-core": "^2.0.0-beta.12", | ||
"koishi-core": "^2.0.0-beta.14", | ||
"koishi-utils": "^3.0.1" | ||
} | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
59415
762
Updatedkoishi-core@^2.0.0-beta.14