Skip to content

Commit 745e6b5

Browse files
committed
feat: add #即梦积分 #即梦签到
1 parent c760c40 commit 745e6b5

File tree

3 files changed

+160
-11
lines changed

3 files changed

+160
-11
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ pip install aiohttp
6464

6565
<img decoding="async" align=right src="https://github.com/user-attachments/assets/9698e837-49e7-4c19-8dab-6aa17d1faed4" width="35%">
6666

67-
请使用 `#sf帮助` 获取完整帮
67+
请使用 `#sf帮助` 获取完整帮助
6868
- [x] `#sf绘画[tags][引用图片]` 使用sf接口绘画
6969
- [x] `#mjp[tags]` 使用MJ接口绘画
7070
- [x] `#gg[gemini提问/实时搜索]`

apps/Jimeng.js

Lines changed: 158 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export class Jimeng extends plugin {
1717
/** 功能名称 */
1818
name: 'sf插件-即梦api',
1919
/** 功能描述 */
20-
dsc: '绘画/视频',
20+
dsc: '绘画/视频/积分管理',
2121
event: 'message',
2222
/** 优先级,数字越小等级越高 */
2323
priority: 1011,
@@ -28,21 +28,38 @@ export class Jimeng extends plugin {
2828
/** 执行方法 */
2929
fnc: 'call_Jimeng_Api'
3030
},
31+
// {
32+
// reg: '^#即梦(检查|检测)?账号$',
33+
// fnc: 'check_Jimeng_Token',
34+
// permission: 'master'
35+
// },
36+
{
37+
reg: '^#即梦查?看?积分$',
38+
fnc: 'get_Jimeng_Points',
39+
permission: 'master'
40+
},
41+
{
42+
reg: '^#即梦(签到|领取积分)$',
43+
fnc: 'receive_Jimeng_Points',
44+
permission: 'master'
45+
}
3146
]
3247
})
3348
}
3449

