using Microsoft.AspNetCore.Mvc; namespace Application.Web.Controllers.Chat; /// /// 公聊接口 /// [Route("Chat/[controller]/[action]")] [ApiController] [Authorize] public class ChatController : ControllerBase { private readonly IGameChatService _chatService; private readonly IGameGoodsService _goodsService; private readonly IUnitUserService _userService; private readonly IGameTeamService _teamService; public ChatController(IGameChatService chatService, IGameGoodsService goodsService, IUnitUserService userService, IGameTeamService teamService) { _chatService = chatService; _goodsService = goodsService; _userService = userService; _teamService = teamService; } /// /// 获取公聊信息 /// /// /// /// [HttpGet] public async Task GetChatData(int type, int page) { string userId = StateHelper.userId; int areaId = StateHelper.areaId; var myTeam = await _teamService.GetUserTeamData(userId); string teamId = myTeam.teamId; string groupId = ""; RefAsync Total = 0; var data = await _chatService.GetChatData(userId, type, areaId, teamId, groupId, page, 10, Total); //物品数量 int sendGoodsCount = 0; string sendGoodsName = ""; switch (type) { case 0: sendGoodsCount = await _goodsService.GetUserGoodsCount(userId, GameConfig.SendChatGoodsBase); sendGoodsName = "小海螺"; break; case 3: sendGoodsCount = await _goodsService.GetUserGoodsCount(userId, GameConfig.SendChatGoodsArea); sendGoodsName = "大海螺"; break; case 4: sendGoodsCount = await _goodsService.GetUserGoodsCount(userId, GameConfig.SendChatGoodsService); sendGoodsName = "金海螺"; break; } int chatRole = await _userService.GetUserConfigInfo(userId, nameof(UserEnum.ConfigCode.ChatRole)); //获取聊天权限 return PoAction.Ok(new { data, total = Total.Value, sendGoodsCount, sendGoodsName, chatRole }); } /// /// 发言 /// /// /// [HttpPost] public async Task SendChat([FromBody] SendChatParms pars) { if (string.IsNullOrEmpty(pars.sign)) { return PoAction.Message("发言内容不能为空!"); } string userId = StateHelper.userId; int areaId = StateHelper.areaId; string par = string.Empty; string code = nameof(GameChatEnum.Code.Public); int goodsId = 0; bool isSend = false; switch (pars.type) { case 0: isSend = true; code = nameof(GameChatEnum.Code.Public); goodsId = GameConfig.SendChatGoodsBase; break; case 1: code = nameof(GameChatEnum.Code.Team); var myTeam = await _teamService.GetUserTeamData(userId); par = myTeam.teamId; isSend = par != "0"; break; case 2: isSend = false; code = nameof(GameChatEnum.Code.Group); par = ""; break; case 3: isSend = true; goodsId = GameConfig.SendChatGoodsArea; code = nameof(GameChatEnum.Code.Region); break; case 4: isSend = true; goodsId = GameConfig.SendChatGoodsService; code = nameof(GameChatEnum.Code.Dress); break; } if (isSend == false) { return PoAction.Message("无法发言!"); } int chatRole = await _userService.GetUserConfigInfo(userId, nameof(UserEnum.ConfigCode.ChatRole)); if (chatRole < 0) { return PoAction.Message("发言权限已被系统限制!"); } bool upGoods = true; if (goodsId != 0) { bool checkGoods = true; if ((nameof(GameChatEnum.Code.Region) == code || nameof(GameChatEnum.Code.Public) == code) && chatRole > 0) { checkGoods = false; upGoods = false; } else if (nameof(GameChatEnum.Code.Dress) == code && chatRole > 1) { checkGoods = false; upGoods = false; } if (checkGoods) { var myCount = await _goodsService.GetUserGoodsCount(userId, goodsId); if (myCount < 1) { return PoAction.Message("暂无发言道具,去商城购买海螺才可以发言哦!"); } } } string sign = StringAssist.NoHTML(pars.sign); bool result = await _chatService.SendChat(userId, areaId, code, sign, par); if (result) { if (goodsId != 0 && upGoods) //扣除道具 { await _goodsService.UpdateUserGoods(userId, 0, goodsId, 1, "发言"); } return PoAction.Ok(true); } else { return PoAction.Message("发送失败,请稍后尝试!"); } } /// /// 删除聊天记录 /// /// /// [HttpGet] public async Task DeleteChat(string chatId) { var chatInfo = await _chatService.GetChatInfo(chatId); if (chatInfo == null) { return PoAction.Message("发言不存在!"); } if (chatInfo.state != 1) { return PoAction.Message("发言不存在!"); } if (chatInfo.areaId != StateHelper.areaId) { return PoAction.Message("发言不存在!"); } bool IsOp = false; string userId = StateHelper.userId; int chatRole = await _userService.GetUserConfigInfo(userId, nameof(UserEnum.ConfigCode.ChatRole)); if ((chatInfo.code == nameof(GameChatEnum.Code.Public) || chatInfo.code == nameof(GameChatEnum.Code.Region)) && chatRole > 0) { IsOp = true; } else if (chatRole > 1 && chatInfo.code == nameof(GameChatEnum.Code.Dress)) { IsOp = true; } if (IsOp == false) { return PoAction.Message("无权限!"); } if (await _chatService.DeleteChat(chatId, userId)) { return PoAction.Ok(true); } else { return PoAction.Message("操作失败,请稍后尝试!"); } } /// /// 封禁ID /// /// /// [HttpGet] public async Task BlackUser(string chatId) { var chatInfo = await _chatService.GetChatInfo(chatId); if (chatInfo == null) { return PoAction.Message("发言不存在!"); } if (chatInfo.state != 1) { return PoAction.Message("发言不存在!"); } if (chatInfo.areaId != StateHelper.areaId) { return PoAction.Message("发言不存在!"); } if (chatInfo.userId == StateHelper.userId) { return PoAction.Message("不能封禁自己!"); } bool IsOp = false; string userId = StateHelper.userId; int chatRole = await _userService.GetUserConfigInfo(userId, nameof(UserEnum.ConfigCode.ChatRole)); if ((chatInfo.code == nameof(GameChatEnum.Code.Public) || chatInfo.code == nameof(GameChatEnum.Code.Region)) && chatRole > 0) { IsOp = true; } else if (chatRole > 1 && chatInfo.code == nameof(GameChatEnum.Code.Dress)) { IsOp = true; } if (IsOp == false) { return PoAction.Message("无权限!"); } var otConfig = await _userService.GetUserConfigInfo(chatInfo.userId); if (otConfig.chatRole < 0) { return PoAction.Message("Ta已被禁言,无需封禁!"); } if (otConfig.chatRole != 0) { return PoAction.Message("您无权封禁!"); } if (await _userService.UpdateUserConfigInfo(chatInfo.userId, nameof(UserEnum.ConfigCode.ChatRole), -1)) { return PoAction.Ok(true); } else { return PoAction.Message("操作失败,请稍后尝试!"); } } }