public async Task <HandlerResult> HandleAsync(IIncomingMessage message, IVKBot bot) { return(new HandlerResult() { message = bot.confimationCode }); }
public bool CanHandle(IIncomingMessage message, IVKBot bot) { return(_messageTypes.Contains(message.MessageType.ToLowerInvariant()) && string.IsNullOrWhiteSpace(message.payload) && !string.IsNullOrWhiteSpace(message.text) && message.text.Trim().ToLower() == "начать"); }
public async Task <string> getUserNameAsync(string userId, IVKBot bot) { var usersRequest = new VKBot.UsersRequest { user_ids = userId, name_case = "nom", //fields = }; var usersResponse = await bot.usersGetAsync(usersRequest); var users = ((JArray)JObject.Parse(usersResponse)["response"]).FirstOrDefault(); var userName = users["first_name"] + " " + users["last_name"]; return(userName); }
public async Task <string> getConversationIdAync(string conversationName, IVKBot bot) { var conversationRequest = new VKBot.ConversationRequest { offset = 0, count = 100, filter = "all" }; var conversationResponse = await bot.messagesGetConversationsAsync(conversationRequest); var conversation = ((JArray)JObject.Parse(conversationResponse)["response"]["items"]) .Where(t => t["conversation"]["chat_settings"] != null && (string)t["conversation"]["chat_settings"]["title"] == conversationName).FirstOrDefault(); string converstionId = (string)conversation["conversation"]["peer"]["id"]; return(converstionId); }
public async Task HandleAsync(IIncomingMessage message, IVKBot bot) { string nodeId = "0"; string linkId = "0"; var nextNode = _flow.getNextNode(nodeId, linkId); var keyboard = Services.FlowService.convertToKeyboard(nextNode, null); var outgoingMessage = new OutgoingMessage() { peer_id = message.peer_id, message = "> " + nextNode.label, keyboard = keyboard.ToString() }; await bot.sendMessageAsync(outgoingMessage); }
async Task <IActionResult> ProcessMessagesAsync(IVKBot bot, string messageBody) { try { var message = Newtonsoft.Json.JsonConvert.DeserializeObject <UpdateMessage>(messageBody); //check chache //if cache already contains the message, then return ok result, else proceed ObjectCache cache = MemoryCache.Default; var cacheKey = message.peer_id + message.MessageType + message.from_id + message.date + (message.payload != null ? message.text : ""); if (cache[cacheKey] != null) { _logger.Log(NLog.LogLevel.Info, $"cache key found: {cacheKey}"); return(Ok("ok")); } cache.Add(cacheKey, message, DateTime.Now.AddMinutes(5)); //handle logic with response to vk foreach (var handler in _responseHandlers) { if (handler.CanHandle(message, bot)) { var result = await handler.HandleAsync(message, bot); return(Ok(result.message)); } } //handle bot requests foreach (var handler in _updatesHandlers) { if (handler.CanHandle(message, bot)) { handler.HandleAsync(message, bot); } } } catch (Exception ex) { _logger.Log(NLog.LogLevel.Error, ex, "Error during bot process"); //return Ok(ex.ToString()); return(Ok("ok")); } return(Ok("ok")); }
public async Task HandleAsync(IIncomingMessage message, IVKBot bot) { JObject payload = JObject.Parse(message.payload); string nodeId = payload["command"] != null ? "0" : (string)payload["node"]; string linkId = payload["command"] != null ? "0" : (string)payload["link"]; //string address = payload["command"] != null ? "0" : (string)payload["address"]; string conversationId = payload["command"] != null ? "0" : (string)payload["conversationId"]; var nextNode = _flow.getNextNode(nodeId, linkId); var currentLink = _flow.getCurrentLink(nodeId, linkId); string userName = await getUserNameAsync(message.from_id, bot); if (currentLink.type != null && currentLink.type == "address") { conversationId = await getConversationIdAync(message.text, bot); } if (conversationId != null) { var conversationMessage = new OutgoingMessage() { peer_id = conversationId, message = userName + ": " + message.text }; await bot.sendMessageAsync(conversationMessage); } var keyboard = Services.FlowService.convertToKeyboard(nextNode, conversationId); var outgoingMessage = new OutgoingMessage() { peer_id = message.peer_id, message = "> " + nextNode.label, keyboard = keyboard.ToString() }; await bot.sendMessageAsync(outgoingMessage); }
public async Task HandleAsync(IIncomingMessage message, IVKBot bot) { }
public bool CanHandle(IIncomingMessage message, IVKBot bot) { return(message.attachments.Any(x => x.type == "photo")); }
public bool CanHandle(IIncomingMessage message, IVKBot bot) { return(message.MessageType == "confirmation"); }
public VKBotController(IVKBot bot, List <IUpdatesHandler <IIncomingMessage> > updatesHandlers, List <IUpdatesResultHandler <IIncomingMessage> > responseHandlers) { _bot = bot; _updatesHandlers = updatesHandlers; _responseHandlers = responseHandlers; }