2 个赞
你好我在开发新插件遇到了一样的问题,请问这边解决了吗
1 个赞
没有解决,好像是获取已登记频道列表出了问题
1 个赞
我这边是使用bot.sendMessage函数临时解决了,等官方更新版本修复ctx.broadcast再换回去。
以下是我使用这个函数的包装函数块
async function sendMessageToChannel(ctx, guild, broadMessage) {
const targetChannels = await ctx.database.get("channel", { id: guild.guildId, platform: guild.platform });
if (targetChannels.length === 1) {
const bot = ctx.bots.find((bot) => bot.userId === targetChannels[0].assignee);
if (bot) {
await bot.sendMessage(guild.guildId, broadMessage);
} else {
throw new Error("指定的bot未找到。");
}
} else if (targetChannels.length > 1) {
throw new Error("有复数个bot存在于该群组/频道,请移除多余bot。");
} else {
throw new Error("未找到目标群组/频道。");
}
}
因为不太了解具体机制,所以做了比较多的保险措施,好像频道代理人bot本身就是唯一的?不过是临时方案也就先这样写了_(:3」∠)_
代码具体逻辑为:
- 从channel表查询发送目标频道存为targetChannels
- 确保目标唯一
- 使用bots.find查找目标频道对应的代理人bot并调用sendMessage
以上是我的临时解决方案,低技术力仅供参考,欢迎看不下去的大佬指正优化_(:3」∠)_
3 个赞
测试发现 中间有点类型错误 可能是因为某些平台的guildId什么的都是数字不是字符串 用的时候发现的
第一个是… bot.userId === targetChannels[0] …
应该为 … bot.selfId === String(targetChannels[0].assignee) …(后面的修正不知道为什么强制类型转换没成功 待定一下)
第二个是sendMessage(guild.guildId, …
应该为 sendMessage(String(guild.guildId), …
↑仅仅是我的情况,可能对某些平台的用户不起作用,这样的话guild里面的id就可以填数字了
1 个赞