11package cn.mpsmc
22
3- import net.mamoe.mirai.message.data.MessageChain
4- import net.mamoe.mirai.message.data.MessageChainBuilder
5- import net.mamoe.mirai.message.data.PlainText
6- import net.mamoe.mirai.message.data.QuoteReply
7- import kotlin.math.absoluteValue
3+ import net.mamoe.mirai.contact.Contact
4+ import net.mamoe.mirai.contact.User
5+ import net.mamoe.mirai.event.events.MessageEvent
6+ import net.mamoe.mirai.message.data.*
7+ import net.mamoe.mirai.message.data.MessageSource.Key.quote
88
9- fun chatEventHandler (idL : Long , message : String , quote : QuoteReply ): MessageChain {
10- val id = idL.toString()
11- if (Data .lastChatTime[id] != null )
12- if (Config .expirationTime != - 1 && ((System .currentTimeMillis() / 1000 )) - Data .lastChatTime[id]!! >= Config .expirationTime)
13- Data .historicalMessages.remove(id)
14- if (message == " 清空会话" )
15- return MessageChainBuilder ().append(quote)
16- .append(if (Data .historicalMessages.remove(id) != null ) " 清空成功" else " 清空失败" ).build()
9+ fun chatHandler (source : String , message : String ): List <String > {
10+ val userData = UserDataHandler (source)
11+ if (message == Config .clearCommand)
12+ return listOf (if (userData.removeAllFromHistoricalMessages()) " 清空成功" else " 清空失败" )
1713 else {
18- val cd = checkCoolDown(id)
19- BotGPT .logger.info(cd.toString())
20- if (cd >= 0 ) {
21- var finalMessage = " "
22- var finalMessages: MutableList <String > = mutableListOf ()
23- val historicalMessages = Data .historicalMessages[id]
24- Data .historicalMessages.remove(id)
25- finalMessages.add(message)
26- if (historicalMessages != null ) {
27- finalMessages = (historicalMessages + message).toMutableList()
28- }
29- for (i in finalMessages) {
30- finalMessage + = i + Config .separator
31- }
32- finalMessage = finalMessage.substring(0 until finalMessage.length - Config .separator.length)
33- Data .lastChatTime[id] = System .currentTimeMillis() / 1000
34- Data .historicalMessages[id] = finalMessages
35- BotGPT .logger.info(" $id -> $finalMessage " )
36- return try {
14+ return if (userData.cooldown <= 0 ) {
15+ userData.updateLastChatTime()
16+ userData.addElementToHistoricalMessages(Message (" user" , message))
17+ try {
3718 val response =
38- Client .sendRequest(RequestObject (Config .model, listOf (Messages (" user" , finalMessage))))
39- val content = (response.choices[0 ].message.content).trim()
40- MessageChainBuilder ().append(quote).append(PlainText (content)).build()
19+ Client .sendRequest(RequestObject (Config .openAI.model, userData.getHistoricalMessages().toList()))
20+ val c = (response.choices[0 ].message.content).trim()
21+ userData.addElementToHistoricalMessages(Message (" assistant" , c))
22+ userData.updateLastChatTime()
23+ c.split(' \n ' )
4124 } catch (e: Exception ) {
4225 BotGPT .logger.warning(e.message)
43- MessageChainBuilder ().append(quote).append(PlainText (" 内部错误" )).build()
26+ userData.removeAllFromHistoricalMessages()
27+ listOf (Config .messages.errorMessage)
4428 }
4529 } else
46- return MessageChainBuilder ().append(quote).append(PlainText (" 冷却中 [${checkCoolDown(id).absoluteValue} ]" ))
47- .build()
30+ return listOf (Config .messages.cooldownMessage.replace(" %cd%" , userData.cooldown.toString()))
31+ }
32+ }
33+
34+ fun chatEventHandler (context : Contact , event : MessageEvent ): MessageChain {
35+ val message: String
36+ val source: String
37+ if (context is User ) {
38+ message = event.message.contentToString()
39+ source = ' u' + context.id.toString()
40+ } else {
41+ message = event.message.contentToString().removeRange(0 until event.bot.id.toString().length + 2 )
42+ source = ' g' + context.id.toString()
4843 }
44+ val apiReply = chatHandler(source, message)
45+ return if (apiReply.size > 1 )
46+ buildForwardMessage(context, ForwardMessage .DisplayStrategy .Default ) {
47+ for (i in apiReply)
48+ if (i.isNotEmpty())
49+ event.bot says PlainText (i)
50+ }.toMessageChain()
51+ else
52+ event.message.quote() + PlainText (apiReply[0 ]).toMessageChain()
4953}
0 commit comments