mirror of https://github.com/msgbyte/tailchat
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
1.6 KiB
TypeScript
72 lines
1.6 KiB
TypeScript
import { call, TcContext } from 'tailchat-server-sdk';
|
|
import { TcService } from 'tailchat-server-sdk';
|
|
|
|
/**
|
|
* Autojoin Group
|
|
*
|
|
* Auto join group after register
|
|
*/
|
|
class AutojoinGroupService extends TcService {
|
|
get serviceName() {
|
|
return 'plugin:com.msgbyte.autojoinGroup';
|
|
}
|
|
|
|
get autojoinGroupIds(): string[] | null {
|
|
const ids = process.env.AUTOJOIN_GROUP_ID;
|
|
if (!ids) {
|
|
return null;
|
|
}
|
|
|
|
return ids.split(',');
|
|
}
|
|
|
|
onInit() {
|
|
if (!this.autojoinGroupIds) {
|
|
return;
|
|
}
|
|
|
|
this.registerAfterActionHook('user.register', 'autojoinGroup');
|
|
this.registerAfterActionHook('user.createTemporaryUser', 'autojoinGroup');
|
|
|
|
this.registerAction('autojoinGroup', this.autojoinGroup, {
|
|
visibility: 'public',
|
|
});
|
|
}
|
|
|
|
async autojoinGroup(ctx: TcContext) {
|
|
const autojoinGroupIds = this.autojoinGroupIds;
|
|
if (!autojoinGroupIds) {
|
|
return;
|
|
}
|
|
|
|
console.log(ctx.params, ctx.meta);
|
|
|
|
const userId = ctx.meta.actionResult?._id;
|
|
const t = ctx.meta.t;
|
|
|
|
if (!userId) {
|
|
this.logger.fatal('Autojoin Group Failed: cannot found userId from ctx');
|
|
return;
|
|
}
|
|
|
|
await Promise.all(
|
|
autojoinGroupIds.map(async (groupId: string) => {
|
|
await ctx.call('group.addMember', {
|
|
groupId,
|
|
userId,
|
|
});
|
|
|
|
const nickname = ctx.meta.actionResult?.nickname;
|
|
await call(ctx).addGroupSystemMessage(
|
|
String(groupId),
|
|
t('{{nickname}} 通过系统自动加入群组', {
|
|
nickname,
|
|
})
|
|
);
|
|
})
|
|
);
|
|
}
|
|
}
|
|
|
|
export default AutojoinGroupService;
|