public async Task HandleCallbackQuery(TGCallbackQueryDTO dto) { var queryData = JsonConvert.DeserializeObject <TGCallbackQueryDTO.TGCallbackQueryDataDTO>(dto.Data); if (queryData.PageIndex == 0) { return; } var command = await _userService.FindLastCommandByTGUserId(dto.From.Id); var message = await _repository.TableNoTracking.FirstOrDefaultAsync(s => s.TGMessageId == queryData.MessageId); if (command == null || message == null) { return; } if (command.Type == UserCommandType.List) { var category = command.Text; if (!string.IsNullOrWhiteSpace(category) && category.StartsWith("全部群组", StringComparison.OrdinalIgnoreCase)) { category = null; } var paged = _chatService.GetChatsPaged(pagedIndex: queryData.PageIndex, pageSize: 20, category: category); var messageDTO = TGSendMessageDTO.BuildChatListMessage(paged, dto.Message.Chat.Id, queryData.MessageId); var editedMessage = TGSendMessageDTO.BuildChatListEditMessage(messageDTO, message.ResponseId); await _telegramHttpClient.EditMessage(editedMessage); } }
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)); } }
public async Task <TGResponseDTO <TGMessageDTO> > SendMessage(TGSendMessageDTO dto) { var url = TelegramUrlsConfig.Message.Send(_settings.ApiToken); var request = new HttpRequestMessage(HttpMethod.Post, url); request.Content = new StringContent(JsonConvert.SerializeObject(dto, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, ReferenceLoopHandling = ReferenceLoopHandling.Ignore }), Encoding.UTF8, ApplicationDefaults.DefaultContentType); var response = await _httpClient.SendAsync(request); var responseBody = await response.Content.ReadAsStringAsync(); return(JsonConvert.DeserializeObject <TGResponseDTO <TGMessageDTO> >(responseBody)); }
public async Task Handle(TelegramChatJoinEvent @event) { try { var chatResponse = await _telegramHttpClient.GetChatByNameOrLink(@event.ChatUserName); var message = new TGSendMessageDTO { ChatId = @event.TgChatId }; if (chatResponse.IsOK) { var type = chatResponse.Result.GetChatType(); if (type == ChatType.Private || type == ChatType.None) { message.Text = "用户名仅支持群组或频道"; } else { var chat = await _chatService.GetByTGChatId(chatResponse.Result.Id); if (chat == null) { chat = await _chatService.GetOrCreateChat(chatResponse.Result, @event.TgUserId); message.Text = $"【{chatResponse.Result.Title}】 收录成功! 你可以继续输入其他群组用户名"; _eventBus.Publish(new TelegramChatRefreshEvent(chat.Id)); } else { message.Text = "此群组已经收录过了,请勿重复操作!"; } } } else { message.Text = "未能找到群组或者频道"; } await _telegramHttpClient.SendMessage(message); } catch (Exception ex) { _logger.LogError(ex, "添加群组失败"); } }
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; } } }