static async Task Main(string[] args) { Settings settings = null; if ((settings = Settings.Load()) == null) { Console.WriteLine("Файл с настройками не найден рядом с бинарником. Будет создан файл настроек по-умолчанию."); Console.WriteLine("Занесите в него корректные параметры для вашего бота и запустите пример снова"); Settings.CreateDefaults(); Console.ReadLine(); return; } Console.WriteLine("Настройки загружены."); var bot = new VkBot(settings.AccessToken, settings.GroupUrl); bot.OnMessageReceived += MessageReceivedTest; bot.OnGroupUpdateReceived += UpdateReceivedTest; bot.RegisterPhraseTemplate("привет", "Здарова!!!"); foreach (var verb in DisconnectVerbs) { bot.RegisterPhraseTemplate(verb, msg => ProcessDisconnect(msg, bot.Api, verb)); } bot.RegisterPhraseTemplate("!отмена", ProcessCancel); bot.RegisterPhraseTemplate("!cancel", ProcessCancel); await bot.StartAsync(); Console.ReadLine(); }
static void Main(string[] args) { ILoggerFactory loggerFactory = new LoggerFactory().AddConsole(); ILogger <VkBot> logger = loggerFactory.CreateLogger <VkBot>(); ExampleSettings settings = ExampleSettings.TryToLoad(logger); VkBot bot = new VkBot(settings.AccessToken, settings.GroupUrl, logger); /* subscribe for anon lambda in order to receive any update */ bot.OnGroupUpdateReceived += (sender, eventArgs) => { logger.LogInformation(eventArgs.Update.Type.ToString() + " event type triggered"); }; /* subscribe for static method in order to receive new comment update type */ bot.OnGroupUpdateReceived += NewCommentHandler; bot.OnBotStarted += (sender, eventArgs) => { bot.Api.Wall.CreateComment(new WallCreateCommentParams() { OwnerId = -bot.GroupId, PostId = 1, Message = "test" }); }; bot.Start(); //bot.Dispose(); Console.ReadLine(); }
static void Main(string[] args) { ILoggerFactory loggerFactory = new LoggerFactory().AddConsole(); ILogger <VkBot> logger = loggerFactory.CreateLogger <VkBot>(); ExampleSettings settings = ExampleSettings.TryToLoad(logger); VkBot bot = new VkBot(settings.AccessToken, settings.GroupUrl, logger); //регистрируем текстовый ответ на "+матеша" bot.TemplateManager.Register(new RegexToActionTemplate(MateshaSubscribeCommand, "ну окей, вот тебе матеша")); //регистрируем обработчик-функцию на "+матеша" bot.TemplateManager.Register(new RegexToActionTemplate(MateshaSubscribeCommand, MateshaHandler)); //важно: отсутствие PeerId в конструкторе RegexToActionTemplate означает // способ удаления клавиатуры будет добавлен в следующем обновлении проекта VkNet //https://github.com/vknet/vk/pull/780 bot.TemplateManager.Register(new RegexToActionTemplate(MateshaUnsubscribeCommand, "ну окей, теперь не будет у вас этой кнопки", new KeyboardBuilder().SetOneTime().AddButton("пока", "").Build())); bot.Start(); bot.Dispose(); Console.ReadLine(); }
public void VkBotCtor_PutUnfilteredGroupUrl_GroupUrlShouldBeFiltered(string unfilteredGroupUrl, string expectedGroupUrl) { var di = MockResolveScreenNameApi(); var bot = new VkBot("test", unfilteredGroupUrl, di); Assert.AreEqual(bot.FilteredGroupUrl, expectedGroupUrl); }
public void VkBotCtor_PutFilteredGroupUrl_GroupUrlShouldBeAsFiltered() { var di = MockResolveScreenNameApi(); string expectedGroupUrl = "someGroupUrl"; var bot = new VkBot("test", expectedGroupUrl, di); Assert.AreEqual(bot.FilteredGroupUrl, expectedGroupUrl); }
static void NewCommentHandler(object sender, GroupUpdateReceivedEventArgs eventArgs) { if (eventArgs.Update.Type == GroupUpdateType.WallReplyNew) { VkBot instanse = sender as VkBot; var postId = eventArgs.Update.WallReply.PostId; var postTest = eventArgs.Update.WallReply.Text; instanse.Logger.LogInformation($"new comment under post. id:{postId}, text:{postTest}"); } }
static void MateshaHandler(VkBot sender, MessageReceivedEventArgs args) { //правильный ответ уже установлен в диалоге, значит бот ожидает ответа в диалоге if (args.PeerContext.Vars.ContainsKey("validAnswer")) { return; } var message = args.Message; var rand = new Random(); var firstNum = rand.Next(1, 100); var secondNum = rand.Next(1, 100); var validAnswer = firstNum + secondNum; //устанавливаем правильный ответ в контекст диалога args.PeerContext.Vars["validAnswer"] = validAnswer; //регистрируем новый обработчик для этого диалога, который будет чувствителен к числам sender.TemplateManager.Register( new RegexToActionTemplate(MateshaNumberCommand, MateshaNumberHandler, peerId: message.PeerId.Value) ); //рисуем кнопочки int buttonsCount = 10; int maxButtonsCountInLine = 4; int validButtonIndex = rand.Next(buttonsCount); var keyboard = new KeyboardBuilder(); for (int i = 0; i < buttonsCount; i++) { if (i == validButtonIndex) { keyboard.AddButton((validAnswer).ToString(), "", KeyboardButtonColor.Primary); } else { keyboard.AddButton(rand.Next(200).ToString(), "", KeyboardButtonColor.Primary); } if ((i + 1) % maxButtonsCountInLine == 0) { keyboard.AddLine(); } } sender.Api.Messages.Send(new MessagesSendParams() { RandomId = Math.Abs(Environment.TickCount), PeerId = args.Message.PeerId, Message = $"сколько будет {firstNum} + {secondNum}?", Keyboard = keyboard.Build() }); }
static void Main(string[] args) { ILoggerFactory loggerFactory = new LoggerFactory().AddConsole(); ILogger <VkBot> logger = loggerFactory.CreateLogger <VkBot>(); ExampleSettings settings = ExampleSettings.TryToLoad(logger); VkBot bot = new VkBot(settings.AccessToken, settings.GroupUrl, logger); bot.TemplateManager.Register(new RegexToActionTemplate("привет", "на привет всегда отвечаю кусь")); bot.TemplateManager.Register( new RegexToActionTemplate("ты кто", new List <string>() { "меня зовут мишутка", "вы о ком", "не говори так", "а ты кто?" })); bot.TemplateManager.Register( new RegexToActionTemplate("^[0-9]+$", "ого, я определил, что вы прислали мне число!")); bot.TemplateManager.Register(new RegexToActionTemplate("колобок", (sender, eventArgs) => { logger.LogInformation( $"кто-то написал {eventArgs.Message.Text}, я могу регировать на эту фразу так, как я хочу! system(\"reboot\")"); })); bot.TemplateManager.Register(new RegexToActionTemplate("квадр.*[0-9]+", (sender, eventArgs) => { logger.LogInformation( $"кто-то написал '{eventArgs.Message.Text}', пора вычислить квадрат числа в сообщении!"); int num = int.Parse(Regex.Match(eventArgs.Message.Text, "[0-9]+").Value); sender.Api.Messages.Send(new MessagesSendParams() { RandomId = Environment.TickCount, PeerId = eventArgs.Message.PeerId, Message = $"квадрат числа {num} равен {num * num}" }); })); var keyboard = new KeyboardBuilder().SetOneTime() .AddButton("лол", "кек", KeyboardButtonColor.Positive, "type").Build(); bot.TemplateManager.Register(new RegexToActionTemplate("кнопка", "лови кнопку", keyboard)); bot.Start(); bot.Dispose(); Console.ReadLine(); }
public void VkBotCtor_PutFakeGroupId_ResolvedGroupIdShouldBeAsFake() { long expectedGroupId = 111222; var resolveScreenNameFakeResponse = new VkObject() { Type = VkNet.Enums.VkObjectType.Group, Id = expectedGroupId }; var di = MockResolveScreenNameApi(resolveScreenNameFakeResponse); var bot = new VkBot("test", "test", di); Assert.AreEqual(bot.GroupId, expectedGroupId); }
static void Main(string[] args) { bot = new VkBot(Bot.Config.Settings.Bot.Token, new Random(), Bot.Config.Settings.Bot.GroupId, new ErrorReporter((ex) => { Console.WriteLine(ex.Message); })); bot.MessageMonitoring.NewMessage += MessageMonitoring_NewMessage; bot.MessageMonitoring.OnCommand += MessageMonitoring_OnCommand; bot.MessageMonitoring.OnCommandNotFound += MessageMonitoring_OnCommandNotFound; bot.Run(); var monitoring = new DateTimeActionTimer(new DateTime(2019, 12, 9, Bot.Config.Settings.Path.DistTime[0], Bot.Config.Settings.Path.DistTime[1], 00), 30 * 1000, true); monitoring.Tick += Monitoring_Tick; monitoring.Start(); }
static void Main(string[] args) { ILoggerFactory loggerFactory = new LoggerFactory().AddConsole(); ILogger <VkBot> logger = loggerFactory.CreateLogger <VkBot>(); ExampleSettings settings = ExampleSettings.TryToLoad(logger); VkBot bot = new VkBot(settings.AccessToken, settings.GroupUrl, logger); var keyboard = new KeyboardBuilder().SetOneTime().AddButton("тык", "").AddButton("тыдыщ", "").Build(); bot.TemplateManager.Register(new RegexToActionTemplate("тык", (sender, eventArgs) => { PeerContext context = eventArgs.PeerContext; long peerId = eventArgs.Message.PeerId.Value; if (!context.Vars.ContainsKey("тыки")) { context.Vars["тыки"] = 0; } sender.Api.Messages.Send(new MessagesSendParams() { Keyboard = keyboard, PeerId = peerId, Message = $"тык номер {context.Vars["тыки"]++}", RandomId = Math.Abs(Environment.TickCount) }); } )); bot.TemplateManager.Register(new RegexToActionTemplate("тыдыщ", (sender, eventArgs) => { if (!eventArgs.PeerContext.GlobalVars.ContainsKey("тыдыщи")) { eventArgs.PeerContext.GlobalVars["тыдыщи"] = 0; } sender.Api.Messages.Send(new MessagesSendParams() { Keyboard = keyboard, PeerId = eventArgs.Message.PeerId, Message = $"глобальный, междиалоговый тыдыщ номер {eventArgs.PeerContext.GlobalVars["тыдыщи"]++}", RandomId = Math.Abs(Environment.TickCount) }); })); bot.Start(); bot.Dispose(); }
static void Main(string[] args) { ILoggerFactory loggerFactory = new LoggerFactory().AddConsole(); ILogger <VkBot> logger = loggerFactory.CreateLogger <VkBot>(); ExampleSettings settings = ExampleSettings.TryToLoad(logger); VkBot bot = new VkBot(settings.AccessToken, settings.GroupUrl, logger); bot.OnMessageReceived += NewMessageHandler; bot.Start(); Console.ReadLine(); }
static void Main(string[] args) { //ILoggerFactory loggerFactory = new LoggerFactory().AddConsole(); //ILogger<VkBot> logger = loggerFactory.CreateLogger<VkBot>(); //ExampleSettings settings = ExampleSettings.TryToLoad(logger); VkBot bot = new VkBot(Resources.AccessToken, Resources.groupUrl); bot.OnMessageReceived += NewMessageHandler; bot.Start(); WriteLine("Bot started!"); ReadLine(); }
static void NewMessageHandler(object sender, MessageReceivedEventArgs eventArgs) { VkBot instanse = sender as VkBot; var peerId = eventArgs.Message.PeerId; var fromId = eventArgs.Message.FromId; var text = eventArgs.Message.Text; instanse.Logger.LogInformation($"new message captured. peerId: {peerId},userId: {fromId}, text: {text}"); instanse.Api.Messages.Send(new MessagesSendParams() { RandomId = Environment.TickCount, PeerId = eventArgs.Message.PeerId, Message = $"{fromId.Value}, i have captured your message: '{text}'. its length is {text.Length}. number of spaces: {text.Count(x => x == ' ')}" }); }
static void Main(string[] args) { var config = new ConfigurationBuilder() .AddJsonFile("test-settings.json", false, false) .Build(); var groupAccessToken = config["accessToken"]; var botGroupId = ulong.Parse(config["botGroupId"]); var dbConnectionString = config["dbConnection"]; VkBot.StartNewCommandBot(groupAccessToken, botGroupId, builder => { builder.Register <HelloCommand>(); builder.Register <TimePatternTestCommand>(); }, container => { }); }
private static void Main() { var config = new ConfigurationBuilder() .AddJsonFile("appsettings.json", false, false) .Build(); var groupAccessToken = config["accessToken"]; var botGroupId = ulong.Parse(config["botGroupId"]); var dbConnectionString = config["dbConnection"]; using (var context = new StuDbContext(dbConnectionString)) { context.Database.Migrate(); } VkBot.StartNewCommandBot(groupAccessToken, botGroupId, builder => { builder .Register <StartCommand>() .Register <ScheduleCreateCommands>() .Register <ScheduleShowCommands>(); }, container => { container //сервисы .RegisterType <IScheduleGenerateService, ScheduleGenerateService>() .RegisterType <IScheduleFormatService, ScheduleFormatService>() .RegisterType <INetworkService, NetworkService>() //репозитории .RegisterType <IChatRepository, ChatRepository>(new TransientLifetimeManager()) .RegisterType <IEventRepository, EventRepository>(new TransientLifetimeManager()) .RegisterType <IRegularScheduleRepository, RegularScheduleRepository>(new TransientLifetimeManager()) //бд .RegisterFactory <Func <StuDbContext> >( (_) => new Func <StuDbContext>(() => new StuDbContext(dbConnectionString)), new TransientLifetimeManager()); }); }
static void MateshaNumberHandler(VkBot sender, MessageReceivedEventArgs args) { int userAnswer = int.Parse(Regex.Match(args.Message.Text, MateshaNumberCommand).Value); int validAnswer = args.PeerContext.Vars["validAnswer"]; var keyboard = new KeyboardBuilder() .AddButton("+матеша", "", KeyboardButtonColor.Positive) .AddButton("-матеша", "", KeyboardButtonColor.Negative); sender.TemplateManager.Unregister(MateshaNumberCommand, args.Message.PeerId.Value); args.PeerContext.Vars.Remove("validAnswer"); sender.Api.Messages.Send(new MessagesSendParams() { RandomId = Math.Abs(Environment.TickCount), PeerId = args.Message.PeerId, Message = (userAnswer == validAnswer) ? "верный ответ! держи печенюху" : $"ответ {userAnswer} невернен! верный ответ был: {validAnswer}, попробуйте еще раз", Keyboard = keyboard.Build() }); }
public static void Bot(ref VkBot infoBot, String user, String Msg) { try { infoBot.Api.Messages.Send(new VkNet.Model.RequestParams.MessagesSendParams { RandomId = Math.Abs(Environment.TickCount), Message = Msg, Domain = user }); } catch (Exception ex) { Console.WriteLine(" Error!"); Console.WriteLine("################################"); Console.WriteLine(); Console.WriteLine(ex.ToString()); Console.WriteLine(); Console.WriteLine("################################"); } }
/// <summary> /// "-nopreload" - prevents loading shedules on start /// </summary> /// <param name="args"></param> static void Main(string[] args) { JsonData.ReadData(); KeyboardInit(); WeekInitPlanned(); TeachersInit(); GradeInit(); if (!(Environment.GetCommandLineArgs().Length > 1 && Environment.GetCommandLineArgs()[1] == "-nopreload")) { TeachersShedInit(); GroupShedListInit(); } GetElectives(); Scheduler.RunNotifier().GetAwaiter().GetResult(); BOT = new Telegram.Bot.TelegramBotClient(ReadToken()); logger.Info("Подключен бот Telegram."); BOT.OnMessage += BotOnMessageReceived; BOT.StartReceiving(new UpdateType[] { UpdateType.Message }); logger.Info("Ожидает сообщений..."); vkBot = new VkBot(ReadTokenVK(), GetGroupUrl()); vkBot.OnMessageReceived += BotOnMessageReceived; logger.Info("Подключен бот VK."); vkBot.StartAsync(); logger.Info("Ожидает сообщений..."); Console.CancelKeyPress += OnExit; _closing.WaitOne(); }
static void NewMessageHandler(object sender, MessageReceivedEventArgs eventArgs) { VkBot instanse = sender as VkBot; var peerId = eventArgs.Message.PeerId.Value; var fromId = eventArgs.Message.FromId.Value; var text = GetFormatedWord(eventArgs.Message.Text); var answer = "Извини, я понимаю только текстовые сообщения 🤔"; if (!users.HasUser(fromId) || users[fromId].regId != 1) { Registration(eventArgs.Message); return; } if (eventArgs.Message.Attachments != null && eventArgs.Message.Attachments.Count != 0 && eventArgs.Message.Attachments[0].Instance is VkNet.Model.Attachments.AudioMessage) // x.Type.IsInstanceOfType(VkNet.Enums.SafetyEnums.DocMessageType.AudioMessage))) { HandleAudioMessage(fromId, eventArgs.Message.Attachments[0]); return; } if (text == null && text.Length == 0) { SendMessage(fromId, answer, null, true); return; } users[fromId].lastMsg = (text, false, eventArgs.Message.ConversationMessageId.Value); if (users[fromId].on_Test) { return; } var ss = text.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); if (ss.Length == 2) { if (ss[0] == "/examples") { var lst = GetSentenceExemples(ss[1]); if (lst == null || lst.Count != 0) { foreach (var s in lst) { SendMessage(fromId, s); } } else { SendMessage(fromId, "Не могу привести пример с таким словом."); } return; } else if (ss[0] == "/sound") { if (dictionary.eng_ids.ContainsKey(ss[1])) { SendExample(fromId, dictionary.eng_ids[ss[1]]); return; } else { answer = "Я не знаю такого слова"; goto Answer; } } else if (ss[0] == "/description") { if (dictionary.eng_ids.ContainsKey(ss[1])) { SendFullWordDescription(fromId, dictionary.eng_ids[ss[1]]); return; } else { answer = "Описание слова отсутствует"; } SendMessage(fromId, answer, null, true); return; } } // ---------------------------------------------------------------------------- switch (text) { case "команды бота": case "/help": users[fromId].keyb = User.Help_Keyboard; answer = "/examples \'слово\'- примеры использования слова\n" + "/description \'слово\' - описание слова\n" + "/sound \'слово\' - пример с озвучиванием\n" + "\'слово на русском\' - перевод на английский\n" + "\'слово на английском\' - перевод на русский\n" + "\'аудиосообщение на английском\' - распознавание речи\n" + "\'текст на английском\' - перевод всех известных боту слов на русский\n"; break; case "моя статистика": case "/my_level": answer = GetStatics(fromId); break; case "сменить уровень": case "/change_level": ChangingLevel_Start(fromId); return; case "сменить сложность": case "/change_complexity": ChangingComplexity_Start(fromId); return; case "игра кроссворд": case "/crossword": Games.Crossvord_start(fromId); return; case "игра виселица": case "/gallows": Games.Gallows_Start(fromId); return; case "/examples": answer = "А к чему пример то?)"; break; case "/description": answer = "Нужно написать и само слово"; break; case "хватит меня учить": case "/mute": users[fromId].bot_muted = true; answer = "Бот перешел в режим ожидания\nОн не будет присылать слова и тесты, но по прежнему будет выполнять команды"; break; case "нет, учи меня": case "/unmute": users[fromId].bot_muted = false; answer = "Боты вернулся к стандартному режиму работы"; break; case "добавить слова": case "/my_list": AddingWords_Start(fromId); return; case "/repeat": case "повторить слова": if (users[fromId].learnedWords.Count < users[fromId].day_words) { answer = "Вы изучили недостаточно слов для проверки"; break; } else { Testing_Start(fromId, true); return; } case "вернуться назад": case "/back": users[fromId].keyb = User.Main_Keyboard; answer = "Теперь ты в главном меню"; break; case "/daywords": case "кол-во слов в день": DayWords_Start(fromId); return; case "admin::getpicture": if (adminIDs.Contains(fromId)) { foreach (var x in users[fromId].unLearnedWords) { SendPicture(fromId, x); } } else { answer = ACCESS_IS_DENIED; } return; case "admin::getсommands": if (adminIDs.Contains(fromId)) { answer = "getId, wantTest, getCommands, usersCount, forget_me, getpicture"; } else { answer = ACCESS_IS_DENIED; } break; case "admin::forget_me": if (adminIDs.Contains(fromId)) { SendMessage(fromId, "Я тебя забыл."); users.DeleteUser(fromId); } else { answer = ACCESS_IS_DENIED; } return; case "admin::getid": if (adminIDs.Contains(fromId)) { answer = fromId.ToString(); } else { answer = ACCESS_IS_DENIED; } break; case "admin::userscount": if (adminIDs.Contains(fromId)) { answer = "" + users.Dbase.Count; } else { answer = ACCESS_IS_DENIED; } break; case "admin::wanttest": if (adminIDs.Contains(fromId)) { users[fromId].on_Test = true; Testing_Start(fromId, false); return; } else { answer = ACCESS_IS_DENIED; } break; default: if (ss.Length == 1) { answer = Translation(text); } else { answer = MultipleTranslation(ss, users[fromId].userLevel); } break; } Answer: SendMessage(fromId, answer, null, true); }
static void Main(string[] args) { Console.WriteLine("Запуск"); VkBot infoBot; String Token = ""; String Group = ""; if (args.Length != 0) { if (args[0] == "-t") { Console.WriteLine("-t использовано"); try { Token = args[1]; } catch { Console.WriteLine("Не задан токен!"); } } if (args[2] == "-g") { Console.WriteLine("-g использовано"); try { Group = args[3]; } catch { Console.WriteLine("Не задана группа!"); } } if (args[0] == "-h") { Console.WriteLine("-h - Вызов справки"); Console.WriteLine("-t - Задать токен"); Console.WriteLine("-g - Задать группу"); } } if (File.Exists("Token")) { Console.WriteLine(File.ReadAllText("Token")); infoBot = new VkBot(File.ReadAllText("Token").Replace("\n", ""), "https://vk.com/club189537036"); } else { if (Token != "" && Group != "") { infoBot = new VkBot(Token, Group); } else { Console.WriteLine("Введите токен и группу"); infoBot = new VkBot(Console.ReadLine(), Console.ReadLine()); } } String Msg = "Температура за окном: " + GetTemperature() + "°C"; Bot(ref infoBot, "jek_ouwl", Msg); infoBot.Dispose(); Console.WriteLine("Закрытие"); return; }
static void botCallback(VkBot bot, PollServerResponse r) { Console.WriteLine(r.ToString()); }