feat: 增加添加应用机器人到群组的功能

pull/56/head
moonrailgun 3 years ago
parent 7d63f8b6c4
commit 1ba27abbbe

@ -2,7 +2,13 @@ import React, { useCallback, useState } from 'react';
import { Avatar, Button, Input, UserName } from '@capital/component';
import styled from 'styled-components';
import type { OpenAppInfo } from 'types';
import { useAsyncRequest, postRequest } from '@capital/common';
import {
useAsyncRequest,
postRequest,
showErrorToasts,
useGroupIdContext,
showSuccessToasts,
} from '@capital/common';
const Tip = styled.div`
color: #999;
@ -37,18 +43,29 @@ const AppInfoCard = styled.div({
const IntegrationPanel: React.FC = React.memo(() => {
const [appId, setAppId] = useState('');
const [openAppInfo, setOpenAppInfo] = useState<OpenAppInfo | null>(null);
const groupId = useGroupIdContext();
const [{ loading }, handleQueryApp] = useAsyncRequest(async () => {
const { data } = await postRequest('/openapi/app/get', {
appId,
});
if (!data) {
showErrorToasts('没找到该应用');
return;
}
setOpenAppInfo(data);
}, [appId]);
const handleAddBotIntoGroup = useCallback(() => {
console.log('TODO', appId);
}, [appId]);
const [{ loading: addBotLoading }, handleAddBotIntoGroup] =
useAsyncRequest(async () => {
await postRequest('/openapi/integration/addBotUser', {
appId,
groupId,
});
showSuccessToasts();
}, [appId]);
return (
<div>
@ -90,7 +107,12 @@ const IntegrationPanel: React.FC = React.memo(() => {
<div className="action">
{openAppInfo.capability.includes('bot') && (
<Button type="primary" onClick={handleAddBotIntoGroup}>
<Button
type="primary"
size="small"
loading={addBotLoading}
onClick={handleAddBotIntoGroup}
>
</Button>
)}

@ -21,7 +21,7 @@ class OpenBotService extends TcService {
params: {
appId: 'string',
},
visibility: 'private',
visibility: 'public',
});
this.registerAuthWhitelist(['/openapi/bot/login']);

@ -0,0 +1,83 @@
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;
Loading…
Cancel
Save