123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804 |
- <?php
- declare(strict_types=1);
- namespace App\Controller\Api\v1;
- use App\Controller\AbstractController;
- use App\Master\Enum\RedisKeyEnum;
- use App\Master\Framework\Library\Tencent\TencentIm;
- use App\Model\Arts\LiveReportModel;
- use App\Model\Arts\LiveRoomAdminModel;
- use App\Model\Arts\LiveRoomBlackModel;
- use App\Model\Arts\LiveRoomFollowModel;
- use App\Model\Arts\LiveRoomGoodsModel;
- use App\Model\Arts\LiveRoomKeywordModel;
- use App\Model\Arts\LiveRoomLogLikeModel;
- use App\Model\Arts\LiveRoomModel;
- use App\Model\Arts\LiveSuggestModel;
- use App\Model\Arts\UserModel;
- use App\Request\Api\v1\Live\AdminListRequest;
- use App\Request\Api\v1\Live\AdminSetRequest;
- use App\Request\Api\v1\Live\AudienceRequest;
- use App\Request\Api\v1\Live\BlackAddRequest;
- use App\Request\Api\v1\Live\BlackRemoveRequest;
- use App\Request\Api\v1\Live\FollowRequest;
- use App\Request\Api\v1\Live\KeywordFilterAddRequest;
- use App\Request\Api\v1\Live\KeywordFilterDelRequest;
- use App\Request\Api\v1\Live\KeywordFilterListRequest;
- use App\Request\Api\v1\Live\LikeRequest;
- use App\Request\Api\v1\Live\ReportRequest;
- use App\Request\Api\v1\Live\RoomAddRequest;
- use App\Request\Api\v1\Live\RoomCloseRequest;
- use App\Request\Api\v1\Live\RoomDetailRequest;
- use App\Request\Api\v1\Live\RoomJoinRequest;
- use App\Request\Api\v1\Live\RoomListRequest;
- use App\Request\Api\v1\Live\ShutUpListRequest;
- use App\Request\Api\v1\Live\ShutUpRequest;
- use App\Request\Api\v1\Live\SuggestRequest;
- use App\Request\Api\v1\Live\TalkSetRequest;
- use App\Request\Api\v1\Live\UserInfoRequest;
- use App\Request\Api\v1\Live\UserRemoveRequest;
- use App\Service\QueueService;
- use App\Utils\AppResult;
- use App\Utils\Control\AuthUser;
- use App\Utils\LogUtil;
- use App\Utils\RedisUtil;
- use Hyperf\DbConnection\Db;
- use Hyperf\Di\Annotation\Inject;
- use function Hyperf\Stringable\str;
- /**
- * Demo
- * 示例
- */
- class LiveController extends AbstractController
- {
- // 日志模块名称
- const LOG_MODULE = 'v1/LiveController';
- #[Inject]
- protected QueueService $service;
- // 直播间列表
- public function room_list(RoomListRequest $request)
- {
- $params = $request->validated();
- $user = AuthUser::getInstance()->get();
- $model = new LiveRoomModel();
- $list = $model->getList(
- params : $params,
- orderBy: ['weigh' => 'desc'],
- select : ['id', 'user_id', 'room_no', 'name', 'logo', 'image', 'session', 'status', 'create_time'],
- with : [
- 'log' => function ($query) {
- $query->select(['id', 'session', 'like', 'ccu', 'goods_sales', 'share_num', 'follow_num', 'duration', 'open_time', 'close_time']);
- }
- ]
- );
- $im = new TencentIm();
- foreach ($list as $key => $val) {
- $list[$key]['push_url'] = $im->getLivePushUrl($val['room_no']);
- $list[$key]['play_url'] = $im->getLivePlayUrl($val['room_no']);
- }
- return AppResult::success('success', $list);
- }
- // 房间详情
- public function room_detail(RoomDetailRequest $request)
- {
- $params = $request->validated();
- $user = AuthUser::getInstance()->get();
- $model = new LiveRoomModel();
- $info = $model->getDetail(
- params: $params,
- select: ['id', 'user_id', 'room_no', 'name', 'logo', 'image', 'session', 'follow_num', 'status', 'create_time'],
- with : [
- 'log' => function ($query) {
- $query->select(['id', 'session', 'like', 'ccu', 'goods_sales', 'share_num', 'follow_num', 'duration', 'open_time', 'close_time']);
- },
- 'user' => function ($query) {
- $query->select(['id', 'nickname', 'avatar', 'gender']);
- }
- ]
- );
- $info['user']['chat_id'] = im_prefix($info['user']['id']);
- $info['user']['avatar'] = cdn_url($info['user']['avatar']);
- // 判断用户身份
- $info['role'] = 3;// 观众
- if ($user['id'] == $info['user_id']) {
- $info['role'] = 1;// 房主
- } else {
- $model = new LiveRoomAdminModel();
- $admin = $model->getAdmin($user['id'],$params['room_no']);
- if (!empty($admin)) {
- $info['role'] = 2;// 场控
- }
- }
- // 如果不是自己的直播间,需要判断关注按钮
- $info['is_follow'] = 2;//状态:0=未关注,1=关注,2=主播自己
- if ($info['user_id'] != $user['id']) {
- $info['is_follow'] = 0;
- // 查询是否关注对方
- if (LiveRoomFollowModel::query()->where(['room_id' => $info['id'], 'user_id' => $user['id'], 'status' => 1])->exists()) {
- $info['is_follow'] = 1; //状态:0=关注,1=互为关注
- }
- }
- // 配置直播推流连接
- $im = new TencentIm();
- $info['push_url'] = $im->getLivePushUrl($info['room_no']);
- $info['play_url'] = $im->getLivePlayUrl($info['room_no']);
- return AppResult::success('获取成功', $info);
- }
- // 创建直播间
- public function room_add(RoomAddRequest $request)
- {
- $params = $request->validated();
- $user = AuthUser::getInstance()->get();
- // 校验开播资格
- if ($user['group_id'] !== 2) {
- return AppResult::error('抱歉,您没有权限');
- }
- Db::beginTransaction();
- try {
- // 创建直播房间
- $model = new LiveRoomModel();
- if (!$model->createRoom($user, (string)$params['name'], (string)($params['image'] ?? ''))) {
- Db::rollBack();
- return AppResult::error($model->getMessage() ?? '操作失败');
- }
- $data = $model->getData();
- $room_status = $data['status'] ?? 0;// 直播房间状态
- RedisUtil::getInstance(RedisKeyEnum::ROOM_USER_LIST, $data['room_no'])->del();
- // 如果没开播
- if ($room_status == 0) {
- // IM直播创建房间 && 创建群组
- $im = new TencentIm();
- $im->create_group(im_prefix($user['id']), $data['room_no'], (string)$data['room_name'], notification: site('live_notice') ?? '');
- }
- Db::commit();
- } catch (\Exception $e) {
- Db::rollBack();
- return AppResult::error($e->getMessage() ?? '操作失败');
- }
- // 配置直播推流连接
- $im = new TencentIm();
- // 设置群属性
- $counter[] = [
- 'key' => 'talk_status',
- 'value' => (string)$data['talk_status']
- ];
- $counter[] = [
- 'key' => 'top_avatar',
- 'value' => ''
- ];
- $counter[] = [
- 'key' => 'like',
- 'value' => '0'
- ];
- $counter[] = [
- 'key' => 'online_member_num',
- 'value' => '0'
- ];
- $im->modify_group_attr($data['room_no'], $counter);
- return AppResult::success('创建成功', [
- 'room_no' => $data['room_no'],
- 'room_name' => $data['room_name'],
- 'push_url' => $im->getLivePushUrl($data['room_no']),
- 'play_url' => $im->getLivePlayUrl($data['room_no']),
- ]);
- }
- // 关闭直播间
- public function room_close(RoomCloseRequest $request)
- {
- $params = $request->validated();
- $user = AuthUser::getInstance()->get();
- $params['user_id'] = $user['id'];
- $model = new LiveRoomModel();
- $room = $model->getDetail(params: $params,with: ['log']);
- if (!$room) {
- return AppResult::error('直播间不存在或已关闭');
- }
- Db::beginTransaction();
- try {
- // 创建直播房间
- $model = new LiveRoomModel();
- if (!$model->closeRoom($room['id'])) {
- Db::rollBack();
- return AppResult::error($model->getMessage() ?? '操作失败');
- }
- LiveRoomGoodsModel::query()->where('room_no',$room['room_no'])->where('is_top',1)->update(['is_top' => 0]);
- // 腾讯直播创建房间 && 创建群组
- $tanIm = new TencentIm();
- $tanIm->destroy_group($room['room_no']);
- Db::commit();
- } catch (\Exception $e) {
- Db::rollBack();
- return AppResult::error($e->getMessage() ?? '操作失败');
- }
- $room['log']['close_time'] = time();
- $room['log']['duration'] = time() - $room['log']['open_time'];
- return AppResult::success('关闭成功',$room['log']);
- }
- // 进入房间
- public function room_join(RoomJoinRequest $request)
- {
- $params = $request->validated();
- $user = AuthUser::getInstance()->get();
- $model = new LiveRoomModel();
- $info = $model->getDetail(params: $params);
- if (!$info) {
- return AppResult::error('直播间已关闭');
- }
- if (RedisUtil::getInstance(RedisKeyEnum::ROOM_BLACK,$info['room_no'],im_prefix($user['id']))->get()){
- return AppResult::error('您被改直播间拉入黑名单,暂时无法进入');
- }
- // 处理直播间在线人数
- // 判断当前用户是否存在在直播间通过切换过来的
- $ROOM_USER_IN = RedisUtil::getInstance(RedisKeyEnum::ROOM_USER_IN)->hGet((string)$user['id']);
- if (!$ROOM_USER_IN || $ROOM_USER_IN != $info['id']) {
- if ($ROOM_USER_IN != $info['id']) {
- // 从原房间内移除此用户
- RedisUtil::getInstance(RedisKeyEnum::ROOM_USER_LIST, $info['room_no'])->zRem($user['id']);
- // 扣除在线用户在房间情况
- RedisUtil::getInstance(RedisKeyEnum::ROOM_USER_IN)->hDel((string)$user['id']);
- }
- // 记录在线用户在房间情况
- RedisUtil::getInstance(RedisKeyEnum::ROOM_USER_IN)->hSet((string)$user['id'], $info['room_no']);
- $value = LiveRoomLogLikeModel::query()->where('user_id', $user['id'])->where('room_no', $info['room_no'])->value('like');
- RedisUtil::getInstance(RedisKeyEnum::ROOM_USER_LIST, $info['room_no'])->zAdd((int)($value ?: 0), $user['id']);
- }
- // 直播间观看人数加一
- $this->service->liveRoomDataPush(['session' => $info['session'], 'ccu' => 1]);
- return AppResult::success('进入成功');
- }
- // 离开房间
- public function room_leave(RoomJoinRequest $request)
- {
- $params = $request->validated();
- $user = AuthUser::getInstance()->get();
- $model = new LiveRoomModel();
- $info = $model->getDetail(params: $params);
- if (!$info) {
- return AppResult::error('直播间已关闭');
- }
- // 从原房间内移除此用户
- RedisUtil::getInstance(RedisKeyEnum::ROOM_USER_LIST, $info['room_no'])->zRem($user['id']);
- // 扣除在线用户在房间情况
- RedisUtil::getInstance(RedisKeyEnum::ROOM_USER_IN)->hDel((string)$user['id']);
- if ($info) {
- $this->service->liveRoomDataPush(['session' => $info['session'], 'ccu' => -1]);
- if ($info['user_id'] == $user['id']) {
- // 如果是主播,则关闭直播间
- $model = new LiveRoomModel();
- $model->closeRoom($info['id']);
- // 腾讯直播解散群组
- $im = new TencentIm();
- $im->destroy_group($info['room_no']);
- }
- }
- return AppResult::success('已离开直播间');
- }
- // 房管列表
- public function admin_list(AdminListRequest $request)
- {
- $params = $request->validated();
- $model = new LiveRoomAdminModel();
- $model->setIsStatusSearchValue();
- $list = $model->getList(
- params: $params,
- with : [
- 'user' => function ($query) {
- $query->select(['id', 'nickname', 'avatar']);
- }
- ]
- );
- foreach ($list as $key => $val) {
- $list[$key]['user']['avatar'] = cdn_url($val['user']['avatar']);
- $list[$key]['user']['chat_id'] = im_prefix($val['user']['id']);
- }
- return AppResult::success('获取成功', $list);
- }
- // 设置超管
- public function admin_add(AdminSetRequest $request)
- {
- $params = $request->validated();
- $user = AuthUser::getInstance()->get();
- $model = new LiveRoomAdminModel();
- if (!$model->add($user['id'], (string)$params['room_no'], im_un_prefix($params['chat_id']))) {
- return AppResult::error($model->getMessage() ?? '操作失败');
- }
- return AppResult::success('设置成功');
- }
- // 删除超管
- public function admin_del(AdminSetRequest $request)
- {
- $params = $request->validated();
- $user = AuthUser::getInstance()->get();
- $model = new LiveRoomAdminModel();
- if (!$model->del($user['id'], (string)$params['room_no'], im_un_prefix($params['chat_id']))) {
- return AppResult::error($model->getMessage() ?? '操作失败');
- }
- return AppResult::success('删除成功');
- }
- // 房间观众信息
- public function user_info(UserInfoRequest $request)
- {
- $params = $request->validated();
- $user = AuthUser::getInstance()->get();
- $model = new LiveRoomModel();
- if (!$room = $model->getDetail(params: ['room_no' => $params['room_no']])) {
- return AppResult::error('直播间已关闭');
- }
- $userInfo = UserModel::query()->where('id',im_un_prefix($params['chat_id']))->where('status',1)->first();
- if (!$userInfo){
- return AppResult::error('用户不存在');
- }
- // 判断当前用户身份
- $user_role = 3;// 观众
- if ($user['id'] == $room['user_id']) {
- $user_role = 1;// 房主
- } else {
- $model = new LiveRoomAdminModel();
- $admin = $model->getAdmin($user['id'],$params['room_no']);
- if (!empty($admin)) {
- $user_role = 2;// 场控
- }
- }
- // 判断查询的用户身份
- $info_role = 3;// 观众
- if ($userInfo->id == $room['user_id']) {
- $info_role = 1;// 房主
- } else {
- $model = new LiveRoomAdminModel();
- $admin = $model->getAdmin($userInfo->id,$params['room_no']);
- if (!empty($admin)) {
- $info_role = 2;// 场控
- }
- }
- return AppResult::success('操作成功',[
- 'info' => [
- 'id' => $userInfo->id,
- 'chat_id' => $params['chat_id'],
- 'nickname' => $userInfo->nickname,
- 'avatar' => cdn_url($userInfo->avatar),
- 'role' => $info_role,
- 'is_shut_up' => RedisUtil::getInstance(RedisKeyEnum::ROOM_SHUT_UP,$params['room_no'],$params['chat_id'])->get() ? 1 : 0,
- 'is_black' => RedisUtil::getInstance(RedisKeyEnum::ROOM_BLACK,$params['room_no'],$params['chat_id'])->get() ? 1 : 0,
- ],
- 'me' => [
- 'role' => $user_role
- ]
- ]);
- }
- // 移除房间观众
- public function user_remove(UserRemoveRequest $request)
- {
- $params = $request->validated();
- $user = AuthUser::getInstance()->get();
- if ($user['id'] == im_un_prefix($params['chat_id'])) {
- return AppResult::error('无法对自己操作');
- }
- $model = new LiveRoomModel();
- if (!$room = $model->getDetail(params: ['room_no' => $params['room_no']])) {
- return AppResult::error('直播间已关闭');
- }
- if ($room['user_id'] != $user['id']) {
- $model = new LiveRoomAdminModel();
- if (!$model->getAdmin($user['id'], $params['room_no'])) {
- return AppResult::error('未拥有此权限');
- }
- }
- // 腾讯直播创建房间 && 创建群组
- $im = new TencentIm();
- if (!$im->delete_group_member($params['room_no'], im_prefix($params['chat_id']))) {
- return AppResult::error($im->getMessage() ?? '操作失败');
- }
- // 移除观众列表
- RedisUtil::getInstance(RedisKeyEnum::ROOM_USER_LIST, $room['room_no'])->zRem(im_un_prefix($params['chat_id']));
- // 直播间人数减一
- $this->service->liveRoomDataPush(['session' => $room['session'], 'ccu' => -1]);
- return AppResult::success('操作成功');
- }
- // 禁言列表
- public function shut_up_list(ShutUpListRequest $request)
- {
- $params = $request->validated();
- $user = AuthUser::getInstance()->get();
- $model = new LiveRoomModel();
- if (!$room = $model->getDetail(params: ['room_no' => $params['room_no']])) {
- return AppResult::error('直播间已关闭');
- }
- if ($room['user_id'] != $user['id']) {
- $model = new LiveRoomAdminModel();
- if (!$model->getAdmin($user['id'], $params['room_no'])) {
- return AppResult::error('未拥有此权限');
- }
- }
- $im = new TencentIm();
- if (!$im->get_group_muted_account($params['room_no'])) {
- return AppResult::error($im->getMessage() ?? '操作失败');
- }
- $data = $im->getData();
- $ids = [];
- foreach ($data['MutedAccountList'] as $item) {
- $ids[] = im_un_prefix($item['Member_Account']);
- }
- $model = new UserModel();
- $list = $model->getList(params: ['ids' => $ids], select: ['id', 'nickname', 'avatar']);
- foreach ($list as $key => $val) {
- $list[$key]['avatar'] = cdn_url($val['avatar']);
- $list[$key]['chat_id'] = im_prefix($val['id']);
- }
- return AppResult::success('操作成功', $list);
- }
- // 禁言
- public function shut_up(ShutUpRequest $request)
- {
- $params = $request->validated();
- $user = AuthUser::getInstance()->get();
- if ($user['id'] == im_un_prefix($params['chat_id'])) {
- return AppResult::error('无法对自己操作');
- }
- $model = new LiveRoomModel();
- if (!$model->shut_up($user['id'], (string)$params['room_no'], im_un_prefix($params['chat_id']), (int)($params['time'] ?? 86400))) {
- return AppResult::error($model->getMessage() ?? '操作失败');
- }
- return AppResult::success('操作成功');
- }
- // 黑名单列表
- public function black_list(ShutUpListRequest $request)
- {
- $params = $request->validated();
- $user = AuthUser::getInstance()->get();
- $model = new LiveRoomModel();
- if (!$room = $model->getDetail(params: ['room_no' => $params['room_no']])) {
- return AppResult::error('直播间已关闭');
- }
- if ($room['user_id'] != $user['id']) {
- $model = new LiveRoomAdminModel();
- if (!$model->getAdmin($user['id'], $params['room_no'])) {
- return AppResult::error('未拥有此权限');
- }
- }
- // $im = new TencentIm();
- // if (!$im->get_group_ban_member($params['room_no'])) {
- // return AppResult::error($im->getMessage() ?? '操作失败');
- // }
- // $data = $im->getData();
- // $ids = [];
- // foreach ($data['BannedAccountList'] as $item) {
- // $ids[] = im_un_prefix($item['Member_Account']);
- // }
- $ids = LiveRoomBlackModel::query()->where('room_no',$params['room_no'])->where('status',1)->where('end_time','>',time())->pluck('user_id')->toArray();
- $model = new UserModel();
- $list = $model->getList(params: ['ids' => $ids], select: ['id', 'nickname', 'avatar']);
- foreach ($list as $key => $val) {
- $list[$key]['avatar'] = cdn_url($val['avatar']);
- $list[$key]['chat_id'] = im_prefix($val['id']);
- }
- return AppResult::success('操作成功', $list);
- }
- // 封禁 黑名单
- public function black_add(BlackAddRequest $request)
- {
- $params = $request->validated();
- $user = AuthUser::getInstance()->get();
- if ($user['id'] == im_un_prefix($params['chat_id'])) {
- return AppResult::error('无法对自己操作');
- }
- $model = new LiveRoomModel();
- if (!$model->black_add($user['id'], (string)$params['room_no'], im_un_prefix($params['chat_id']), (int)($params['time'] ?? 86400))) {
- return AppResult::error($model->getMessage() ?? '操作失败');
- }
- return AppResult::success('操作成功');
- }
- // 移除 封禁 黑名单
- public function black_remove(BlackRemoveRequest $request)
- {
- $params = $request->validated();
- $user = AuthUser::getInstance()->get();
- if ($user['id'] == im_un_prefix($params['chat_id'])) {
- return AppResult::error('无法对自己操作');
- }
- $model = new LiveRoomModel();
- if (!$model->black_remove($user['id'], (string)$params['room_no'], im_un_prefix($params['chat_id']))) {
- return AppResult::error($model->getMessage() ?? '操作失败');
- }
- return AppResult::success('操作成功');
- }
- // 直播间观众列表(已关注的)
- public function audience(AudienceRequest $request)
- {
- $params = $request->validated();// 获取校验参数结果
- $model = new LiveRoomFollowModel();
- $model->setIsStatusSearchValue();
- $list = $model->getList(
- params : $params,
- orderBy: ['id' => 'desc'],
- with : [
- 'user' => function ($with) use ($params) {
- $with->select(['id', 'nickname', 'avatar']);
- }
- ]
- );
- // 查询当前直播间管理员id
- $adminIds = LiveRoomAdminModel::query()->where('room_no', $params['room_no'])->where('status', 1)->pluck('admin_id')->toArray();
- foreach ($list as $key => $val) {
- $list[$key]['is_admin'] = in_array($val['user_id'], $adminIds) ? 1 : 0;
- $list[$key]['user'] = [
- 'chat_id' => im_prefix($val['user']['id']),
- 'avatar' => cdn_url($val['user']['avatar']),
- 'nickname' => $val['user']['nickname'],
- ];
- }
- return AppResult::success('获取成功', $list);
- }
- // 直播间观众榜单
- public function top(LikeRequest $request)
- {
- $params = $request->validated();// 获取校验参数结果
- $user = AuthUser::getInstance()->get();
- $model = new LiveRoomModel();
- $room = $model->getDetail(params: $params);
- if (!$room) {
- return AppResult::error('直播间异常');
- }
- $model = new LiveRoomLogLikeModel();
- $list = $model->getTopList($room['room_no'], $room['user_id']);
- $meRank = RedisUtil::getInstance(RedisKeyEnum::ROOM_USER_LIST, $room['room_no'])->zRevRank($user['id']);
- return AppResult::success('success', [
- 'me' => [
- 'id' => $user['id'],
- 'chat_id' => im_prefix($user['id']),
- 'nickname' => $user['nickname'],
- 'avatar' => cdn_url($user['avatar']),
- 'rank' => $meRank >= 0 ? $meRank + 1 : ''
- ],
- 'list' => $list
- ]);
- }
- // 点赞
- public function like(LikeRequest $request)
- {
- $params = $request->validated();// 获取校验参数结果
- $user = AuthUser::getInstance()->get();
- $model = new LiveRoomModel();
- $room = $model->getDetail(params: $params);
- if (!$room) {
- return AppResult::error('直播间异常');
- }
- // 不可以赠送给自己
- if ($user['id'] == $room['user_id']) {
- return AppResult::error('不可以给自己点赞');
- }
- // 加入点赞队列
- $this->service->liveRoomDataPush([
- 'user_id' => $user['id'],
- 'room_id' => $room['id'],
- 'room_no' => $room['room_no'],
- 'session' => $room['session'],
- 'like' => 1
- ]);
- return AppResult::success('点赞成功');
- }
- // 关注 取消关注
- public function follow(FollowRequest $request)
- {
- $params = $request->validated();// 获取校验参数结果
- $user = AuthUser::getInstance()->get();
- $model = new LiveRoomModel();
- $room = $model->getDetail(params: $params);
- if (!$room) {
- return AppResult::error('直播间异常');
- }
- // 不可以赠送给自己
- if ($user['id'] == $room['user_id']) {
- return AppResult::error('不可以关注自己');
- }
- $model = new LiveRoomFollowModel();
- if ($params['status'] == 1) {
- if (!$model->follow($user['id'], $room['id'], $room['room_no'], $room['session'])) {
- return AppResult::error($model->getMessage() ?? '关注失败');
- }
- } else {
- if (!$model->cancelFollow($user['id'], $room['id'], $room['room_no'])) {
- return AppResult::error($model->getMessage() ?? '取关失败');
- }
- }
- return AppResult::success($model->getMessage() ?? '操作成功');
- }
- // 发言权限
- public function talk_set(TalkSetRequest $request)
- {
- $params = $request->validated();// 获取校验参数结果
- $user = AuthUser::getInstance()->get();
- $model = new LiveRoomModel();
- $room = $model->getDetail(params: $params);
- if (!$room) {
- return AppResult::error('直播间异常');
- }
- // 不可以赠送给自己
- if ($user['id'] != $room['user_id']) {
- $model = new LiveRoomAdminModel();
- if (!$model->getAdmin($user['id'], $room['room_no'])) {
- return AppResult::error('未拥有此权限');
- }
- }
- $model = new LiveRoomModel();
- if (!$model->query()->where('id', $room['id'])->update(['talk_status' => $params['talk_status'], 'update_time' => time()])) {
- return AppResult::error('操作失败');
- }
- // 设置群属性
- $counter[] = [
- 'key' => 'talk_status',
- 'value' => (string)$params['talk_status']
- ];
- $im = new TencentIm();
- if (!$im->modify_group_attr($room['room_no'], $counter)) {
- return AppResult::error($im->getMessage() ?? '操作成功', $im->getData());
- }
- return AppResult::success('操作成功');
- }
- // 卡顿上报
- public function suggest(SuggestRequest $request)
- {
- $params = $request->validated();// 获取校验参数结果
- $user = AuthUser::getInstance()->get();
- $model = new LiveRoomModel();
- $room = $model->getDetail(params: $params);
- if (!$room) {
- return AppResult::error('直播间异常');
- }
- $params['room_id'] = $room['id'];
- $model = new LiveSuggestModel();
- if (!$model->add($user['id'], $params)) {
- return AppResult::error('操作失败');
- }
- return AppResult::success('上报成功');
- }
- // 举报
- public function report(ReportRequest $request)
- {
- $params = $request->validated();// 获取校验参数结果
- $user = AuthUser::getInstance()->get();
- $model = new LiveRoomModel();
- $room = $model->getDetail(params: $params);
- if (!$room) {
- return AppResult::error('直播间异常');
- }
- $to_user = (new UserModel())->getDetail(params: ['id' => im_un_prefix($params['to_chat_id'])]);
- if (!$to_user) {
- return AppResult::error('举报用户不存在');
- }
- $params['room_id'] = $room['id'];
- $params['to_user_id'] = im_un_prefix($params['to_chat_id']);
- unset($params['to_chat_id']);
- $model = new LiveReportModel();
- if (!$model->add($user['id'], $params)) {
- return AppResult::error('操作失败');
- }
- return AppResult::success('举报成功');
- }
- // 敏感词
- public function keyword_filter_list(KeywordFilterListRequest $request)
- {
- $params = $request->validated();// 获取校验参数结果
- $user = AuthUser::getInstance()->get();
- $model = new LiveRoomModel();
- $room = $model->getDetail(params: $params);
- if (!$room) {
- return AppResult::error('直播间异常');
- }
- $model = new LiveRoomKeywordModel();
- return AppResult::success('获取成功',$model->getList($params));
- }
- // 敏感词
- public function keyword_filter_add(KeywordFilterAddRequest $request)
- {
- $params = $request->validated();// 获取校验参数结果
- $user = AuthUser::getInstance()->get();
- $model = new LiveRoomModel();
- $room = $model->getDetail(params: $params);
- if (!$room) {
- return AppResult::error('直播间异常');
- }
- if ($room['user_id'] != $user['id']) {
- $model = new LiveRoomAdminModel();
- if (!$model->getAdmin($user['id'], $params['room_no'])) {
- return AppResult::error('未拥有此权限');
- }
- }
- $model = new LiveRoomKeywordModel();
- if (!$model->add($user['id'], $room['id'], $room['room_no'], $params['keyword'])) {
- return AppResult::error($model->getMessage() ?? '操作失败');
- }
- return AppResult::success($model->getMessage() ?? '操作成功');
- }
- // 敏感词 删除
- public function keyword_filter_del(KeywordFilterDelRequest $request)
- {
- $params = $request->validated();// 获取校验参数结果
- $user = AuthUser::getInstance()->get();
- $model = new LiveRoomModel();
- $room = $model->getDetail(params: $params);
- if (!$room) {
- return AppResult::error('直播间异常');
- }
- if ($room['user_id'] != $user['id']) {
- $model = new LiveRoomAdminModel();
- if (!$model->getAdmin($user['id'], $params['room_no'])) {
- return AppResult::error('未拥有此权限');
- }
- }
- $model = new LiveRoomKeywordModel();
- if (!$model->del($params['keyword_id'])) {
- return AppResult::error($model->getMessage() ?? '操作失败');
- }
- return AppResult::success($model->getMessage() ?? '操作成功');
- }
- }
|