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.
		
		
		
		
		
			
		
			
				
	
	
		
			84 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
			
		
		
	
	
			84 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
import { call, DataNotFoundError, TcContext } from 'tailchat-server-sdk';
 | 
						|
import { TcService, config } from 'tailchat-server-sdk';
 | 
						|
import { isValidStr } from '../../lib/utils';
 | 
						|
import type { OpenApp } from '../../models/openapi/app';
 | 
						|
 | 
						|
/**
 | 
						|
 * 第三方应用集成
 | 
						|
 */
 | 
						|
class OpenAppIntegrationService extends TcService {
 | 
						|
  get serviceName(): string {
 | 
						|
    return 'openapi.integration';
 | 
						|
  }
 | 
						|
 | 
						|
  onInit(): void {
 | 
						|
    if (!config.enableOpenapi) {
 | 
						|
      return;
 | 
						|
    }
 | 
						|
 | 
						|
    this.registerAction('addBotUser', this.addBotUser, {
 | 
						|
      params: {
 | 
						|
        appId: 'string',
 | 
						|
        groupId: 'string',
 | 
						|
      },
 | 
						|
    });
 | 
						|
  }
 | 
						|
 | 
						|
  /**
 | 
						|
   * 在群组中添加机器人用户
 | 
						|
   */
 | 
						|
  async addBotUser(
 | 
						|
    ctx: TcContext<{
 | 
						|
      appId: string;
 | 
						|
      groupId: string;
 | 
						|
    }>
 | 
						|
  ) {
 | 
						|
    const appId = ctx.params.appId;
 | 
						|
    const groupId = ctx.params.groupId;
 | 
						|
    const t = ctx.meta.t;
 | 
						|
 | 
						|
    const openapp: OpenApp = await ctx.call('openapi.app.get', {
 | 
						|
      appId,
 | 
						|
    });
 | 
						|
 | 
						|
    if (!openapp) {
 | 
						|
      throw new DataNotFoundError();
 | 
						|
    }
 | 
						|
 | 
						|
    if (!openapp.capability.includes('bot')) {
 | 
						|
      throw new Error(t('该应用的机器人服务尚未开通'));
 | 
						|
    }
 | 
						|
 | 
						|
    const botAccount: any = await ctx.call(
 | 
						|
      'openapi.bot.getOrCreateBotAccount',
 | 
						|
      {
 | 
						|
        appId,
 | 
						|
      }
 | 
						|
    );
 | 
						|
 | 
						|
    const userId = botAccount.userId;
 | 
						|
    if (!isValidStr(userId)) {
 | 
						|
      throw new Error(t('无法获取到机器人ID'));
 | 
						|
    }
 | 
						|
 | 
						|
    await ctx.call(
 | 
						|
      'group.joinGroup',
 | 
						|
      {
 | 
						|
        groupId,
 | 
						|
      },
 | 
						|
      {
 | 
						|
        meta: {
 | 
						|
          userId,
 | 
						|
        },
 | 
						|
      }
 | 
						|
    );
 | 
						|
 | 
						|
    await call(ctx).addGroupSystemMessage(
 | 
						|
      String(groupId),
 | 
						|
      `${ctx.meta.user.nickname} 在群组中添加了机器人 ${botAccount.nickname}`
 | 
						|
    );
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
export default OpenAppIntegrationService;
 |