刚开始步入机器人插件的制作行列,对应分群的操作我想复杂了。以为得开多线程等操作…
实际上只要在全局创建一个对象。这个对象的 key 是每个群的 标识,它的 value 就是对应的分群数据即可。
{"ASMLWDNMGKDBYT":{isplaying:false,win:"AEEEDEGEGOWOWFASV"}} // 单个群数据
分群独立是最基础的操作了,我看社区没有写,我这个肛写插件的小白可以试着讲讲。希望补充说明
如何获取 群的标识
session.guildId 是群信息对象,该信息具有唯一性
ctx.command(Argv) 的 群标识id 它位于 Argv.session.guild.guildId 中,而 ctx.middleware(session,next) 的 群标识id 位于 session.guild.guildId 上。 通过它作为数据存储的 key 后,因此它就可以来访问目标群的独立数据。
如何自由获取 分群的数据
在全局创建一个函数和全局变量,传入 群标识id 或 群信息对象。并以构造函数的方式设置模板即可
// 公共数据模板
const guildData = {}
// 获取分群数据
function getguildData(guild) {
const info = String(guild.guildId)
// 若不存在数据 赋值模板样式
if (!guildData[info]) guildData[info] = {
// 存的值
a:'123',
b:'234',
// 存的方法
getData(){
// 直接操作构造函数值
return this.a
}
};
// 返回分群数据
return guildData[info];
}
在每次 command 函数调用时、或者 事件触发时。先获取对应分群信息。得到的数据就是分群独立的。
ctx.command('1a2b').option('/1a2b', '开始玩猜数字').action((Argv) => {
const temp = getguildData(Argv.session.guild);
// ...
})
ctx.middleware(async (session, next) => {
const temp = getguildData(session.guild);
// ...
})
该操作简单方便,注意this 指向即可。