IMService.Mute.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Net;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using GxPress.Common.Exceptions;
  8. using GxPress.Common.Http;
  9. using GxPress.Request.GroupChat;
  10. using GxPress.Common.Extensions;
  11. using GxPress.Common.Tools;
  12. namespace GxPress.Service.Implement.IM
  13. {
  14. /// <summary>
  15. /// 群禁言 移除禁言
  16. /// </summary>
  17. public partial class IMService
  18. {
  19. /// <summary>
  20. /// 加入群禁言
  21. /// </summary>
  22. /// <param name="groupChatImId"></param>
  23. /// <returns></returns>
  24. public async Task<bool> InMute(string groupChatImId)
  25. {
  26. var imServiceUrl = ConfigHelper.GetValue("ServiceAddress:ImUrl");
  27. var groupChat = await _groupChatRepository.GetGroupChatByImIdAsync(groupChatImId);
  28. var token = await _cache.GetAsync<string>("ImToken");
  29. var url = $"{imServiceUrl}/chatgroups/{groupChatImId}/mute";
  30. var headers = new Dictionary<string, string> { { "Authorization", "Bearer " + token } };
  31. //获取成员
  32. var groupChatUsers = await _groupChatUserRepository.FindGroupChatUserByImId(groupChatImId);
  33. var users = await _userRepository.UserListInsAsync(groupChatUsers.Select(n => n.UserId).ToList());
  34. var dataObj = new { usernames = users.Select(n => n.ImId).ToList(), mute_duration = -1000 };
  35. var response =
  36. await HttpClientHelper.PostAsync(url, dataObj, headers);
  37. if (response.IsSuccessStatusCode)
  38. {
  39. //禁言
  40. var request = new GroupChatUpIsWordsRequest { Id = groupChat.Id };
  41. return await _groupChatRepository.UpIsWordsAsync(request);
  42. }
  43. if (response.StatusCode == HttpStatusCode.Forbidden)
  44. throw new BusinessException("该成员不在此群组");
  45. if (response.StatusCode == HttpStatusCode.NotFound)
  46. throw new BusinessException("此群组ID不存在");
  47. if (response.StatusCode == HttpStatusCode.Unauthorized)
  48. throw new BusinessException("未授权[无token、token错误、token过期]");
  49. if (response.StatusCode == HttpStatusCode.BadRequest)
  50. throw new BusinessException("owner用户不存在");
  51. if (response.StatusCode == HttpStatusCode.TooManyRequests)
  52. throw new BusinessException("接口被限流");
  53. return false;
  54. }
  55. /// <summary>
  56. /// 群解除禁言
  57. /// </summary>
  58. /// <param name="groupChatImId"></param>
  59. /// <returns></returns>
  60. public async Task<bool> RemoveMute(string groupChatImId)
  61. {
  62. var imServiceUrl = ConfigHelper.GetValue("ServiceAddress:ImUrl");
  63. var groupChat = await _groupChatRepository.GetGroupChatByImIdAsync(groupChatImId);
  64. var token = await _cache.GetAsync<string>("ImToken");
  65. var jsonValue = "";
  66. var headers = new Dictionary<string, string> { { "Authorization", "Bearer " + token } };
  67. //获取成员
  68. var groupChatUsers = await _groupChatUserRepository.FindGroupChatUserByImId(groupChatImId);
  69. var users = await _userRepository.UserListInsAsync(groupChatUsers.Select(n => n.UserId).ToList());
  70. foreach (var user in users)
  71. {
  72. jsonValue += user.ImId + ",";
  73. }
  74. if (!string.IsNullOrEmpty(jsonValue))
  75. jsonValue = jsonValue.Remove(jsonValue.Length - 1, 1);
  76. var url = $"{imServiceUrl}/chatgroups/{groupChatImId}/mute/{jsonValue}";
  77. var response =
  78. await HttpClientHelper.DeleteAsync(url, headers);
  79. if (response.IsSuccessStatusCode)
  80. {
  81. //解除禁言
  82. var request = new GroupChatUpIsWordsRequest { Id = groupChat.Id };
  83. return await _groupChatRepository.UpIsWordsAsync(request);
  84. }
  85. if (response.StatusCode == HttpStatusCode.Forbidden)
  86. throw new BusinessException("该成员不在此群组");
  87. if (response.StatusCode == HttpStatusCode.NotFound)
  88. throw new BusinessException("此群组ID不存在");
  89. if (response.StatusCode == HttpStatusCode.Unauthorized)
  90. throw new BusinessException("未授权[无token、token错误、token过期]");
  91. if (response.StatusCode == HttpStatusCode.BadRequest)
  92. throw new BusinessException("owner用户不存在");
  93. if (response.StatusCode == HttpStatusCode.TooManyRequests)
  94. throw new BusinessException("接口被限流");
  95. throw new BusinessException("禁言失败");
  96. return false;
  97. }
  98. }
  99. }