@@ -63,6 +63,10 @@ function toDetail(error: unknown): string {
6363 return error instanceof Error ? error . message : String ( error ) ;
6464}
6565
66+ function createWebsocketToken ( ) : string {
67+ return randomBytes ( 24 ) . toString ( "base64url" ) . slice ( 0 , 32 ) ;
68+ }
69+
6670async function runWithoutAsar < T > ( operation : ( ) => Promise < T > ) : Promise < T > {
6771 const electronProcess = process as NodeJS . Process & { noAsar ?: boolean } ;
6872 const previousNoAsar = electronProcess . noAsar ;
@@ -126,7 +130,7 @@ export class InitManager {
126130 return { state, changedFiles } ;
127131 }
128132
129- async setQqAccount ( qqAccount : string ) : Promise < InitState > {
133+ async setQqAccount ( qqAccount : string , websocketToken = createWebsocketToken ( ) ) : Promise < InitState > {
130134 if ( ! isDigits ( qqAccount ) ) {
131135 throw new Error ( "QQ 号必须是纯数字" ) ;
132136 }
@@ -148,7 +152,7 @@ export class InitManager {
148152
149153 await mkdir ( dirname ( botConfigPath ) , { recursive : true } ) ;
150154 await writeFile ( botConfigPath , content , "utf8" ) ;
151- await this . createNapCatConfigs ( qqAccount ) ;
155+ await this . createNapCatConfigs ( qqAccount , websocketToken ) ;
152156 await this . ensureNapCatWebUiConfig ( ) ;
153157 return this . getState ( ) ;
154158 }
@@ -476,8 +480,16 @@ export class InitManager {
476480 } ;
477481 }
478482
479- private async createNapCatConfigs ( qqAccount : string ) : Promise < void > {
480- const versions = await this . findNapCatVersions ( ) ;
483+ private async createNapCatConfigs ( qqAccount : string , websocketToken : string ) : Promise < void > {
484+ const versions = await this . findNapCatConfigVersions ( ) ;
485+ const napcatProtocolConfig = {
486+ enable : false ,
487+ network : {
488+ httpServers : [ ] ,
489+ websocketServers : [ ] ,
490+ websocketClients : [ ] ,
491+ } ,
492+ } ;
481493 const napcatConfig = {
482494 fileLog : false ,
483495 consoleLog : true ,
@@ -486,63 +498,68 @@ export class InitManager {
486498 packetBackend : "auto" ,
487499 packetServer : "" ,
488500 o3HookMode : 1 ,
501+ bypass : {
502+ hook : false ,
503+ window : false ,
504+ module : false ,
505+ process : false ,
506+ container : false ,
507+ js : false ,
508+ } ,
509+ autoTimeSync : true ,
489510 } ;
490511 const onebotConfig = {
491512 network : {
492513 httpServers : [ ] ,
493514 httpSseServers : [ ] ,
494515 httpClients : [ ] ,
495- websocketServers : [ ] ,
496- websocketClients : [
516+ websocketServers : [
497517 {
498518 enable : true ,
499519 name : "MaiBot Main" ,
500- url : "ws://localhost:8095" ,
520+ host : "127.0.0.1" ,
521+ port : 7998 ,
501522 reportSelfMessage : false ,
523+ enableForcePushEvent : true ,
502524 messagePostFormat : "array" ,
503- token : "" ,
525+ token : websocketToken ,
504526 debug : false ,
505527 heartInterval : 30000 ,
506- reconnectInterval : 30000 ,
507528 } ,
508529 ] ,
530+ websocketClients : [ ] ,
509531 plugins : [ ] ,
510532 } ,
511533 musicSignUrl : "" ,
512534 enableLocalFile2Url : false ,
513535 parseMultMsg : false ,
536+ imageDownloadProxy : "" ,
537+ timeout : {
538+ baseTimeout : 10000 ,
539+ uploadSpeedKBps : 256 ,
540+ downloadSpeedKBps : 256 ,
541+ maxTimeout : 1800000 ,
542+ } ,
514543 } ;
515544
516545 for ( const version of versions ) {
517- const configDirs = [
518- join ( this . paths . modulesRoot , "napcat" , "versions" , version , "resources" , "app" , "napcat" , "config" ) ,
519- join (
520- this . paths . modulesRoot ,
521- "napcatframework" ,
522- "versions" ,
523- version ,
524- "resources" ,
525- "app" ,
526- "LiteLoader" ,
527- "plugins" ,
528- "NapCat" ,
529- "config" ,
530- ) ,
531- ] ;
532-
533- for ( const configDir of configDirs ) {
534- await mkdir ( configDir , { recursive : true } ) ;
535- await writeFile (
536- join ( configDir , `napcat_${ qqAccount } .json` ) ,
537- JSON . stringify ( napcatConfig , null , 2 ) ,
538- "utf8" ,
539- ) ;
540- await writeFile (
541- join ( configDir , `onebot11_${ qqAccount } .json` ) ,
542- JSON . stringify ( onebotConfig , null , 2 ) ,
543- "utf8" ,
544- ) ;
545- }
546+ const configDir = join ( this . paths . modulesRoot , "napcat" , "versions" , version , "resources" , "app" , "napcat" , "config" ) ;
547+ await mkdir ( configDir , { recursive : true } ) ;
548+ await writeFile (
549+ join ( configDir , `napcat_protocol_${ qqAccount } .json` ) ,
550+ JSON . stringify ( napcatProtocolConfig , null , 2 ) ,
551+ "utf8" ,
552+ ) ;
553+ await writeFile (
554+ join ( configDir , `onebot11_${ qqAccount } .json` ) ,
555+ JSON . stringify ( onebotConfig , null , 2 ) ,
556+ "utf8" ,
557+ ) ;
558+ await writeFile (
559+ join ( configDir , `napcat_${ qqAccount } .json` ) ,
560+ JSON . stringify ( napcatConfig , null , 2 ) ,
561+ "utf8" ,
562+ ) ;
546563 }
547564 }
548565
@@ -594,4 +611,43 @@ export class InitManager {
594611
595612 return versions . size > 0 ? [ ...versions ] : [ NAPCAT_FALLBACK_VERSION ] ;
596613 }
614+
615+ private async findNapCatConfigVersions ( ) : Promise < string [ ] > {
616+ const versions = await this . findNapCatVersions ( ) ;
617+ const comparable = versions . map ( ( version ) => ( {
618+ version,
619+ parts : this . parseNapCatVersion ( version ) ,
620+ } ) ) ;
621+
622+ if ( comparable . some ( ( item ) => ! item . parts ) ) {
623+ return versions ;
624+ }
625+
626+ const sorted = comparable . toSorted ( ( left , right ) => this . compareVersionParts ( left . parts ?? [ ] , right . parts ?? [ ] ) ) ;
627+ return [ sorted [ sorted . length - 1 ] ?. version ?? NAPCAT_FALLBACK_VERSION ] ;
628+ }
629+
630+ private parseNapCatVersion ( version : string ) : number [ ] | undefined {
631+ const match = version . match ( / ^ ( \d + (?: \. \d + ) * ) (?: - ( \d + ) ) ? $ / u) ;
632+ if ( ! match ) {
633+ return undefined ;
634+ }
635+
636+ return [
637+ ...match [ 1 ] . split ( "." ) . map ( ( part ) => Number ( part ) ) ,
638+ match [ 2 ] ? Number ( match [ 2 ] ) : 0 ,
639+ ] ;
640+ }
641+
642+ private compareVersionParts ( left : number [ ] , right : number [ ] ) : number {
643+ const length = Math . max ( left . length , right . length ) ;
644+ for ( let index = 0 ; index < length ; index += 1 ) {
645+ const diff = ( left [ index ] ?? 0 ) - ( right [ index ] ?? 0 ) ;
646+ if ( diff !== 0 ) {
647+ return diff ;
648+ }
649+ }
650+
651+ return 0 ;
652+ }
597653}
0 commit comments