11import { sendMessage , markAsRead , loadStart } from "./utils/eventRoutes" ;
22import { env } from "cloudflare:workers" ;
33import { version } from "../package.json" ;
4+ import type { webhook } from "@line/bot-sdk" ;
5+ import type { Message } from "./types" ;
46
5- export async function eventRouter ( event : any , channelAccessToken : string , ctx : ExecutionContext ) : Promise < any [ ] > {
7+ export async function eventRouter ( event : webhook . Event , channelAccessToken : string , ctx : ExecutionContext ) : Promise < Message [ ] > {
68 // Log
79 let eventType : string = event . type ;
810 try {
9- if ( [ "message" ] . includes ( event . type ) ) {
10- eventType = `${ event . type } (${ event . message ?. type } )` ;
11+ if ( event . type === "message" ) {
12+ const msgEvent = event as webhook . MessageEvent ;
13+ eventType = `${ event . type } (${ msgEvent . message ?. type } )` ;
1114 }
1215 } catch ( e ) {
1316 console . error ( "Failed to determine message event type" , { error : e } ) ;
@@ -17,16 +20,25 @@ export async function eventRouter(event: any, channelAccessToken: string, ctx: E
1720
1821 switch ( event . type ) {
1922 case "message" : {
20- ctx . waitUntil ( markAsRead ( channelAccessToken , event . message . markAsReadToken ) ) ;
23+ const msgEvent = event as webhook . MessageEvent ;
24+ if ( msgEvent . message . markAsReadToken ) {
25+ ctx . waitUntil ( markAsRead ( channelAccessToken , msgEvent . message . markAsReadToken ) ) ;
26+ }
27+
28+ const userId = msgEvent . source && typeof ( msgEvent . source as any ) . userId === "string" ? ( msgEvent . source as any ) . userId : undefined ;
2129
22- await Promise . race ( [
23- loadStart ( channelAccessToken , event . source . userId , 5 ) ,
24- new Promise ( ( resolve ) => setTimeout ( resolve , 50 ) ) , // 最多等 50ms
25- ] ) ;
30+ if ( userId ) {
31+ await Promise . race ( [
32+ loadStart ( channelAccessToken , userId , 5 ) ,
33+ new Promise ( ( resolve ) => setTimeout ( resolve , 50 ) ) , // 最多等 50ms
34+ ] ) ;
35+ } else {
36+ await new Promise ( ( resolve ) => setTimeout ( resolve , 50 ) ) ;
37+ }
2638
27- switch ( event . message . type ) {
39+ switch ( msgEvent . message . type ) {
2840 case "text" :
29- switch ( event . message . text ) {
41+ switch ( msgEvent . message . text ) {
3042 case "/version" :
3143 const { id : versionId , tag : versionTag , timestamp : versionTimestamp } = env . CF_VERSION_METADATA ;
3244
0 commit comments