Merge branch 'dev' into pro
# Conflicts: # CHANGELOG.md # cmd # package.json # public/js/build/404.5645cb91.js # public/js/build/404.9598cd97.js # public/js/build/404.a5736629.js # public/js/build/AceEditor.8747edb1.js # public/js/build/AceEditor.af35593f.js # public/js/build/AceEditor.e7f5b602.js # public/js/build/DialogWrapper.0c7cd033.js # public/js/build/DialogWrapper.64072671.js # public/js/build/DialogWrapper.7fcb5b27.js # public/js/build/Drawio.2ca59c31.js # public/js/build/Drawio.6691a6ef.js # public/js/build/Drawio.e3576e4e.js # public/js/build/FileContent.3a899bcc.js # public/js/build/FileContent.c311c89c.js # public/js/build/FileContent.d8e600e1.js # public/js/build/FilePreview.87ca99d9.js # public/js/build/FilePreview.f8134ee5.js # public/js/build/FilePreview.f9f90ff4.js # public/js/build/IFrame.02598edc.js # public/js/build/IFrame.2a7489ee.js # public/js/build/IFrame.be9780e1.js # public/js/build/ImgUpload.29e2d88d.js # public/js/build/ImgUpload.a4eff264.js # public/js/build/ImgUpload.e96999cf.js # public/js/build/Minder.2bce6c16.js # public/js/build/Minder.b1d1145f.js # public/js/build/Minder.f5bc5aca.js # public/js/build/OnlyOffice.31e7af4f.js # public/js/build/OnlyOffice.574ad560.js # public/js/build/OnlyOffice.9ce921ed.js # public/js/build/ReportEdit.5eb3a319.js # public/js/build/ReportEdit.9141bb93.js # public/js/build/ReportEdit.e3369e09.js # public/js/build/SearchButton.906cea81.js # public/js/build/SearchButton.cf201525.js # public/js/build/SearchButton.d41addb6.js # public/js/build/TEditor.7b9a9d91.js # public/js/build/TEditor.971af80f.js # public/js/build/TEditor.cc94d929.js # public/js/build/TaskDetail.38815236.js # public/js/build/TaskDetail.d1a9952e.js # public/js/build/TaskDetail.dfd78b4a.js # public/js/build/add.0cfbdd9e.js # public/js/build/add.3673f91c.js # public/js/build/add.423bc480.js # public/js/build/application.005cc174.js # public/js/build/application.5587ac3b.js # public/js/build/application.5b8f123b.js # public/js/build/apps.4e0bf65b.js # public/js/build/apps.b0a3d4f5.js # public/js/build/apps.f77a8c4e.js # public/js/build/calendar.31470aa0.js # public/js/build/calendar.ad5d85d5.js # public/js/build/calendar.e08e7575.js # public/js/build/checkin.5d4c364e.js # public/js/build/checkin.ab08f01e.js # public/js/build/checkin.c05284a9.js # public/js/build/dashboard.7cced7be.js # public/js/build/dashboard.c82415db.js # public/js/build/dashboard.f6ed8299.js # public/js/build/dayjs.495f600d.js # public/js/build/dayjs.71653272.js # public/js/build/dayjs.cf033d87.js # public/js/build/delete.4072c68f.js # public/js/build/delete.5f06c51d.js # public/js/build/delete.b26aa3fd.js # public/js/build/device.4cff22ad.js # public/js/build/device.66a7e05a.js # public/js/build/device.a13f3ef0.js # public/js/build/dialog.97b951ce.js # public/js/build/dialog.e9f6d55f.js # public/js/build/dialog.eb7b795a.js # public/js/build/editor.18a511b5.js # public/js/build/editor.2cca497c.js # public/js/build/editor.e034df4e.js # public/js/build/email.0643f86b.js # public/js/build/email.1d00cb0c.js # public/js/build/email.d95a35c0.js # public/js/build/file.4fe82c29.js # public/js/build/file.684a63df.js # public/js/build/file.9dceb82f.js # public/js/build/fileMsg.0a0029c2.js # public/js/build/fileMsg.1f4ecb0f.js # public/js/build/fileMsg.f99b6f61.js # public/js/build/fileTask.72914205.js # public/js/build/fileTask.bf35fb6b.js # public/js/build/fileTask.f4356f14.js # public/js/build/index.236af26f.js # public/js/build/index.299c9f99.js # public/js/build/index.2ffa8f9e.js # public/js/build/index.7d6e1bbe.js # public/js/build/index.94a5d2da.css # public/js/build/index.af34aeb9.js # public/js/build/index.b0ae9460.js # public/js/build/index.b69b5f25.js # public/js/build/index.b71c2859.js # public/js/build/index.c3968cad.js # public/js/build/index.d1ae44be.js # public/js/build/index.e07db7f9.css # public/js/build/index.edee4b6e.css # public/js/build/index.ef9e1e57.js # public/js/build/index.fe32159a.js # public/js/build/jquery.0909250e.js # public/js/build/jquery.16b446fd.js # public/js/build/jquery.27f590f5.js # public/js/build/keyboard.3f5b3ac6.js # public/js/build/keyboard.5de3dd2c.js # public/js/build/keyboard.c3ef7d49.js # public/js/build/language.1fadd54c.js # public/js/build/language.8bb72294.js # public/js/build/language.f3d03ece.js # public/js/build/license.21482fde.js # public/js/build/license.60871496.js # public/js/build/license.add318a7.js # public/js/build/localforage.65ac7a2a.js # public/js/build/localforage.be4775a0.js # public/js/build/localforage.dd58f5ac.js # public/js/build/login.7560afa5.js # public/js/build/login.75b3978c.js # public/js/build/login.aa163163.js # public/js/build/meeting.a60d7e8d.js # public/js/build/meeting.aa5510c7.js # public/js/build/meeting.fdb9793b.js # public/js/build/password.267357fd.js # public/js/build/password.749ce44d.js # public/js/build/password.e6d81eb1.js # public/js/build/personal.69279937.js # public/js/build/personal.a27cef8e.js # public/js/build/personal.c613af3c.js # public/js/build/preload.5827bd38.js # public/js/build/preload.8ec61a5b.js # public/js/build/preload.c6189d87.js # public/js/build/preview.29e49902.js # public/js/build/preview.7329f0f4.js # public/js/build/preview.b452b0ee.js # public/js/build/preview.c64402ed.js # public/js/build/preview.ec796a92.js # public/js/build/preview.ec85a43c.js # public/js/build/pro.2128a514.js # public/js/build/pro.213d8da6.js # public/js/build/pro.9fb60d27.js # public/js/build/projectInvite.0b3bf524.js # public/js/build/projectInvite.393920f8.js # public/js/build/projectInvite.e9cee390.js # public/js/build/reportDetail.2db50632.js # public/js/build/reportDetail.90aaf973.js # public/js/build/reportDetail.d93cc650.js # public/js/build/reportEdit.84a81076.js # public/js/build/reportEdit.8baf23d4.js # public/js/build/reportEdit.d008dd34.js # public/js/build/swipe.0c72cce1.js # public/js/build/swipe.4567bb5d.js # public/js/build/swipe.92aebd0c.js # public/js/build/system.67c1b700.js # public/js/build/system.c45c70de.js # public/js/build/system.f3384133.js # public/js/build/task.1b9e0e77.js # public/js/build/task.a445c89e.js # public/js/build/task.d43091db.js # public/js/build/taskContent.20b80714.js # public/js/build/taskContent.3ebbd2f9.js # public/js/build/taskContent.9dc7a121.js # public/js/build/theme.72d103d1.js # public/js/build/theme.7f1b2ffd.js # public/js/build/theme.df79fe8f.js # public/js/build/token.0ecffef5.js # public/js/build/token.a7f5ccf5.js # public/js/build/token.ece75257.js # public/js/build/validEmail.1462dd30.js # public/js/build/validEmail.17a3e0d2.js # public/js/build/validEmail.ee19c1f3.js # public/js/build/version.137935c7.js # public/js/build/version.1441c1fd.js # public/js/build/version.b0154505.js # public/js/build/video.03b62c93.js # public/js/build/video.2dc7f3c6.js # public/js/build/video.531c68e2.js # public/js/build/view.18713f1b.js # public/js/build/view.7770155e.js # public/js/build/view.8c6a0cc1.js # public/manifest.json
This commit is contained in:
@@ -34,6 +34,8 @@ use App\Models\WebSocketDialogUser;
|
||||
use App\Models\UserTaskBrowse;
|
||||
use App\Models\UserFavorite;
|
||||
use App\Models\UserRecentItem;
|
||||
use App\Models\UserTag;
|
||||
use App\Models\UserTagRecognition;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use App\Models\UserEmailVerification;
|
||||
use App\Module\AgoraIO\AgoraTokenGenerator;
|
||||
@@ -386,6 +388,9 @@ class UsersController extends AbstractController
|
||||
$data['nickname_original'] = $user->getRawOriginal('nickname');
|
||||
$data['department_name'] = $user->getDepartmentName();
|
||||
$data['department_owner'] = UserDepartment::where('parent_id',0)->where('owner_userid', $user->userid)->exists(); // 适用默认部门下第1级负责人才能添加部门OKR
|
||||
$tagMeta = UserTag::listWithMeta($user->userid, $user);
|
||||
$data['personal_tags'] = $tagMeta['top'];
|
||||
$data['personal_tags_total'] = $tagMeta['total'];
|
||||
return Base::retSuccess('success', $data);
|
||||
}
|
||||
|
||||
@@ -446,6 +451,9 @@ class UsersController extends AbstractController
|
||||
* @apiParam {String} [tel] 电话
|
||||
* @apiParam {String} [nickname] 昵称
|
||||
* @apiParam {String} [profession] 职位/职称
|
||||
* @apiParam {String} [birthday] 生日(格式:YYYY-MM-DD)
|
||||
* @apiParam {String} [address] 地址
|
||||
* @apiParam {String} [introduction] 个人简介
|
||||
* @apiParam {String} [lang] 语言(比如:zh/en)
|
||||
*
|
||||
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
||||
@@ -509,6 +517,40 @@ class UsersController extends AbstractController
|
||||
$upLdap['employeeType'] = $profession;
|
||||
}
|
||||
}
|
||||
// 生日
|
||||
if (Arr::exists($data, 'birthday')) {
|
||||
$birthday = trim((string) Request::input('birthday'));
|
||||
if ($birthday === '') {
|
||||
$user->birthday = null;
|
||||
} else {
|
||||
try {
|
||||
if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $birthday)) {
|
||||
$birthdayDate = Carbon::createFromFormat('Y-m-d', $birthday);
|
||||
} else {
|
||||
$birthdayDate = Carbon::parse($birthday);
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
return Base::retError('生日格式错误');
|
||||
}
|
||||
$user->birthday = $birthdayDate->format('Y-m-d');
|
||||
}
|
||||
}
|
||||
// 地址
|
||||
if (Arr::exists($data, 'address')) {
|
||||
$address = trim((string) Request::input('address'));
|
||||
if (mb_strlen($address) > 100) {
|
||||
return Base::retError('地址最多只能设置100个字');
|
||||
}
|
||||
$user->address = $address ?: null;
|
||||
}
|
||||
// 个人简介
|
||||
if (Arr::exists($data, 'introduction')) {
|
||||
$introduction = trim((string) Request::input('introduction'));
|
||||
if (mb_strlen($introduction) > 500) {
|
||||
return Base::retError('个人简介最多只能设置500个字');
|
||||
}
|
||||
$user->introduction = $introduction ?: null;
|
||||
}
|
||||
// 语言
|
||||
if (Arr::exists($data, 'lang')) {
|
||||
$lang = trim(Request::input('lang'));
|
||||
@@ -767,8 +809,12 @@ class UsersController extends AbstractController
|
||||
public function basic()
|
||||
{
|
||||
$sharekey = Request::header('sharekey');
|
||||
if (empty($sharekey) || !Meeting::getShareInfo($sharekey)) {
|
||||
User::auth();
|
||||
$shareInfo = $sharekey ? Meeting::getShareInfo($sharekey) : null;
|
||||
$viewer = null;
|
||||
if (empty($shareInfo)) {
|
||||
$viewer = User::auth();
|
||||
} elseif (Doo::userId() > 0) {
|
||||
$viewer = User::whereUserid(Doo::userId())->first();
|
||||
}
|
||||
//
|
||||
$userid = Request::input('userid');
|
||||
@@ -786,6 +832,9 @@ class UsersController extends AbstractController
|
||||
$basic = UserDelete::userid2basic($id);
|
||||
}
|
||||
if ($basic) {
|
||||
$tagMeta = UserTag::listWithMeta($basic->userid, $viewer);
|
||||
$basic->personal_tags = $tagMeta['top'];
|
||||
$basic->personal_tags_total = $tagMeta['total'];
|
||||
//
|
||||
$retArray[] = $basic;
|
||||
}
|
||||
@@ -1450,6 +1499,233 @@ class UsersController extends AbstractController
|
||||
return Base::retSuccess('success', $data);
|
||||
}
|
||||
|
||||
protected function buildUserTagResponse(?User $viewer, int $targetUserId, string $message = 'success')
|
||||
{
|
||||
return Base::retSuccess($message, UserTag::listWithMeta($targetUserId, $viewer));
|
||||
}
|
||||
|
||||
/**
|
||||
* @api {get} api/users/tags/lists 10.1. 获取个性标签列表
|
||||
*
|
||||
* @apiDescription 需要token身份
|
||||
* @apiVersion 1.0.0
|
||||
* @apiGroup users
|
||||
* @apiName tags__lists
|
||||
*
|
||||
* @apiParam {Number} [userid] 会员ID(不传默认为当前用户)
|
||||
*
|
||||
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
||||
* @apiSuccess {String} msg 返回信息(错误描述)
|
||||
* @apiSuccess {Object} data 返回数据
|
||||
* @apiSuccessExample {json} data:
|
||||
{
|
||||
"list": [
|
||||
{
|
||||
"id": 1,
|
||||
"name": "认真负责",
|
||||
"recognition_total": 3,
|
||||
"recognized": true,
|
||||
"can_edit": true,
|
||||
"can_delete": true
|
||||
}
|
||||
],
|
||||
"top": [ ],
|
||||
"total": 1
|
||||
}
|
||||
*/
|
||||
public function tags__lists()
|
||||
{
|
||||
$viewer = User::auth();
|
||||
$userid = intval(Request::input('userid')) ?: $viewer->userid;
|
||||
$target = User::whereUserid($userid)->first();
|
||||
if (empty($target)) {
|
||||
return Base::retError('会员不存在');
|
||||
}
|
||||
return $this->buildUserTagResponse($viewer, $target->userid);
|
||||
}
|
||||
|
||||
/**
|
||||
* @api {post} api/users/tags/add 10.2. 新增个性标签
|
||||
*
|
||||
* @apiDescription 需要token身份
|
||||
* @apiVersion 1.0.0
|
||||
* @apiGroup users
|
||||
* @apiName tags__add
|
||||
*
|
||||
* @apiParam {Number} [userid] 会员ID(不传默认为当前用户)
|
||||
* @apiParam {String} name 标签名称(1-20个字符)
|
||||
*
|
||||
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
||||
* @apiSuccess {String} msg 返回信息(错误描述)
|
||||
* @apiSuccess {Object} data 返回数据,同“获取个性标签列表”
|
||||
*/
|
||||
public function tags__add()
|
||||
{
|
||||
$viewer = User::auth();
|
||||
$userid = intval(Request::input('userid')) ?: $viewer->userid;
|
||||
$target = User::whereUserid($userid)->first();
|
||||
if (empty($target)) {
|
||||
return Base::retError('会员不存在');
|
||||
}
|
||||
|
||||
$name = trim((string) Request::input('name'));
|
||||
if ($name === '') {
|
||||
return Base::retError('请输入个性标签');
|
||||
}
|
||||
if (mb_strlen($name) > 20) {
|
||||
return Base::retError('标签名称最多只能设置20个字');
|
||||
}
|
||||
if (UserTag::where('user_id', $userid)->where('name', $name)->exists()) {
|
||||
return Base::retError('标签已存在');
|
||||
}
|
||||
if (UserTag::where('user_id', $userid)->count() >= 100) {
|
||||
return Base::retError('每位会员最多添加100个标签');
|
||||
}
|
||||
|
||||
$tag = UserTag::create([
|
||||
'user_id' => $userid,
|
||||
'name' => $name,
|
||||
'created_by' => $viewer->userid,
|
||||
'updated_by' => $viewer->userid,
|
||||
]);
|
||||
$tag->save();
|
||||
|
||||
return $this->buildUserTagResponse($viewer, $userid, '添加成功');
|
||||
}
|
||||
|
||||
/**
|
||||
* @api {post} api/users/tags/update 10.3. 修改个性标签
|
||||
*
|
||||
* @apiDescription 需要token身份
|
||||
* @apiVersion 1.0.0
|
||||
* @apiGroup users
|
||||
* @apiName tags__update
|
||||
*
|
||||
* @apiParam {Number} tag_id 标签ID
|
||||
* @apiParam {String} name 标签名称(1-20个字符)
|
||||
*
|
||||
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
||||
* @apiSuccess {String} msg 返回信息(错误描述)
|
||||
* @apiSuccess {Object} data 返回数据,同“获取个性标签列表”
|
||||
*/
|
||||
public function tags__update()
|
||||
{
|
||||
$viewer = User::auth();
|
||||
$tagId = intval(Request::input('tag_id'));
|
||||
$name = trim((string) Request::input('name'));
|
||||
if ($tagId <= 0) {
|
||||
return Base::retError('参数错误');
|
||||
}
|
||||
if ($name === '') {
|
||||
return Base::retError('请输入个性标签');
|
||||
}
|
||||
if (mb_strlen($name) > 20) {
|
||||
return Base::retError('标签名称最多只能设置20个字');
|
||||
}
|
||||
$tag = UserTag::find($tagId);
|
||||
if (empty($tag)) {
|
||||
return Base::retError('标签不存在');
|
||||
}
|
||||
if (!$tag->canManage($viewer)) {
|
||||
return Base::retError('无权操作该标签');
|
||||
}
|
||||
if ($name !== $tag->name && UserTag::where('user_id', $tag->user_id)->where('name', $name)->where('id', '!=', $tag->id)->exists()) {
|
||||
return Base::retError('标签已存在');
|
||||
}
|
||||
|
||||
if ($name !== $tag->name) {
|
||||
$tag->updateInstance([
|
||||
'name' => $name,
|
||||
'updated_by' => $viewer->userid,
|
||||
]);
|
||||
} else {
|
||||
$tag->updateInstance([
|
||||
'updated_by' => $viewer->userid,
|
||||
]);
|
||||
}
|
||||
$tag->save();
|
||||
|
||||
return $this->buildUserTagResponse($viewer, $tag->user_id, '保存成功');
|
||||
}
|
||||
|
||||
/**
|
||||
* @api {post} api/users/tags/delete 10.4. 删除个性标签
|
||||
*
|
||||
* @apiDescription 需要token身份
|
||||
* @apiVersion 1.0.0
|
||||
* @apiGroup users
|
||||
* @apiName tags__delete
|
||||
*
|
||||
* @apiParam {Number} tag_id 标签ID
|
||||
*
|
||||
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
||||
* @apiSuccess {String} msg 返回信息(错误描述)
|
||||
* @apiSuccess {Object} data 返回数据,同“获取个性标签列表”
|
||||
*/
|
||||
public function tags__delete()
|
||||
{
|
||||
$viewer = User::auth();
|
||||
$tagId = intval(Request::input('tag_id'));
|
||||
if ($tagId <= 0) {
|
||||
return Base::retError('参数错误');
|
||||
}
|
||||
$tag = UserTag::find($tagId);
|
||||
if (empty($tag)) {
|
||||
return Base::retError('标签不存在');
|
||||
}
|
||||
if (!$tag->canManage($viewer)) {
|
||||
return Base::retError('无权操作该标签');
|
||||
}
|
||||
|
||||
$userId = $tag->user_id;
|
||||
$tag->delete();
|
||||
|
||||
return $this->buildUserTagResponse($viewer, $userId, '删除成功');
|
||||
}
|
||||
|
||||
/**
|
||||
* @api {post} api/users/tags/recognize 10.5. 认可个性标签
|
||||
*
|
||||
* @apiDescription 需要token身份
|
||||
* @apiVersion 1.0.0
|
||||
* @apiGroup users
|
||||
* @apiName tags__recognize
|
||||
*
|
||||
* @apiParam {Number} tag_id 标签ID
|
||||
*
|
||||
* @apiSuccess {Number} ret 返回状态码(1正确、0错误)
|
||||
* @apiSuccess {String} msg 返回信息(错误描述)
|
||||
* @apiSuccess {Object} data 返回数据,同“获取个性标签列表”
|
||||
*/
|
||||
public function tags__recognize()
|
||||
{
|
||||
$viewer = User::auth();
|
||||
$tagId = intval(Request::input('tag_id'));
|
||||
if ($tagId <= 0) {
|
||||
return Base::retError('参数错误');
|
||||
}
|
||||
$tag = UserTag::find($tagId);
|
||||
if (empty($tag)) {
|
||||
return Base::retError('标签不存在');
|
||||
}
|
||||
|
||||
$recognition = UserTagRecognition::where('tag_id', $tagId)
|
||||
->where('user_id', $viewer->userid)
|
||||
->first();
|
||||
if ($recognition) {
|
||||
$recognition->delete();
|
||||
$message = '已取消认可';
|
||||
} else {
|
||||
UserTagRecognition::create([
|
||||
'tag_id' => $tagId,
|
||||
'user_id' => $viewer->userid,
|
||||
]);
|
||||
$message = '认可成功';
|
||||
}
|
||||
|
||||
return $this->buildUserTagResponse($viewer, $tag->user_id, $message);
|
||||
}
|
||||
|
||||
/**
|
||||
* @api {get} api/users/meeting/link 【会议】获取分享链接
|
||||
*
|
||||
@@ -2181,7 +2457,8 @@ class UsersController extends AbstractController
|
||||
'users.nickname',
|
||||
'users.userimg',
|
||||
'user_bots.clear_day',
|
||||
'user_bots.webhook_url'
|
||||
'user_bots.webhook_url',
|
||||
'user_bots.webhook_events'
|
||||
])
|
||||
->orderByDesc('id')
|
||||
->get()
|
||||
@@ -2191,6 +2468,7 @@ class UsersController extends AbstractController
|
||||
$bot['name'] = $bot['nickname'];
|
||||
$bot['avatar'] = $bot['userimg'];
|
||||
$bot['system_name'] = UserBot::systemBotName($bot['name']);
|
||||
$bot['webhook_events'] = UserBot::normalizeWebhookEvents($bot['webhook_events'] ?? null, empty($bot['webhook_events']));
|
||||
unset($bot['userid'], $bot['nickname'], $bot['userimg']);
|
||||
}
|
||||
|
||||
@@ -2242,11 +2520,13 @@ class UsersController extends AbstractController
|
||||
'avatar' => $botUser->userimg,
|
||||
'clear_day' => 0,
|
||||
'webhook_url' => '',
|
||||
'webhook_events' => [UserBot::WEBHOOK_EVENT_MESSAGE],
|
||||
'system_name' => UserBot::systemBotName($botUser->email),
|
||||
];
|
||||
if ($userBot) {
|
||||
$data['clear_day'] = $userBot->clear_day;
|
||||
$data['webhook_url'] = $userBot->webhook_url;
|
||||
$data['webhook_events'] = $userBot->webhook_events;
|
||||
}
|
||||
return Base::retSuccess('success', $data);
|
||||
}
|
||||
@@ -2327,6 +2607,9 @@ class UsersController extends AbstractController
|
||||
if (Arr::exists($data, 'webhook_url')) {
|
||||
$upBot['webhook_url'] = trim($data['webhook_url']);
|
||||
}
|
||||
if (Arr::exists($data, 'webhook_events')) {
|
||||
$upBot['webhook_events'] = UserBot::normalizeWebhookEvents($data['webhook_events'], false);
|
||||
}
|
||||
//
|
||||
if ($upUser) {
|
||||
$botUser->updateInstance($upUser);
|
||||
@@ -2343,11 +2626,13 @@ class UsersController extends AbstractController
|
||||
'avatar' => $botUser->userimg,
|
||||
'clear_day' => 0,
|
||||
'webhook_url' => '',
|
||||
'webhook_events' => [UserBot::WEBHOOK_EVENT_MESSAGE],
|
||||
'system_name' => UserBot::systemBotName($botUser->email),
|
||||
];
|
||||
if ($userBot) {
|
||||
$data['clear_day'] = $userBot->clear_day;
|
||||
$data['webhook_url'] = $userBot->webhook_url;
|
||||
$data['webhook_events'] = $userBot->webhook_events;
|
||||
}
|
||||
return Base::retSuccess($botId ? '修改成功' : '添加成功', $data);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user