Skip to content

Commit 2899e49

Browse files
committed
feat: 绘画预设支持识别用户昵称以制作meme
1 parent 882fbe7 commit 2899e49

File tree

5 files changed

+55
-8
lines changed

5 files changed

+55
-8
lines changed

apps/Doubao.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,7 @@ export class Doubao extends plugin {
243243
}
244244

245245
// 处理预设
246-
const presetResult = applyPresets(msg, Config.getConfig("presets"))
246+
const presetResult = applyPresets(msg, Config.getConfig("presets"), e)
247247
msg = presetResult.processedText
248248

249249
// 处理 msg,使用 handleParam 解析参数

apps/Jimeng.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ export class Jimeng extends plugin {
9696
}
9797

9898
// 处理预设
99-
const presetResult = applyPresets(msg, Config.getConfig("presets"))
99+
const presetResult = applyPresets(msg, Config.getConfig("presets"), e)
100100
msg = presetResult.processedText
101101

102102
// 处理 msg

apps/SF_Painting.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -589,7 +589,7 @@ export class SF_Painting extends plugin {
589589
let msg = e.msg.replace(/^#(flux|FLUX|(sf|SF)(||))(\n*)?/, '').trim()
590590

591591
// 处理预设
592-
const presetResult = applyPresets(msg, Config.getConfig("presets"))
592+
const presetResult = applyPresets(msg, Config.getConfig("presets"), e)
593593
msg = presetResult.processedText
594594

595595
// 处理 msg
@@ -821,7 +821,7 @@ export class SF_Painting extends plugin {
821821

822822
// 处理预设
823823
if (paintModel) {
824-
const presetResult = applyPresets(toAiMessage, Config.getConfig("presets"))
824+
const presetResult = applyPresets(toAiMessage, Config.getConfig("presets"), e)
825825
toAiMessage = presetResult.processedText
826826
msg = presetResult.originalText
827827
// 处理 msg
@@ -1586,7 +1586,7 @@ ${e.sfRuntime.isgeneratePrompt === undefined ? "Tags中可用:--自动提示
15861586

15871587
// 处理预设
15881588
if (paintModel) {
1589-
const presetResult = applyPresets(toAiMessage, Config.getConfig("presets"))
1589+
const presetResult = applyPresets(toAiMessage, Config.getConfig("presets"), e)
15901590
toAiMessage = presetResult.processedText
15911591
msg = presetResult.originalText
15921592
// 处理 msg

guoba.support.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -851,7 +851,7 @@ export function supportGuoba() {
851851
field: "prompt",
852852
label: "预设文本",
853853
component: "InputTextArea",
854-
bottomHelpMessage: "支持的固定参数: 横图, 竖图, 方图, --1:1, --16:9, --9:16, --upimgs 2, reference_strength = 0.8 等",
854+
bottomHelpMessage: "1.支持的固定参数: 横图, 竖图, 方图, --1:1, --16:9, --9:16, --upimgs 2, reference_strength = 0.8 等;2.meme制作:支持将预设文本中的 _sender_name_ 替换为 被At的用户或当前用户昵称; _sender_id_ 替换为 被At的用户或当前用户qq; _sender_groupid_ 替换为 当前群号; _date_ 替换为 当前日期; _time_ 替换为 当前时间;",
855855
},
856856
],
857857
},

utils/applyPresets.js

Lines changed: 49 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
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(/_sender_id_/igm, e.self_id)
143+
} else {
144+
name = e.sender.card || e.sender.nickname
145+
146+
systemMsg = systemMsg.replace(/_sender_id_/igm, e.sender.user_id)
147+
systemMsg = systemMsg.replace(/_sender_gender_/igm, e.sender.sex)
148+
systemMsg = systemMsg.replace(/_sender_age_/igm, e.sender.age)
149+
systemMsg = systemMsg.replace(/_sender_area_/igm, e.sender.area)
150+
systemMsg = systemMsg.replace(/_sender_role_/igm, `${e.sender.role == "owner" ? '群主' : `${e.sender.role == "admin" ? '管理员' : ''}`}`)
151+
systemMsg = systemMsg.replace(/_sender_title_/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(/_sender_name_/igm, name)
168+
systemMsg = systemMsg.replace(/_date_/igm, getCurrentDate())
169+
systemMsg = systemMsg.replace(/_time_/igm, getCurrentTime())
170+
systemMsg = systemMsg.replace(/_sender_groupid_/igm, e.group_id)
171+
return systemMsg;
125172
}

0 commit comments

Comments
 (0)