50+
/** ^#即梦(画图|绘图|绘画|视频) */
3551
async call_Jimeng_Api(e) {
3652
// 判断是否为视频生成
3753
const isVideo = /^#/.test(e.msg)
3854

3955
let msg = e.msg.replace(/^#(|||)(\n*)?/, '').trim()
4056
if (msg === '帮助') {
41-
const helpMsg = isVideo ? `[sf插件][即梦视频API]帮助:
57+
const helpMsg = isVideo ?
58+
`[sf插件][即梦视频API]帮助:
4259
支持的ratio: 横图, 竖图, 方图, --1:1, --4:3, --3:4, --16:9, --9:16, --21:9
4360
注意:在图生视频模式下(有图片输入时),ratio参数将被忽略,视频比例由输入图片的实际比例决定。
44-
上传图片数: --upimgs 2
45-
更换模型: --model [jimeng-video-4.0-pro|jimeng-video-4.0|jimeng-video-3.5-pro|jimeng-video-veo3|jimeng-video-sora2]
61+
上传图片数: --upimgs [1|2]
62+
更换模型: --model [jimeng-video-4.0-pro|jimeng-video-4.0|jimeng-video-3.5-pro|jimeng-video-veo3|jimeng-video-veo3.1|jimeng-video-sora2|jimeng-video-3.0-pro|jimeng-video-3.0|jimeng-video-3.0-fast]
4663
更改时长:--duration [5|8|10|15]
4764
更改分辨率:--resolution [720p|1080p]
4865
引用图片:
@@ -51,17 +68,22 @@ export class Jimeng extends plugin {
5168
2张图片 → 首尾帧视频模式
5269
5370
示例:
54-
#即梦视频 一个女人在花园里跳舞 --9:16 --5秒` : `[sf插件][即梦API]帮助:
55-
默认的resolution: 2k
71+
#即梦视频 一个女人在花园里跳舞 --model jimeng-video-4.0 --9:16 --duration 5 --upimgs 1` :
72+
`[sf插件][即梦API]帮助:
5673
支持的ratio: 横图, 竖图, 方图, --1:1, --4:3, --3:4, --16:9, --9:16, --3:2, --2:3, --21:9
57-
上传图片数: --upimgs 2
74+
上传图片数: --upimgs [1|2]
75+
更改分辨率:--resolution [1k|2k|4k]
5876
参考图片强度: --reference_strength 0.8
59-
更换模型: --model [nanobanana|nanobananapro|jimeng-4.5]
77+
更换模型: --model [nanobanana|nanobananapro|jimeng-4.5|jimeng-4.1|jimeng-4.0|jimeng-3.1|jimeng-3.0]
6078
启用智能画幅比例: --intelligent_ratio true
6179
负面提示词: ntags = [tags]
6280
81+
其他指令:
82+
#即梦积分
83+
#即梦签到
84+
6385
示例:
64-
#即梦绘画 美丽的小少女,胶片感, 竖图, reference_strength = 0.8, --nanobanana, ntags = 丑陋的`
86+
#即梦绘画 美丽的小少女,胶片感, 竖图, --model nanobanana --resolution 2k, ntags = 丑陋的`
6587
e.reply(helpMsg, true);
6688
return true
6789
}
@@ -338,4 +360,131 @@ ${data.created ? `创建时间:${new Date(data.created * 1000).toLocaleString(
338360
}
339361
}
340362

363+
/** 获取所有配置的Token */
364+
_getAllTokens() {
365+
const config_date = Config.getConfig()
366+
const tokens1 = config_date.Jimeng.sessionid ? config_date.Jimeng.sessionid.split(',') : []
367+
const tokens2 = config_date.Jimeng.sessionid_ITN ? config_date.Jimeng.sessionid_ITN.split(',') : []
368+
// 合并并去重,过滤空值
369+
const allTokens = [...new Set([...tokens1, ...tokens2])].filter(t => t && t.trim() !== '')
370+
return { allTokens, baseUrl: config_date.Jimeng.base_url }
371+
}
372+
373+
/** Token脱敏显示 */
374+
_maskToken(token) {
375+
if (!token || token.length < 10) return token
376+
return token.substring(0, 6) + '...' + token.substring(token.length - 4)
377+
}
378+
379+
/** ^#即梦(检查|检测)?账号$ */
380+
async check_Jimeng_Token(e) {
381+
const { allTokens, baseUrl } = this._getAllTokens()
382+
if (allTokens.length === 0) {
383+
return e.reply('配置文件中未找到任何 Token', true)
384+
}
385+
386+
await e.reply(`开始检查 ${allTokens.length} 个 Token 的状态...`, true)
387+
const statusList = []
388+
389+
for (const token of allTokens) {
390+
try {
391+
const res = await axios.post(`${baseUrl}/token/check`, { token: token.trim() }, {
392+
timeout: 10000,
393+
validateStatus: () => true
394+
})
395+
console.log("测试:res.data: " + JSON.stringify(res.data, null, 2))
396+
const isLive = res.data?.live === true
397+
statusList.push(`Token: ${this._maskToken(token)}\n状态: ${isLive ? '✅ 有效' : '❌ 无效'}`)
398+
} catch (error) {
399+
statusList.push(`Token: ${this._maskToken(token)}\n状态: ⚠️ 请求失败 (${error.message})`)
400+
}
401+
}
402+
403+
const msg = await common.makeForwardMsg(e, statusList, '即梦Token状态检查')
404+
await e.reply(msg)
405+
}
406+
407+
/** ^#即梦查?看?积分$ */
408+
async get_Jimeng_Points(e) {
409+
const { allTokens, baseUrl } = this._getAllTokens()
410+
if (allTokens.length === 0) return e.reply('未配置 Token', true)
411+
412+
try {
413+
// 构造 Bearer Token 字符串(多个用逗号分隔)
414+
const authHeader = allTokens.join(',')
415+
416+
const res = await axios.post(`${baseUrl}/token/points`, {}, {
417+
headers: { 'Authorization': `Bearer ${authHeader}` },
418+
timeout: 15000,
419+
validateStatus: () => true
420+
})
421+
422+
const data = res.data
423+
if (!Array.isArray(data)) {
424+
return e.reply(`获取失败,返回格式错误: ${JSON.stringify(data)}`, true)
425+
}
426+
427+
const msgList = data.map(item => {
428+
const pts = item.points || {}
429+
return `Token: ${this._maskToken(item.token)}\n` +
430+
`总积分: ${pts.totalCredit || 0}\n` +
431+
`赠送积分: ${pts.giftCredit || 0}\n` +
432+
`购买积分: ${pts.purchaseCredit || 0}\n` +
433+
`VIP积分: ${pts.vipCredit || 0}`
434+
})
435+
436+
const msg = await common.makeForwardMsg(e, msgList, `即梦积分查询 (${data.length}个)`)
437+
await e.reply(msg)
438+
439+
} catch (error) {
440+
logger.error('[即梦查积分] Error:', error)
441+
await e.reply(`查询失败: ${error.message}`, true)
442+
}
443+
}
444+
445+
/** ^#即梦(签到|领取积分)$ */
446+
async receive_Jimeng_Points(e) {
447+
const { allTokens, baseUrl } = this._getAllTokens()
448+
if (allTokens.length === 0) return e.reply('未配置 Token', true)
449+
450+
await e.reply('开始批量签到,请稍候...', true)
451+
452+
try {
453+
const authHeader = allTokens.join(',')
454+
455+
const res = await axios.post(`${baseUrl}/token/receive`, {}, {
456+
headers: { 'Authorization': `Bearer ${authHeader}` },
457+
timeout: 30000, // 签到可能较慢
458+
validateStatus: () => true
459+
})
460+
461+
const data = res.data
462+
if (!Array.isArray(data)) {
463+
return e.reply(`签到请求异常: ${JSON.stringify(data)}`, true)
464+
}
465+
466+
let successCount = 0
467+
const msgList = data.map(item => {
468+
const pts = item.credits || {}
469+
const statusIcon = item.received ? '✅ 领取成功' : (item.error ? '❌ 失败' : '⚪ 无需领取/已领')
470+
if (item.received) successCount++
471+
472+
let detail = `Token: ${this._maskToken(item.token)}\n结果: ${statusIcon}`
473+
if (item.error) detail += `\n错误: ${item.error}`
474+
detail += `\n当前总积分: ${pts.totalCredit || 0}`
475+
return detail
476+
})
477+
478+
const summary = `批量签到完成\n总数: ${allTokens.length}\n成功领取: ${successCount}`
479+
msgList.unshift(summary)
480+
481+
const msg = await common.makeForwardMsg(e, msgList, '即梦每日签到结果')
482+
await e.reply(msg)
483+
484+
} catch (error) {
485+
logger.error('[即梦签到] Error:', error)
486+
await e.reply(`签到请求失败: ${error.message}`, true)
487+
}
488+
}
489+
341490
}

guoba.support.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -685,7 +685,7 @@ export function supportGuoba() {
685685
{
686686
field: "Jimeng.sessionid",
687687
label: "Sessionid",
688-
bottomHelpMessage: "获取Sessionid:打开浏览器,访问 https://jimeng.jianying.com/ai-tool/home/ 登录你的账号,按F12打开开发者工具,切换到 `Application`或 `Storage` 标签页,在左侧展开`Cookies`,点击 `https://jimeng.jianying.com` 找到名为sessionid的cookie值;若有多个 sessionid 用英文逗号分割",
688+
bottomHelpMessage: "获取Sessionid:打开浏览器,访问 https://jimeng.jianying.com/ai-tool/home/ 登录你的账号,按F12打开开发者工具,切换到 `Application`或 `Storage` 标签页,在左侧展开`Cookies`,点击 `https://jimeng.jianying.com` 找到名为sessionid的cookie值;若有多个 sessionid 用英文逗号分割;可用指令: #即梦积分 #即梦签到",
689689
component: "Input",
690690
},
691691
{

0 commit comments

Comments
 (0)