Привет, задача такая. Добавляю бота в конференцию и пишу. «Бот, погода» Он мне выводит цифру с сайта(на самом деле другая инфа нужна, но неважно) Ничего более, только одна команда и одна цифра Что мне для этого изучить? Я уже создал прилоение в вк, Настроил oauth, корректно возвращает access token. Но дальше не знаю, как быть.
Но в идеале не хотелось бы не использовать бота, а использовать мой аккаунт. То есть мне пишут «Михаил, погода» и я автоматом выдаю погоду. Так возможно?
Отслеживать
задан 11 янв 2017 в 11:25
Anton Sokolovskii Anton Sokolovskii
31 1 1 серебряный знак 4 4 бронзовых знака
Возможно. Разрабатываете искусственный интеллект и подключаете, делов-то!
11 янв 2017 в 16:12
Возможно. Всего-то стоит разобраться с VK API и любым серверным языком программирования.
11 янв 2017 в 19:40
Не обязательно серверный, можно и клиента написать и в автозагрузку поставить, если там простенько всё. А по сабжу — идите читайте документацию, примеров везде полно как на шарпе работать в вк, есть даже готовые библиотечки в nuget, за вас тут такие вещи никто не напишет.
Чат-бот, автоворонка для ВК, Сенлер. Как увеличить продажи в ВК в 5-7 с помощью автоматизации?
12 янв 2017 в 4:42
12 янв 2017 в 14:28
12 янв 2017 в 19:04
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Да Михаил такое возможно.
1 шаг: API работы с погодой
Есть много сервисов работающии с API погодой (парсить html не придеться) есть платные, есть бесплатные. Вот 1 из них https://tech.yandex.ru/weather/
Одной проблемой меньше.
2 шаг: VK API прием сообщения
Если вы собираетесь реализовать бота средствами C# то знайте, сообщения приходят в неправильной кодировке. Вот я раньше писал бота и также задавал вопрос на форуме
С кодировкой разобрались, теперь как принимать сообщения:
private string messagesGet(int count, string version) < string url = («https://api.vk.com/method/messages.get?count=» + count + » + token + » rel=»nofollow noreferrer»>https://msdn.microsoft.com/ru-ru/library/b873y76a(v=vs.100).aspx
Вот моя версия парсинга сообщения, но если вернеться ошибка или сообщение будет содиржать » то бот будет работать не стабильно, рекомендую не использавать мои наработки 😀
private string[] messagesGetParse(string json) < string uid, body; string[] massiv = json.Split(‘:’); string a = massiv[8]; string[] arrayA = a.Split(‘»‘); body = arrayA[1]; string[] arrayB = massiv[5].Split(‘,’); uid = arrayB[0]; return new string[] < uid, body >; >
3 шаг: VK API отправка сообщения
Тут все такде как и с получением сообщения только метод другой, и парамметры.
Вот мои наработки)))
Это для отправки обычного сообщения
Интересная статья про перегрузку)
Источник: ru.stackoverflow.com
Как сделать чат-бота для ВК
haqoff/VkBotHelper
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Switch branches/tags
Branches Tags
Could not load branches
Nothing to show
Could not load tags
Nothing to show
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Cancel Create
- Local
- Codespaces
HTTPS GitHub CLI
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more.
Sign In Required
Теперь в методе Main напишем следующее:
VkBot.StartNewCommandBot(«Токен Группы», id группы, builder => < //здесь регистрируем классы, в которых лежат обработчики команд builder.
RegisterSimpleCommand>(); >, container => < /* здесь регистрируем любые зависимости, * например контекст базы данных, нужные сервисы и так далее, * которые будут передаваться в конструкторы классов команд. * по умолчанию уже зарегистрированы некоторые зависимости, * например, IVkApi. * * Поэтому здесь нам больше ничего не нужно. *. >);`
Методы, отвечающие за обработку команд, помечаются специальным атрибутом [Command(string pattern, bool isGlobal)]
Обьявление обработчиков команд
Необходимо в классе, отвечающем за выполнение этой команды, объявить метод с любым названием. Причём, возвращаемое значение может либо Task (для асинхронного выполнения) (также метод может содержать async), либо void. Аргумент метода может быть только типа CommandArgs, можно также опустить этот аргумент вовсе.
Мощным средством данной библиотеки является то, что шаблоны могут в себя включать не только обычный текст, а также набор плейсхолдеров. Например: «.показать #дата»- также является командой. И всякий раз, когда пользователь будет отправлять «.показать 21/10/2016», метод-обработчик будет срабатывать. Причём получить значение этой даты в самом обработчике очень просто.
[Command(«.показать #дата», true)] public void Show(CommandArgs args) < // значение var date = args.ValueContainer.GetDate>(0); >
Поддерживаются следующие виды плейсхолдеров:
Кроме того, в случае, если какая то часть шаблона, например, может повторятся неопределённое количество раз, можно обернуть её в ()+, как в регулярных выражениях. Например: «.удалить (#число)+» Тем самым, под шаблон подходит текст: «.удалить 1 5 8 19 18 13»
Для получения значения плейсхолдера необходимо вызвать метод Get c небходимым индексом. Индексация начинается с 0. Причём внутри каждой группы ()+ плейсходеры также начинают индекс с 0.
Рассмотрим получение значений на следующем примере шаблона «.показать #дата ((#строка)+ #число)+»: Под данное выражение может подходить сообщение: «.показать 06.12 ‘какая то строка’ ‘ещё строка’ 15»
[Command(«.показать #дата ((#строка)+ #число)+», true)] public void Test(CommandArgs args) < //#дата var date = args.ValueContainer.GetDate>(0); //группа ((#строка)+ #число)+ var mainGroup = args.ValueContainer.
GetGroupContainer>(1); // проходим по каждому повторению группы ((#строка)+ #число)+ foreach (var mainRepeat in mainGroup) < //группа (#строка)+ var innerGroup = mainRepeat.GetGroupContainer>(0); // проходим по каждому повторению группы (#строка)+ foreach (var innerRepeat in innerGroup) < //#строка var str = innerRepeat.Getstring>(0); > //#число var number = mainRepeat.Getdouble>(1); > >
Глобальные и контекстные команды
Второй аргумент атрибута определяет, является ли команда глобальной.
- Глобальная команда (true) может запускаться только тогда, когда в чате или беседе нет активной команды.
- Контекстная команда (false) может запускаться только тогда, когда в чате или беседе уже установлена активная команда из этого же класса.
Для того, что установить активной команду нужно вызвать метод SetActiveCommand в ICommandManager. Для удаления необходимо вызвать RemoveActiveCommand.
Это используется для того, что бы создавать цепочку из состояний команд. Когда в чате установлена активная команда, бот не будет реагировать на другие команды. А будет реагировать только на те команды, которые являются контекстными и расположены в том же классе, в котором находится и активная команда. При запуске контекстной команды, используется сохранённый экземпляр класса активной команды, а не создаётся новый, поэтому всё состояние сохраняется.
При сообщении «.удалить» в чате устанавливается активная команда Question в классе DeleteItemCommand. После чего, бот будет реагировать только на все контекстные команды в классе DeleteItemCommand, а именно: «.да» и «.нет». Главное, не забывать удалять активную команду при необходимости. Иначе, например, забыв написать RemoveActiveCommand в обработчике «.да», можно будет бесконечно писать «.да» и код внутри будет выполняться.
class DeleteItemCommand < private readonly ICommandManager _manager; private readonly IVkApi _api; private int counter = 0; //подключаем ICommandManager для управления командами public DeleteItemCommand(ICommandManager manager, IVkApi api) < _manager = manager; _api = api; > [Command(«.удалить», true)] public void Question(CommandArgs args) < // устанавливаем текущую команду как активную _manager.SetActiveCommand(args.
SourceMessage.PeerId.Value, args.RunMetadata, this); _api.Messages.Send(new MessagesSendParams() < Message = «Вы точно хотите удалить элемент?», PeerId = args.SourceMessage.PeerId, RandomId = new Random().
Next() >); counter = 5; > [Command(«.да», false)] public void Yes(CommandArgs args) < //удаляем активную команду _manager.RemoveActiveCommand(args.SourceMessage.PeerId.
Value); // реагируем на ответ // counter будет равен 5, состояние в контекстных командах сохраняется. > [Command(«.нет», false)] public void No(CommandArgs args) < //удаляем активную команду _manager.RemoveActiveCommand(args.SourceMessage.PeerId.
Value); // реагируем на ответ // counter будет равен 5, состояние в контекстных командах сохраняется. >
About
VkBotHelper — производительная .NET Core библиотека , которая поможет вам создать бота для любых бесед или диалогов в виде меню или текстовых команд со сложной логикой.
Источник: github.com
Как сделать бота в вк c
/* Сразу скажу что, библиотека написана лично мною и работает на основе LongPoll. В мануале не нужно изменять файл API.cs, мы редактируем ТОЛЬКО файл Program.cs */
Cкачайте проект и откройте его с помощью Visual Studio. Рассмотрим файлы:
Файл «Program.cs» — Основной файл, в котором создаётся сам бот.
Файл «API.cs» — Библиотека для работы с VK API.
Для начала ваш необходимо получить Access Token.
Перейдите по ссылке: *Клик* и нажмите внизу страницы «Разрешить» . Скопируйте часть адресной строки от access_token= до бот», то есть если в нашем сообщение самое первое слово это «бот», если это так, то проверяем что 2 слово в нашем сообщение == «помощь», если это так, то мы отправляем человеку сообщение, для этого мы вызываем метод SendMessage и передаём в него Peer Id (Можно назвать адресом доставки сообщения) и сообщение которое мы хотим отправить, воуля, готово. Если запустить программу и написать в лс, чат, из группы нашему боту: «бот помощь», он нам ответит «Помощь бота!».
В экземпляре события, не только поле «Message», существует много полей. В нём есть поля для проверки, что сообщение пришло в личное сообщение, из беседы, из группы. Способна узнавать когда было отправлено сообщение, смотреть приложенные документы, фотографии, узнавать id пользователя который нам написал, id чата в котором нам написали, id группы из которой нам написали и ещё немного других фич.
Источник: cheat-master.ru