From 1c6c10b118cbe6c1c804352fe41eda0cbda00bfd Mon Sep 17 00:00:00 2001 From: ikechan8370 Date: Tue, 28 Nov 2023 00:20:13 +0800 Subject: [PATCH 1/7] fix: #613 --- apps/entertainment.js | 112 +++++++++++++++++++++-------------------- server/modules/user.js | 16 +----- utils/bot.js | 15 ++++++ 3 files changed, 75 insertions(+), 68 deletions(-) create mode 100644 utils/bot.js diff --git a/apps/entertainment.js b/apps/entertainment.js index eb6e9d8..3b888d8 100644 --- a/apps/entertainment.js +++ b/apps/entertainment.js @@ -12,6 +12,7 @@ import { translate, translateLangSupports } from '../utils/translate.js' import AzureTTS from '../utils/tts/microsoft-azure.js' import VoiceVoxTTS from '../utils/tts/voicevox.js' import { URL } from 'node:url' +import { getBots } from '../utils/bot.js' let useSilk = false try { @@ -350,7 +351,7 @@ ${translateLangLabels} let groupId = e.msg.replace(/^#chatgpt打招呼/, '') logger.info(groupId) groupId = parseInt(groupId) - if (groupId && !e.bot.getGroupList().get(groupId)) { + if (groupId && !e.bot.gl.get(groupId)) { await e.reply('机器人不在这个群里!') return } @@ -379,74 +380,77 @@ ${translateLangLabels} continue } let groupId = parseInt(element) - if (this.e.bot.getGroupList().get(groupId)) { - // 打招呼概率 - if (Math.floor(Math.random() * 100) < Config.helloProbability) { - let message = await generateHello() - logger.info(`打招呼给群聊${groupId}:` + message) - if (Config.defaultUseTTS) { - let audio - const [defaultVitsTTSRole, defaultAzureTTSRole, defaultVoxTTSRole] = [Config.defaultTTSRole, Config.azureTTSSpeaker, Config.voicevoxTTSSpeaker] - let ttsSupportKinds = [] - if (Config.azureTTSKey) ttsSupportKinds.push(1) - if (Config.ttsSpace) ttsSupportKinds.push(2) - if (Config.voicevoxSpace) ttsSupportKinds.push(3) - if (!ttsSupportKinds.length) { - logger.warn('没有配置任何语音服务!') - return false - } - const randomIndex = Math.floor(Math.random() * ttsSupportKinds.length) - switch (ttsSupportKinds[randomIndex]) { - case 1 : { - const isEn = AzureTTS.supportConfigurations.find(config => config.code === defaultAzureTTSRole)?.language.includes('en') - if (isEn) { - message = (await translate(message, '英')).replace('\n', '') - } - audio = await AzureTTS.generateAudio(message, { - defaultAzureTTSRole - }) - break + let bots = this.e ? [this.e.bot] : getBots() + for (let bot of bots) { + if (bot.gl?.get(groupId)) { + // 打招呼概率 + if (Math.floor(Math.random() * 100) < Config.helloProbability) { + let message = await generateHello() + logger.info(`打招呼给群聊${groupId}:` + message) + if (Config.defaultUseTTS) { + let audio + const [defaultVitsTTSRole, defaultAzureTTSRole, defaultVoxTTSRole] = [Config.defaultTTSRole, Config.azureTTSSpeaker, Config.voicevoxTTSSpeaker] + let ttsSupportKinds = [] + if (Config.azureTTSKey) ttsSupportKinds.push(1) + if (Config.ttsSpace) ttsSupportKinds.push(2) + if (Config.voicevoxSpace) ttsSupportKinds.push(3) + if (!ttsSupportKinds.length) { + logger.warn('没有配置任何语音服务!') + return false } - case 2 : { - if (Config.autoJapanese) { + const randomIndex = Math.floor(Math.random() * ttsSupportKinds.length) + switch (ttsSupportKinds[randomIndex]) { + case 1 : { + const isEn = AzureTTS.supportConfigurations.find(config => config.code === defaultAzureTTSRole)?.language.includes('en') + if (isEn) { + message = (await translate(message, '英')).replace('\n', '') + } + audio = await AzureTTS.generateAudio(message, { + defaultAzureTTSRole + }) + break + } + case 2 : { + if (Config.autoJapanese) { + try { + message = await translate(message, '日') + } catch (err) { + logger.error(err) + } + } try { - message = await translate(message, '日') + audio = await generateVitsAudio(message, defaultVitsTTSRole, '中日混合(中文用[ZH][ZH]包裹起来,日文用[JA][JA]包裹起来)') } catch (err) { logger.error(err) } + break } - try { - audio = await generateVitsAudio(message, defaultVitsTTSRole, '中日混合(中文用[ZH][ZH]包裹起来,日文用[JA][JA]包裹起来)') - } catch (err) { - logger.error(err) + case 3 : { + message = (await translate(message, '日')).replace('\n', '') + try { + audio = await VoiceVoxTTS.generateAudio(message, { + speaker: defaultVoxTTSRole + }) + } catch (err) { + logger.error(err) + } + break } - break } - case 3 : { - message = (await translate(message, '日')).replace('\n', '') - try { - audio = await VoiceVoxTTS.generateAudio(message, { - speaker: defaultVoxTTSRole - }) - } catch (err) { - logger.error(err) - } - break + if (useSilk) { + await this.e.bot.sendGroupMsg(groupId, await uploadRecord(audio)) + } else { + await this.e.bot.sendGroupMsg(groupId, segment.record(audio)) } - } - if (useSilk) { - await this.e.bot.sendGroupMsg(groupId, await uploadRecord(audio)) } else { - await this.e.bot.sendGroupMsg(groupId, segment.record(audio)) + await this.e.bot.sendGroupMsg(groupId, message) } } else { - await this.e.bot.sendGroupMsg(groupId, message) + logger.info(`时机未到,这次就不打招呼给群聊${groupId}了`) } } else { - logger.info(`时机未到,这次就不打招呼给群聊${groupId}了`) + logger.warn('机器人不在要发送的群组里,忽略群。同时建议检查配置文件修改要打招呼的群号。' + groupId) } - } else { - logger.warn('机器人不在要发送的群组里,忽略群。同时建议检查配置文件修改要打招呼的群号。' + groupId) } } } diff --git a/server/modules/user.js b/server/modules/user.js index d5f41a4..38b9830 100644 --- a/server/modules/user.js +++ b/server/modules/user.js @@ -1,20 +1,8 @@ import { UserInfo, AddUser } from './user_data.js' import { randomString, getUserData, getMasterQQ, getUin } from '../../utils/common.js' +import { getBots } from '../../utils/bot.js'; import fs from 'fs' - -function getBots () { - if (Bot.uin === 88888) { - // 找适配器 - let adapters = Bot.adapter - return adapters?.map(uin => Bot[uin]) - } else if (Bot.adapter && Bot.adapter.length > 0) { - let bots = [Bot] - Bot.adapter.forEach(uin => { - bots.push(Bot[uin]) - }) - return bots - } -} +import path from 'path'; async function User (fastify, options) { // 登录 diff --git a/utils/bot.js b/utils/bot.js new file mode 100644 index 0000000..6662a7d --- /dev/null +++ b/utils/bot.js @@ -0,0 +1,15 @@ +export function getBots () { + if (Bot.uin === 88888) { + // 找适配器 + let adapters = Bot.adapter + return adapters?.map(uin => Bot[uin]) + } else if (Bot.adapter && Bot.adapter.length > 0) { + let bots = [Bot] + Bot.adapter.forEach(uin => { + bots.push(Bot[uin]) + }) + return bots + } else { + return [Bot] + } +} From aefea106a58c9c7b9846b78cb775632bfe144522 Mon Sep 17 00:00:00 2001 From: ikechan8370 Date: Tue, 28 Nov 2023 00:31:59 +0800 Subject: [PATCH 2/7] fix: #612 --- utils/claude.ai/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/claude.ai/index.js b/utils/claude.ai/index.js index e208731..ba12726 100644 --- a/utils/claude.ai/index.js +++ b/utils/claude.ai/index.js @@ -136,7 +136,7 @@ export class ClaudeAIClient { attachments, completion: { incremental: true, - model: 'claude-2', + model: 'claude-2.1', prompt: text, timezone: 'Asia/Hong_Kong' } From cef2f7378deda44d6d25bebeffff1c411516415f Mon Sep 17 00:00:00 2001 From: ikechan8370 Date: Tue, 28 Nov 2023 14:30:09 +0800 Subject: [PATCH 3/7] =?UTF-8?q?fix:=20shamrock=E7=9A=84=E5=B0=8F=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/chat.js | 56 ++++++++++++++++++++++++------------------------- utils/common.js | 1 + 2 files changed, 29 insertions(+), 28 deletions(-) diff --git a/utils/chat.js b/utils/chat.js index 8c27bad..e249d0f 100644 --- a/utils/chat.js +++ b/utils/chat.js @@ -1,34 +1,34 @@ export async function getChatHistoryGroup (e, num) { - //if (e.adapter === 'shamrock') { + // if (e.adapter === 'shamrock') { // return await e.group.getChatHistory(0, num, false) - //} else { - let latestChats = await e.group.getChatHistory(0, 1) - if (latestChats.length > 0) { - let latestChat = latestChats[0] - if (latestChat) { - let seq = latestChat.seq || latestChat.message_id - let chats = [] - while (chats.length < num) { - let chatHistory = await e.group.getChatHistory(seq, 20) - chats.push(...chatHistory) - seq = chatHistory[0].seq || chatHistory[0].message_id - } - chats = chats.slice(0, num) - try { - let mm = await e.group.getMemberMap() - chats.forEach(chat => { - let sender = mm.get(chat.sender.user_id) - if (sender) { - chat.sender = sender - } - }) - } catch (err) { - logger.warn(err) - } - // console.log(chats) - return chats + // } else { + let latestChats = await e.group.getChatHistory(0, 1) + if (latestChats.length > 0) { + let latestChat = latestChats[0] + if (latestChat) { + let seq = latestChat.seq || latestChat.message_id + let chats = [] + while (chats.length < num) { + let chatHistory = await e.group.getChatHistory(seq, 20) + chats.push(...chatHistory) + seq = chatHistory[0].seq || chatHistory[0].message_id } + chats = chats.slice(0, num) + try { + let mm = await e.group.getMemberMap() + chats.forEach(chat => { + let sender = mm.get(chat.sender.user_id) + if (sender) { + chat.sender = sender + } + }) + } catch (err) { + logger.warn(err) + } + // console.log(chats) + return chats } - // } + } + // } return [] } diff --git a/utils/common.js b/utils/common.js index 5f45572..66ca860 100644 --- a/utils/common.js +++ b/utils/common.js @@ -848,6 +848,7 @@ export function getMaxModelTokens (model = 'gpt-3.5-turbo') { export function getUin (e) { if (e?.bot?.uin) return e.bot.uin + if (e?.bot?.self_id) return e.bot.self_id if (Array.isArray(Bot.uin)) { if (Config.trssBotUin && Bot.uin.indexOf(Config.trssBotUin) > -1) { return Config.trssBotUin } else { Bot.uin.forEach((u) => { From 88270f1bca620abf5ec38da419432ef4fdb4cab3 Mon Sep 17 00:00:00 2001 From: ikechan8370 Date: Tue, 28 Nov 2023 14:39:53 +0800 Subject: [PATCH 4/7] =?UTF-8?q?fix:=20shamrock=E7=9A=84=E5=B0=8F=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/common.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/common.js b/utils/common.js index 3ec4f7c..51c67d5 100644 --- a/utils/common.js +++ b/utils/common.js @@ -849,7 +849,7 @@ export function getMaxModelTokens (model = 'gpt-3.5-turbo') { export function getUin (e) { if (e?.bot?.uin) return e.bot.uin - if (e?.bot?.self_id) return e.bot.self_id + if (e?.self_id) return e.self_id if (Array.isArray(Bot.uin)) { if (Config.trssBotUin && Bot.uin.indexOf(Config.trssBotUin) > -1) { return Config.trssBotUin } else { Bot.uin.forEach((u) => { From b9ca5ce4e21d28c696a49d8f283bf93d3aa61dd2 Mon Sep 17 00:00:00 2001 From: ikechan8370 Date: Tue, 28 Nov 2023 14:40:40 +0800 Subject: [PATCH 5/7] =?UTF-8?q?fix:=20shamrock=E7=9A=84=E5=B0=8F=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/chat.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/chat.js b/apps/chat.js index b407296..69944a2 100644 --- a/apps/chat.js +++ b/apps/chat.js @@ -803,7 +803,7 @@ export class chatgpt extends plugin { if (!msg || e.msg?.startsWith('#')) { return false } - if ((e.isGroup || e.group_id) && !(e.atme || e.atBot)) { + if ((e.isGroup || e.group_id) && !(e.atme || e.atBot || e.at == getUin(e))) { return false } if (e.user_id == getUin(e)) return false @@ -1652,7 +1652,7 @@ export class chatgpt extends plugin { opt.groupId = e.group_id opt.qq = e.sender.user_id opt.nickname = e.sender.card - opt.groupName = e.group.name + opt.groupName = e.group.name || e.group_name opt.botName = e.isGroup ? (e.group.pickMember(getUin(e)).card || e.group.pickMember(getUin(e)).nickname) : e.bot.nickname let master = (await getMasterQQ())[0] if (master && e.group) { From 823301e5c6c3527cd5813a452d7cd5a6a6b941bc Mon Sep 17 00:00:00 2001 From: ikechan8370 Date: Tue, 28 Nov 2023 15:19:22 +0800 Subject: [PATCH 6/7] =?UTF-8?q?fix:=20=E7=AA=92=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/common.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils/common.js b/utils/common.js index 51c67d5..f9b2de9 100644 --- a/utils/common.js +++ b/utils/common.js @@ -848,8 +848,8 @@ export function getMaxModelTokens (model = 'gpt-3.5-turbo') { } export function getUin (e) { - if (e?.bot?.uin) return e.bot.uin if (e?.self_id) return e.self_id + if (e?.bot?.uin) return e.bot.uin if (Array.isArray(Bot.uin)) { if (Config.trssBotUin && Bot.uin.indexOf(Config.trssBotUin) > -1) { return Config.trssBotUin } else { Bot.uin.forEach((u) => { From 028fbb7528aacbb08a621190fc241a3f4c286337 Mon Sep 17 00:00:00 2001 From: ikechan8370 Date: Tue, 28 Nov 2023 19:08:47 +0800 Subject: [PATCH 7/7] =?UTF-8?q?fix:=20=E5=97=AF=E5=97=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/chat.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/chat.js b/apps/chat.js index 69944a2..631d2f2 100644 --- a/apps/chat.js +++ b/apps/chat.js @@ -803,7 +803,7 @@ export class chatgpt extends plugin { if (!msg || e.msg?.startsWith('#')) { return false } - if ((e.isGroup || e.group_id) && !(e.atme || e.atBot || e.at == getUin(e))) { + if ((e.isGroup || e.group_id) && !(e.atme || e.atBot || (e.at === e.self_id))) { return false } if (e.user_id == getUin(e)) return false