public async Task <Message> SaveMessage(TGMessageDTO dto) { var message = new Message { Created = dto.Date.ToDateTime().Value, Updated = dto.EditDate.ToDateTime(), FromTGUserId = dto.From.Id, Text = dto.Text, TGChatId = dto.Chat.Id, TGMessageId = dto.MessageId }; if (dto.Entities != null && dto.Entities.Any()) { foreach (var entityDTO in dto.Entities) { message.MessageEntities.Add(new MessageEntity { Language = entityDTO.Language, Length = entityDTO.Length, Offset = entityDTO.Offset, Type = entityDTO.GetEntityType(), Url = entityDTO.Url }); } } await _repository.AddAsync(message); return(message); }
public async Task FeedMessage(TGMessageDTO dto) { await _chatService.GetOrCreateChat(dto.Chat, dto.From.Id); var user = await _userService.GetOrCreateUser(dto.From); var message = await this.SaveMessage(dto); await this.HandleMessage(dto, user, message); }
public async Task HandleMessage(TGMessageDTO dto, User user, Message message) { var chatType = dto.Chat.GetChatType(); if (chatType != ChatType.Private) { if (dto.Text.ToUpper().Contains(ApplicationDefaults.CNBotUserName)) { // Only use command in private chat await _telegramHttpClient.SendMessage(TGSendMessageDTO.BuildOnlyUseInPrivateMessage(dto.Chat.Id, dto.MessageId)); } //If not my command. Nothing to do return; } var utcNow = DateTime.UtcNow; UserCommandType commandType = dto.GetCommandType(); if (commandType == UserCommandType.None) { var lastCommand = await _userService.FindLastCommand(user.Id); if (lastCommand == null || lastCommand.Completed) { // No command found. So we just show the default message await _telegramHttpClient.SendMessage(TGSendMessageDTO.BuildUnrecognizedMessage(dto.Chat.Id, dto.MessageId)); return; } else { commandType = lastCommand.Type; } } var command = new UserCommand { Created = utcNow, Completed = false, Type = commandType, UserId = user.Id, Text = dto.Text }; await _userService.AddCommand(command); await this.HandleCommand(dto, command, message); if (command.Type != UserCommandType.Remove && dto.Entities != null && dto.Entities.Any()) { _eventBus.Publish(new TelegramMessageEntityExtractEvent(dto.Entities)); } }
private async Task HandleCommand(TGMessageDTO dto, UserCommand command, Message message) { switch (command.Type) { case UserCommandType.Help: { command.Completed = true; await _userService.CompleteCommand(command); await _telegramHttpClient.SendMessage(TGSendMessageDTO.BuildHelpMessage(dto.Chat.Id)); break; } case UserCommandType.Reset: { command.Completed = true; await _userService.CompleteCommand(command); await _telegramHttpClient.SendMessage(TGSendMessageDTO.BuildResetMessage(dto.Chat.Id)); break; } case UserCommandType.List: { if (ApplicationDefaults.Commands.Contains(dto.Text)) { var categories = await _chatService.GetChatCategories(); var messageRequest = TGSendMessageDTO.BuildChatCategoriesMessage(dto.Chat.Id, categories.OrderBy(c => c.DisplayOrder).Select(c => c.Name).ToList()); await _telegramHttpClient.SendMessage(messageRequest); } else { var category = dto.Text; if (!string.IsNullOrWhiteSpace(category) && category.StartsWith("全部群组", StringComparison.OrdinalIgnoreCase)) { category = null; } var paged = _chatService.GetChatsPaged(pagedIndex: 1, pageSize: 20, category: category); var messageRequest = TGSendMessageDTO.BuildChatListMessage(paged, dto.Chat.Id, dto.MessageId); var messageResponse = await _telegramHttpClient.SendMessage(messageRequest); message.ResponseId = messageResponse.Result.MessageId; await _repository.UpdateAsync(message); } break; } case UserCommandType.MyList: { //TODO break; } case UserCommandType.Join: { if (ApplicationDefaults.Commands.Contains(dto.Text)) { await _telegramHttpClient.SendMessage(TGSendMessageDTO.BuildChatJoinMessage(dto.Chat.Id)); } else { _eventBus.Publish(new TelegramChatJoinEvent(dto.Chat.Id, dto.From.Id, dto.Text)); } break; } case UserCommandType.Remove: { await _telegramHttpClient.SendMessage(TGSendMessageDTO.BuildChatRemoveMessage(dto.Chat.Id)); break; } case UserCommandType.Update: { await _telegramHttpClient.SendMessage(TGSendMessageDTO.BuildChatUpdateMessage(dto.Chat.Id)); break; } case UserCommandType.Search: { if (ApplicationDefaults.Commands.Contains(dto.Text)) { await _telegramHttpClient.SendMessage(TGSendMessageDTO.BuildChatSearchMessage(dto.Chat.Id)); } else { var paged = _chatService.GetChatsPaged(pagedIndex: 1, pageSize: 20, keywords: dto.Text); var messageRequest = TGSendMessageDTO.BuildChatListMessage(paged, dto.Chat.Id, dto.MessageId); var messageResponse = await _telegramHttpClient.SendMessage(messageRequest); await _repository.UpdateAsync(message); } break; } } }
public TelegramMessageEvent(TGMessageDTO message) { Message = message; }