Commit 747d0148 authored by nanahira's avatar nanahira

add wecom/message for not-supported custom messages

parent 71d0c6c9
......@@ -3,6 +3,7 @@ import { AdapterConfig, dispatchSession } from './utils';
import { BotConfig, WeComBot } from './bot';
import { decrypt, getSignature } from '@wecom/crypto';
import {
WecomEventBody,
WecomEventResponse,
WecomReceiveMessageDto,
WecomRegisterDto,
......@@ -67,7 +68,7 @@ export default class HttpServer extends Adapter<BotConfig, AdapterConfig> {
const query = ctx.request.query as unknown as WecomReceiveMessageDto;
const rawData = (await rawBody(ctx.req)).toString('utf8').trim();
const { xml: parsedData } = (await this.xmlParser.parse(rawData)) as {
xml: WecomResponse<any>;
xml: WecomEventResponse;
};
if (!parsedData?.Encrypt) {
logger.warn('Invalid xml: %s', rawData);
......@@ -103,7 +104,7 @@ export default class HttpServer extends Adapter<BotConfig, AdapterConfig> {
return;
}
parsedData.body = this.xmlParser.parse(parsedData.data.message)
.xml as WecomEventResponse;
.xml as WecomEventBody;
if (!parsedData.body) {
logger.warn(
'Invalid decrypted xml message: %s',
......
// import 'source-map-support/register';
import { WecomEventResponse } from './def';
import { WecomEventBody, WecomEventResponse } from './def';
import { Adapter, Session } from 'koishi';
import HttpServer from './http';
import { BotConfig, WeComBot } from './bot';
......@@ -7,10 +7,11 @@ import { AdapterConfig } from './utils';
declare module 'koishi' {
interface Session {
wecom?: WecomEventResponse;
wecom?: WecomEventBody;
}
interface EventMap {
'wecom/event'(session: Session): void;
'wecom/message'(session: Session): void;
}
}
......
......@@ -42,8 +42,9 @@ export function adaptSession(bot: WeComBot, input: WecomEventResponse) {
}
const session: Partial<Session> = {
selfId: bot.selfId,
targetId: body.ToUserName,
messageId: body.MsgId?.toString(),
wecom: input,
wecom: body,
userId: body.FromUserName,
channelId: body.FromUserName,
timestamp: body.CreateTime,
......@@ -51,7 +52,7 @@ export function adaptSession(bot: WeComBot, input: WecomEventResponse) {
if (body.MsgType === 'event') {
session.type = 'wecom/event';
session.subtype = body.Event;
} else {
} else if (body.MsgType === 'text' || body.MsgType === 'image') {
session.type = 'message';
session.subtype = 'private';
session.author = {
......@@ -68,17 +69,18 @@ export function adaptSession(bot: WeComBot, input: WecomEventResponse) {
url: imageBody.PicUrl,
});
break;
default:
return;
}
} else {
session.type = 'wecom/message';
session.subtype = body.MsgType;
}
return session;
}
export function dispatchSession(bot: WeComBot, message: WecomResponse<any>) {
export function dispatchSession(bot: WeComBot, message: WecomEventResponse) {
const payload = adaptSession(bot, message);
if (!payload) return;
const session = new Session(bot, payload);
session.wecom = message;
session.wecom = message.body;
bot.adapter.dispatch(session);
}
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