public async Task <int> SendMessageToGroup(Message message, int groupId) { var whoSent = await userService.GetUserById(userProvider.GetUserId(Context)); await userService.MakeUserOnline(whoSent.Id, Context.ConnectionId); try { if (!await chatsService.ExistsInConversation(groupId, whoSent.Id)) { await SendError(Context.ConnectionId, "You must join this group to send messages."); return(0); } if (await bansService.IsBannedFromConversation(groupId, whoSent.Id)) { await SendError(Context.ConnectionId, "You were banned in this group."); return(0); } //we can't trust user on what's in user field message.User = whoSent.ToAppUserDto(); MessageDataModel created; if (message.Type == MessageType.Attachment) { created = await messagesService.AddAttachmentMessage(message, groupId, whoSent.Id); } else { created = await messagesService.AddMessage(message, groupId, whoSent.Id); } message.TimeReceived = created.TimeReceived.ToUTCString(); message.Id = created.MessageID; message.State = MessageState.Delivered; await SendMessageToGroupExcept(groupId, Context.ConnectionId, whoSent.Id, message); return(created.MessageID); } catch (Exception ex) { await SendError(Context.ConnectionId, ex.Message); logger.LogError(ex.Message); return(0); } }