diff --git a/packages/koishi-core/src/app.ts b/packages/koishi-core/src/app.ts index 9df952f29a..7e068cbf34 100644 --- a/packages/koishi-core/src/app.ts +++ b/packages/koishi-core/src/app.ts @@ -1,9 +1,9 @@ +import { simplify, defineProperty, Time, Observed, coerce, escapeRegExp, makeArray, noop } from 'koishi-utils' import { Command } from './command' import { Context, Middleware, NextFunction } from './context' import { Group, User, Database } from './database' import { BotOptions, Server } from './server' import { Session } from './session' -import { simplify, defineProperty, Time, Observed, coerce, escapeRegExp, makeArray } from 'koishi-utils' import help from './plugins/help' import shortcut from './plugins/shortcut' import suggest from './plugins/suggest' @@ -145,8 +145,12 @@ export class App extends Context { let capture: RegExpMatchArray, atSelf = false // eslint-disable-next-line no-cond-assign if (capture = message.match(/^\[CQ:reply,id=(-?\d+)\]\s*/)) { - session.$reply = +capture[1] + session.$reply = await session.$bot.getMsg(+capture[1]).catch(noop) message = message.slice(capture[0].length) + if (session.$reply) { + const prefix = `[CQ:at,qq=${session.$reply.sender.userId}]` + message = message.slice(prefix.length).trimStart() + } } // strip prefix diff --git a/packages/koishi-core/src/session.ts b/packages/koishi-core/src/session.ts index 78e5b07138..9c714e5d5c 100644 --- a/packages/koishi-core/src/session.ts +++ b/packages/koishi-core/src/session.ts @@ -85,7 +85,7 @@ export class Session { const { $reply, $parsed } = session - const userId = interactions[$reply] - if (!$parsed || !userId) return next() + if (!$parsed || !$reply) return next() + const userId = interactions[$reply.messageId] + if (!userId) return next() return session.$bot.sendPrivateMsg(userId, $parsed) }) diff --git a/packages/plugin-github/src/index.ts b/packages/plugin-github/src/index.ts index d24450f20e..87c8d54ee5 100644 --- a/packages/plugin-github/src/index.ts +++ b/packages/plugin-github/src/index.ts @@ -138,7 +138,7 @@ export function apply(ctx: Context, config: Config = {}) { ctx.on('before-attach-user', (session, fields) => { if (!session.$reply) return - if (history[int32ToHex6(session.$reply)]) { + if (history[int32ToHex6(session.$reply.messageId)]) { fields.add('ghAccessToken') fields.add('ghRefreshToken') } @@ -147,7 +147,7 @@ export function apply(ctx: Context, config: Config = {}) { ctx.middleware((session, next) => { if (!session.$reply) return next() const body = session.$parsed - const payloads = history[int32ToHex6(session.$reply)] + const payloads = history[int32ToHex6(session.$reply.messageId)] if (!body || !payloads) return next() let name: string, message: string