/// <summary> /// Ответ на начало оформления нового заказа /// </summary> /// <param name="message">Сообщение пользователя с товаром для начала заказа</param> private void NewOrderResponse(Message message) { message.Text = "оформить"; var userId = message.FromId.Value; if (!AllUserSessions.ContainsKey(userId)) { AllUserSessions.Add(userId, new UserSession(userId, this)); } AllUserSessions[message.FromId.Value].ProductsAsAttachments.AddRange(message.Attachments.Where(at => at.Type.Name == "Market"));// MessageResponse(message); }
/// <summary> /// Обычный ответ бота на сообщение пользователя /// </summary> /// <param name="message">Сообщение пользователя</param> private void RegularResponse(Message message) { if (message.Attachments.Count > 0 && message.Attachments[0].Type.Name == "Market" && (!AllUserSessions.ContainsKey(message.FromId.Value) || AllUserSessions[message.FromId.Value].OrderData.OrderStage == OrderStage.NoOrder)) //проверить на повторное начинание заказа { NewOrderResponse(message); } else { MessageResponse(message); } }
/// <summary> /// Отслеживание ботом всех событий сообщества /// </summary> public Task Listen() { var task = Task.Run(() => { try { while (true) { var poll = GetLongPollHistory(); if (poll?.Updates == null) { continue; // Проверка на новые события } foreach (var update in poll.Updates) { if (update.Type == GroupUpdateType.MessageNew) { var userId = update.Message.FromId.Value; if (update.Message.Text != "") { Logger.Info($"id{update.Message.FromId.Value}: {update.Message.Text}"); } if (AllUserSessions.ContainsKey(userId) && AllUserSessions[userId].OrderData.OrderStage != OrderStage.NoOrder) { CollectOrderData(update.Message); } else { RegularResponse(update.Message); } } } } } catch (Exception ex) { Logger.Error(ex); PermanentValues.BotStatus = BotStatus.ReadyForRestart; Logger.Info("Бот остановлен"); } }); return(task); }
/// <summary> /// Ответ бота на сообщение пользователя /// </summary> /// <param name="message">Сообщение пользователя</param> private void MessageResponse(Message message) { var command = message.Text.ToLower(); var userId = message.FromId.Value; if (!AllUserSessions.ContainsKey(userId)) { AllUserSessions.Add(userId, new UserSession(userId, this)); } if ((command == "таблица" || command == "принять" || command == "отклонить") && !AdminIds.Contains(userId)) { command = "unknown"; } if (!CommandsPhrases.Commands.ContainsKey(command)) { command = "unknown"; } CommandsPhrases.CommandsActions[CommandsPhrases.Commands[command]].Invoke(this, message); }
/// <summary> /// Написать пользователю сообщение /// </summary> /// <param name="userId">Id получателя</param> /// <param name="message">Сообщение</param> /// <param name="keyboard">Клавиатура бота (null - сообщение без клавиатуры)</param> public void WriteToSelectedUser(long userId, string message, MessageKeyboard keyboard = null) { if (keyboard == null) { keyboard = MessageKeyboardSchemes.SetEmptyKeyboard; } var messageSendParams = new MessagesSendParams { UserId = userId, Message = message, RandomId = new Random().Next(999999), Keyboard = keyboard }; vk.Messages.Send(messageSendParams); if (!AllUserSessions.ContainsKey(userId)) { AllUserSessions.Add(userId, new UserSession(userId, this)); } AllUserSessions[userId].PrevKeyboard = keyboard; AllUserSessions[userId].LastBotMessage = messageSendParams; }