@karinjs/adapter-qqbot 3.3.0 → 3.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +4 -0
- package/dist/index.js +33 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -2291,6 +2291,10 @@ declare class AdapterQQBot extends AdapterBase implements AdapterType {
|
|
|
2291
2291
|
}>;
|
|
2292
2292
|
/**
|
|
2293
2293
|
* 获取头像 url
|
|
2294
|
+
*
|
|
2295
|
+
* 第三方头像 CDN 的模式是 `qqapp/{appId}/{openid}/{size}`,只有拼用户 openid 才有效;
|
|
2296
|
+
* 机器人自身没有可用的 openid(selfId 就是 appId,拼出 appId/appid 只会得到默认头像),
|
|
2297
|
+
* 因此目标是自己时改走官方 `GET /users/@me` 返回的 avatar 字段,取值与缓存见 self-avatar。
|
|
2294
2298
|
*/
|
|
2295
2299
|
getAvatarUrl(_userId: string, _size?: 0 | 40 | 100 | 140): Promise<string>;
|
|
2296
2300
|
/**
|
package/dist/index.js
CHANGED
|
@@ -3457,6 +3457,34 @@ const getAdapterConfig = (bot) => {
|
|
|
3457
3457
|
return cfg;
|
|
3458
3458
|
};
|
|
3459
3459
|
|
|
3460
|
+
//#endregion
|
|
3461
|
+
//#region src/core/adapter/self-avatar.ts
|
|
3462
|
+
/**
|
|
3463
|
+
* 机器人自身头像的在途请求存储。
|
|
3464
|
+
*
|
|
3465
|
+
* 机器人没有可拼进 qlogo CDN 的自身 openid(selfId 就是 appId),只能走官方
|
|
3466
|
+
* `GET /users/@me` 取 avatar。在途请求挂在 WeakMap 而不是实例字段上,保持
|
|
3467
|
+
* AdapterQQBot 只包含 AdapterType 约束的成员;bot 重建后旧实例随之释放。
|
|
3468
|
+
*/
|
|
3469
|
+
const pending = /* @__PURE__ */ new WeakMap();
|
|
3470
|
+
/**
|
|
3471
|
+
* 获取机器人自身的真实头像,并发调用只请求一次,失败后释放以便下次重试。
|
|
3472
|
+
* @param bot 适配器实例。
|
|
3473
|
+
* @returns `/users/@me` 的 avatar,拉取失败时退回 qlogo 拼接模式(默认头像)。
|
|
3474
|
+
*/
|
|
3475
|
+
const selfAvatarUrl = (bot) => {
|
|
3476
|
+
const existed = pending.get(bot);
|
|
3477
|
+
if (existed) return existed;
|
|
3478
|
+
const fallback = `https://thirdqq.qlogo.cn/qqapp/${bot.cfg.appId}/${bot.selfId}/0`;
|
|
3479
|
+
const task = bot.super.meta.getMe().then((me) => me.avatar || fallback).catch((err) => {
|
|
3480
|
+
bot.logger("warn", `[getAvatarUrl] 获取机器人自身头像失败,退回默认拼接: ${err instanceof Error ? err.message : err}`);
|
|
3481
|
+
pending.delete(bot);
|
|
3482
|
+
return fallback;
|
|
3483
|
+
});
|
|
3484
|
+
pending.set(bot, task);
|
|
3485
|
+
return task;
|
|
3486
|
+
};
|
|
3487
|
+
|
|
3460
3488
|
//#endregion
|
|
3461
3489
|
//#region src/core/adapter/base.ts
|
|
3462
3490
|
/**
|
|
@@ -3683,8 +3711,13 @@ var AdapterQQBot = class extends AdapterBase {
|
|
|
3683
3711
|
}
|
|
3684
3712
|
/**
|
|
3685
3713
|
* 获取头像 url
|
|
3714
|
+
*
|
|
3715
|
+
* 第三方头像 CDN 的模式是 `qqapp/{appId}/{openid}/{size}`,只有拼用户 openid 才有效;
|
|
3716
|
+
* 机器人自身没有可用的 openid(selfId 就是 appId,拼出 appId/appid 只会得到默认头像),
|
|
3717
|
+
* 因此目标是自己时改走官方 `GET /users/@me` 返回的 avatar 字段,取值与缓存见 self-avatar。
|
|
3686
3718
|
*/
|
|
3687
3719
|
async getAvatarUrl(_userId, _size = 0) {
|
|
3720
|
+
if (_userId && (_userId === this.selfId || _userId === this.selfSubId("id"))) return selfAvatarUrl(this);
|
|
3688
3721
|
return `https://thirdqq.qlogo.cn/qqapp/${this.cfg.appId}/${_userId}/${_size}`;
|
|
3689
3722
|
}
|
|
3690
3723
|
/**
|