1+ import _ from 'lodash'
2+
13/**
24 * 应用预设到文本中
35 * @param {string } text - 原始输入文本
46 * @param {object } config - 配置对象,包含 presets 数组
5- * @param {Array } config.presets - 预设数组,每个预设包含 name 和 prompt
7+ * @param {object } e 需要 e.sender
68 * @returns {object } 返回对象包含:
79 * - processedText: 处理后的文本(预设名替换为预设文本)
810 * - usedPresets: 使用过的预设数组 [{name, prompt}]
911 * - originalText: 处理后的文本(预设名替换为占位符: {sf预设: ${presetName}} )
1012 */
11- export function applyPresets ( text , config ) {
13+ export function applyPresets ( text , config , e = { } ) {
1214 const originalTextInput = text || '' ;
1315 if ( ! text || typeof text !== 'string' ) {
1416 return {
@@ -94,6 +96,9 @@ export function applyPresets(text, config) {
9496 originalText = originalText . slice ( 0 , start ) + `{sf预设: ${ preset . name } }` + originalText . slice ( end )
9597 }
9698
99+ // 应用设定拓展
100+ processedText = replacePromptForSenderMsg ( e , processedText ) ;
101+
97102 return {
98103 processedText : processedText . trim ( ) ,
99104 usedPresets,
@@ -122,4 +127,46 @@ export function generatePresetInfo(usedPresets) {
122127
123128 const presetNames = usedPresets . map ( p => p . name ) . join ( '、' )
124129 return `\n使用预设:${ presetNames } `
130+ }
131+
132+ /** 在 prompt 中替换文本使用 e.sender 信息 */
133+ function replacePromptForSenderMsg ( e , systemMsg = "" ) {
134+ if ( ! e . sender || ! e . message )
135+ return systemMsg ;
136+
137+ /** at或当前用户昵称 */
138+ let name = ''
139+ if ( e . message . filter ( m => m . type === 'at' ) . length > 0 ) {
140+ name = _ . trim ( e . message . filter ( m => m . type === 'at' ) [ 0 ] . text , '@' )
141+
142+ systemMsg = systemMsg . replace ( / _ s e n d e r _ i d _ / igm, e . self_id )
143+ } else {
144+ name = e . sender . card || e . sender . nickname
145+
146+ systemMsg = systemMsg . replace ( / _ s e n d e r _ i d _ / igm, e . sender . user_id )
147+ systemMsg = systemMsg . replace ( / _ s e n d e r _ g e n d e r _ / igm, e . sender . sex )
148+ systemMsg = systemMsg . replace ( / _ s e n d e r _ a g e _ / igm, e . sender . age )
149+ systemMsg = systemMsg . replace ( / _ s e n d e r _ a r e a _ / igm, e . sender . area )
150+ systemMsg = systemMsg . replace ( / _ s e n d e r _ r o l e _ / igm, `${ e . sender . role == "owner" ? '群主' : `${ e . sender . role == "admin" ? '管理员' : '' } ` } ` )
151+ systemMsg = systemMsg . replace ( / _ s e n d e r _ t i t l e _ / igm, e . sender . title )
152+ }
153+
154+ const getCurrentDate = ( ) => {
155+ const date = new Date ( ) ;
156+ const year = date . getFullYear ( ) ;
157+ const month = String ( date . getMonth ( ) + 1 ) . padStart ( 2 , '0' ) ;
158+ const day = String ( date . getDate ( ) ) . padStart ( 2 , '0' ) ;
159+ return `${ year } -${ month } -${ day } ` ;
160+ } ;
161+ const getCurrentTime = ( ) => {
162+ const date = new Date ( ) ;
163+ const hours = String ( date . getHours ( ) ) . padStart ( 2 , '0' ) ;
164+ const minutes = String ( date . getMinutes ( ) ) . padStart ( 2 , '0' ) ;
165+ return `${ hours } :${ minutes } ` ;
166+ } ;
167+ systemMsg = systemMsg . replace ( / _ s e n d e r _ n a m e _ / igm, name )
168+ systemMsg = systemMsg . replace ( / _ d a t e _ / igm, getCurrentDate ( ) )
169+ systemMsg = systemMsg . replace ( / _ t i m e _ / igm, getCurrentTime ( ) )
170+ systemMsg = systemMsg . replace ( / _ s e n d e r _ g r o u p i d _ / igm, e . group_id )
171+ return systemMsg ;
125172}
0 commit comments