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.
96 lines
2.2 KiB
TypeScript
96 lines
2.2 KiB
TypeScript
import { call, TcContext } from 'tailchat-server-sdk';
|
|
import { TcService } from 'tailchat-server-sdk';
|
|
|
|
/**
|
|
* 入群欢迎
|
|
*
|
|
* 加入群组时发送欢迎消息
|
|
*/
|
|
class WelcomeService extends TcService {
|
|
get serviceName() {
|
|
return 'plugin:com.msgbyte.welcome';
|
|
}
|
|
|
|
onInit() {
|
|
this.registryAfterActionHook('group.joinGroup', 'joinGroupCallback'); // not work
|
|
|
|
this.registerAction('joinGroupCallback', this.joinGroupCallback, {
|
|
params: {
|
|
groupId: 'string',
|
|
},
|
|
visibility: 'public',
|
|
});
|
|
}
|
|
|
|
async joinGroupCallback(
|
|
ctx: TcContext<{
|
|
groupId: string;
|
|
}>
|
|
) {
|
|
const { groupId } = ctx.params;
|
|
|
|
const groupInfo = await call(ctx).getGroupInfo(groupId);
|
|
|
|
if (groupInfo.config && groupInfo.config['plugin:groupWelcomeText']) {
|
|
// 有欢迎词
|
|
|
|
const lobbyConverseId = await call(ctx).getGroupLobbyConverseId(groupId);
|
|
|
|
if (!lobbyConverseId) {
|
|
// 如果没有文本频道则跳过
|
|
return;
|
|
}
|
|
|
|
const [welcomeText, meta] = await parseGroupWelcomeText(
|
|
ctx,
|
|
groupInfo.config['plugin:groupWelcomeText']
|
|
);
|
|
|
|
await ctx.call(
|
|
'chat.message.sendMessage',
|
|
{
|
|
converseId: lobbyConverseId,
|
|
groupId: groupId,
|
|
content: welcomeText,
|
|
meta,
|
|
},
|
|
{
|
|
meta: {
|
|
...ctx.meta,
|
|
userId: groupInfo.owner, // 以群组owner的名义
|
|
},
|
|
}
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
export default WelcomeService;
|
|
|
|
async function parseGroupWelcomeText(
|
|
ctx: TcContext,
|
|
welcomeText: string
|
|
): Promise<[string, {}]> {
|
|
const meta: Record<string, any> = {};
|
|
if (
|
|
welcomeText.includes('{nickname}') ||
|
|
welcomeText.includes('{@nickname}')
|
|
) {
|
|
const memberInfo = await call(ctx).getUserInfo(ctx.meta.userId);
|
|
const nickname = memberInfo.nickname;
|
|
const userId = String(memberInfo._id);
|
|
|
|
welcomeText = welcomeText.replaceAll('{nickname}', nickname);
|
|
|
|
if (welcomeText.includes('{@nickname}')) {
|
|
welcomeText = welcomeText.replaceAll(
|
|
'{@nickname}',
|
|
`[at=${userId}]${nickname}[/at]`
|
|
);
|
|
meta.mentions = [String(userId)];
|
|
}
|
|
}
|
|
|
|
return [welcomeText, meta];
|
|
}
|