290 lines
8.8 KiB
C#
290 lines
8.8 KiB
C#
using Microsoft.AspNetCore.Mvc;
|
|
|
|
namespace Application.Web.Controllers.Chat;
|
|
|
|
/// <summary>
|
|
/// 公聊接口
|
|
/// </summary>
|
|
[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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取公聊信息
|
|
/// </summary>
|
|
/// <param name="type"></param>
|
|
/// <param name="page"></param>
|
|
/// <returns></returns>
|
|
[HttpGet]
|
|
public async Task<IPoAction> 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<int> 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 });
|
|
}
|
|
|
|
/// <summary>
|
|
/// 发言
|
|
/// </summary>
|
|
/// <param name="pars"></param>
|
|
/// <returns></returns>
|
|
[HttpPost]
|
|
public async Task<IPoAction> 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("发送失败,请稍后尝试!");
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 删除聊天记录
|
|
/// </summary>
|
|
/// <param name="chatId"></param>
|
|
/// <returns></returns>
|
|
[HttpGet]
|
|
public async Task<IPoAction> 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("操作失败,请稍后尝试!");
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 封禁ID
|
|
/// </summary>
|
|
/// <param name="chatId"></param>
|
|
/// <returns></returns>
|
|
[HttpGet]
|
|
public async Task<IPoAction> 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("操作失败,请稍后尝试!");
|
|
}
|
|
}
|
|
} |