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