- Регистрация
- 06.02.2017
- Сообщения
- 83
- Благодарностей
- 266
- Баллы
- 53
Тема взаимодействия Zennoposter и Telegram поднималась неоднократно. Но как говориться нет пределу совершенства.
Ни для кого не секрет, что телеграмм сейчас кишит всевозможными каналами связанными со ставками на спорт: прогнозы, прогрузы, сигналы и т.д.
Тема беттинга настолько широкая, что не обошла стороной и зенку.
Разрабатывая для заказчика бот по сигналам на теннис, была поставлена конкретная задача - менять входные настройки парсеров по ставкам НЕ ОСТАНАВЛИВАЯ их и выдавать сигналы в Telegram.
Суть в том, что заказчик хотел тестировать свои стратегии на теннис, постоянно меняя входные настройки и получать соответствующие сигналы.
Углубляться в их методику не буду - это отдельная тема и они об этом лучше расскажут.
Решение было найдено в связке Zennoposter-Telegram. Фишку с изменением настроек с помощью Telegram можно применять в ЛЮБОМ другом шаблоне где есть такая потребность. К статье прикладываю два бота. Парсер по ставкам конечно же не буду выкладывать. Сами понимаете это не ко мне - я лишь исполнитель.
Теперь собственно мое решение.
1. Первый бот написан на C#. Это не большой и достаточно простой сниппет. Новичкам будет полезно использовать код в своих шаблонах.
Алгоритм также не сложный. Берем кубик, написанный мной, вставляем в свой уже рабочий, либо разрабатываемый шаблон.
Меняем в нем названия переменных и списков. В директории проекта создаем папку. Вот собственно и вся доработка.
Вот так выглядит бот.
Вот так выглядит сам код.
Бот проверяет наличие списков в директории(создавать самому не обязательно, но прописать путь в самом шаблоне все же надо).
Если их там нет, то бот создает и записывает в них первоначальные данные настроек.
Поскольку основной бот будет работать с переменными через списки, чтобы не путаться названия переменных в настройках и названия списков лучше сделать одинаковыми.
Кубик должен стоять в том месте, где Ваш бот обращается в цикле к входящим настройкам.
И да важный момент, ставьте BadEnd в том же месте где воткнули кубик иначе когда бот слетит то подтянет настройки которые были при запуске.
Кстати, если кому будет интересно, дам сниппет для вывода в телеграм как вывести ошибки с названием бота и кодом ID.
Актуально тем у кого на сервере одновременно работает 20-30 ботов. Вот собственно и все. Теперь Вы даже без телеграм бота можете заходить в директорию и менять в файлах данные не прерывая работу бота. Но так было бы не интересно.
2. И вот тут нам на помощь приходит Telegram.
Вы берете мой бот прописываете те же переменные и списки что и в предыдущем боте.
И вуаля, смартфон Вашего заказчика превращается в пульт от телевизора.
Находясь в любой точке вселенной где у заказчика есть интернет, он тупо нажимает кнопки,
изменяя настройки и отслеживает результаты как парсер по ставкам отрабатывает его стратегию.
Вот собственно сам бот.
Писал частично на стандартных кубиках Zennoposter и C#. Сниппеты не стал писать одним кубиком, чтобы был понятен алгоритм.
Итак к телеграму.
На форумах, да и в конкурсных статьях неоднократно писалось как создать телеграм бот и где вытащить токен и chatID.
Особо углубляться не буду, если кто не найдет, в комментариях дам ссылку или расскажу как это сделать.
Итак у Вас есть токен и ID чата.
Пишем свои клавиатуры.
Основная
И inline_keyboard которая будет приходить с ответом на Ваш запрос
Меняете текст под свои потребности. Количество кнопок тоже. Можно добавить какие-нибудь emoji, чтобы заказчику было приятнее. В настройках только токен и chat_id. Плюс пауза запросов. Какую паузу решать Вам с заказчиком - насколько долго он готов ждать отклика телеграм бота.
И так, поехали.
Бот с периодичностью указанной в настройках отправляет api запрос и проверяет наличие обновлений.
Как только Вы нажали кнопку в телеграм боте, наш бот поймает обновление и начнет его обрабатывать.
Регулярками вытаскиваем все что нам надо для работы. Декодируем текст и дальше действуем согласно полученной команды.
Если пришла команда Текущие настройки, бот заходит в файлы и вытаскивает данные которые положил наш рабочий бот(см. выше).
Затем передает их обратно в телеграмм, заодно очищая список запросов.
Очистка запросов в телеграме происходит путем добавления 1 к последнему полученному ID сообщения.
Если пришла команда изменить параметр, действия те же, только теперь бот заходит в список, чистит его, добавляет новый параметр и возвращает назад в телеграм бот. Ну вот собственно и все.
В кубиках старался максимально прописать что к чему, не перегружая их, чтобы было понятно и новичку.
3. Ну и несколько полезных сниппетов C# из бота в Вашу коллекцию.
GET запрос
Switch - чтобы избежать паутины и путаницы
Декодер текста
Проверка на ошибку ввода букв вместо цифры
Очистка списка и ввод нового значения
Ну вот собственно и все.
С помощью такой связки, мой заказчик получил очень удобный механизм управления сигналами на спорт и довольно успешно продвигает свой проект по беттингу.
Будут пожелания продолжить тематику пишите в комментарии.
И да пребудет с Вами удача.
Ни для кого не секрет, что телеграмм сейчас кишит всевозможными каналами связанными со ставками на спорт: прогнозы, прогрузы, сигналы и т.д.
Тема беттинга настолько широкая, что не обошла стороной и зенку.
Разрабатывая для заказчика бот по сигналам на теннис, была поставлена конкретная задача - менять входные настройки парсеров по ставкам НЕ ОСТАНАВЛИВАЯ их и выдавать сигналы в Telegram.
Суть в том, что заказчик хотел тестировать свои стратегии на теннис, постоянно меняя входные настройки и получать соответствующие сигналы.
Углубляться в их методику не буду - это отдельная тема и они об этом лучше расскажут.
Решение было найдено в связке Zennoposter-Telegram. Фишку с изменением настроек с помощью Telegram можно применять в ЛЮБОМ другом шаблоне где есть такая потребность. К статье прикладываю два бота. Парсер по ставкам конечно же не буду выкладывать. Сами понимаете это не ко мне - я лишь исполнитель.
Теперь собственно мое решение.
1. Первый бот написан на C#. Это не большой и достаточно простой сниппет. Новичкам будет полезно использовать код в своих шаблонах.
Алгоритм также не сложный. Берем кубик, написанный мной, вставляем в свой уже рабочий, либо разрабатываемый шаблон.
Меняем в нем названия переменных и списков. В директории проекта создаем папку. Вот собственно и вся доработка.
Вот так выглядит бот.
Вот так выглядит сам код.
C#:
//проверяем наличие файлов
var dir=new DirectoryInfo(project.Directory + @"\bet_example_files");// папка с файлами
var files = project.Lists["files"]; // список для имен файлов
foreach (FileInfo file in dir.GetFiles()) // извлекаем все файлы и ложим в список
{
files.Add(file.FullName); // получаем полный путь к файлу и ложим в список
}
//получаем количество строк в списке файлов
project.Variables["number_files"].Value = project.Lists["files"].Count.ToString();
//проверяем пустой список или нет. Если пустой создаем файлы и вносим данные
if (project.Variables["number_files"].Value == string.Empty)
{
File.Create(project.Directory + "\\bet_example_files/koef_max.txt");
File.Create(project.Directory + "\\bet_example_files/koef_min.txt");
File.Create(project.Directory + "\\bet_example_files/filter.txt");
//чистим список "koef_min"
var koefminlist = project.Lists["koef_min"]; // список проекта
for (int i = 0; i < koefminlist.Count; i++)
{
koefminlist.RemoveAt(i); i--;
}
//переносим в список "koef_min" переменную из настроек
var koef_min = project.Variables["koef_min"].Value;
koefminlist.Add(koef_min);
//чистим список "koef_max"
var koefmaxlist = project.Lists["koef_max"]; // список проекта
for (int i = 0; i < koefmaxlist.Count; i++)
{
koefmaxlist.RemoveAt(i); i--;
}
//переносим в список "koef_max" переменную из настроек
var koef_max = project.Variables["koef_max"].Value;
koefmaxlist.Add(koef_max);
//чистим список "filter"
var filterlist = project.Lists["filter"]; // список проекта
for (int i = 0; i < filterlist.Count; i++)
{
filterlist.RemoveAt(i); i--;
}
//переносим в список "filter" переменную из настроек
var filter = project.Variables["filter"].Value;
filterlist.Add(filter);
}
//Если файлы есть то просто записываем данные в них
else
{
//чистим список "koef_min"
var koefminlist = project.Lists["koef_min"]; // список проекта
for (int i = 0; i < koefminlist.Count; i++)
{
koefminlist.RemoveAt(i); i--;
}
//переносим в список "koef_min" переменную из настроек
var koef_min = project.Variables["koef_min"].Value;
koefminlist.Add(koef_min);
//чистим список "koef_max"
var koefmaxlist = project.Lists["koef_max"]; // список проекта
for (int i = 0; i < koefmaxlist.Count; i++)
{
koefmaxlist.RemoveAt(i); i--;
}
//переносим в список "koef_max" переменную из настроек
var koef_max = project.Variables["koef_max"].Value;
koefmaxlist.Add(koef_max);
//чистим список "filter"
var filterlist = project.Lists["filter"]; // список проекта
for (int i = 0; i < filterlist.Count; i++)
{
filterlist.RemoveAt(i); i--;
}
//переносим в список "filter" переменную из настроек
var filter = project.Variables["filter"].Value;
filterlist.Add(filter);
}
Если их там нет, то бот создает и записывает в них первоначальные данные настроек.
Поскольку основной бот будет работать с переменными через списки, чтобы не путаться названия переменных в настройках и названия списков лучше сделать одинаковыми.
Кубик должен стоять в том месте, где Ваш бот обращается в цикле к входящим настройкам.
И да важный момент, ставьте BadEnd в том же месте где воткнули кубик иначе когда бот слетит то подтянет настройки которые были при запуске.
Кстати, если кому будет интересно, дам сниппет для вывода в телеграм как вывести ошибки с названием бота и кодом ID.
Актуально тем у кого на сервере одновременно работает 20-30 ботов. Вот собственно и все. Теперь Вы даже без телеграм бота можете заходить в директорию и менять в файлах данные не прерывая работу бота. Но так было бы не интересно.
2. И вот тут нам на помощь приходит Telegram.
Вы берете мой бот прописываете те же переменные и списки что и в предыдущем боте.
И вуаля, смартфон Вашего заказчика превращается в пульт от телевизора.
Находясь в любой точке вселенной где у заказчика есть интернет, он тупо нажимает кнопки,
изменяя настройки и отслеживает результаты как парсер по ставкам отрабатывает его стратегию.
Вот собственно сам бот.
Писал частично на стандартных кубиках Zennoposter и C#. Сниппеты не стал писать одним кубиком, чтобы был понятен алгоритм.
Итак к телеграму.
На форумах, да и в конкурсных статьях неоднократно писалось как создать телеграм бот и где вытащить токен и chatID.
Особо углубляться не буду, если кто не найдет, в комментариях дам ссылку или расскажу как это сделать.
Итак у Вас есть токен и ID чата.
Пишем свои клавиатуры.
Основная
Код:
&reply_markup=
{"keyboard": [["Текущие настройки"],["Коэффициент мин", "Коэффициент макс"],
["Фильтр Включить", "Фильтр Выключить"]],
"one_time_keyboard": true,"resize_keyboard": true}
Код:
&reply_markup=
{"inline_keyboard": [[{"text": "1.6","callback_data": "16"},{"text": "1.7","callback_data": "17"},
{"text": "1.8","callback_data": "18"},{"text": "1.9","callback_data": "19"}],
[{"text": "Свой вариант","callback_data": "21"}]]}
"text"
- это то что появиться на экране Вашего бота"callback_data"
- это могут быть цифры либо названия, которые телеграм вернет в наш бот и обработчики сделают то, что Вы просите.Меняете текст под свои потребности. Количество кнопок тоже. Можно добавить какие-нибудь emoji, чтобы заказчику было приятнее. В настройках только токен и chat_id. Плюс пауза запросов. Какую паузу решать Вам с заказчиком - насколько долго он готов ждать отклика телеграм бота.
И так, поехали.
Бот с периодичностью указанной в настройках отправляет api запрос и проверяет наличие обновлений.
Как только Вы нажали кнопку в телеграм боте, наш бот поймает обновление и начнет его обрабатывать.
Регулярками вытаскиваем все что нам надо для работы. Декодируем текст и дальше действуем согласно полученной команды.
Если пришла команда Текущие настройки, бот заходит в файлы и вытаскивает данные которые положил наш рабочий бот(см. выше).
Затем передает их обратно в телеграмм, заодно очищая список запросов.
Очистка запросов в телеграме происходит путем добавления 1 к последнему полученному ID сообщения.
Если пришла команда изменить параметр, действия те же, только теперь бот заходит в список, чистит его, добавляет новый параметр и возвращает назад в телеграм бот. Ну вот собственно и все.
В кубиках старался максимально прописать что к чему, не перегружая их, чтобы было понятно и новичку.
3. Ну и несколько полезных сниппетов C# из бота в Вашу коллекцию.
GET запрос
C#:
//делаем запрос обновлений
string url = "https://api.telegram.org/bot"+project.Variables["bot_token"].Value+"/getUpdates?offset="+project.Variables["last_ID"].Value+"";
var response = ZennoPoster.HttpGet(url);
return response;
C#:
switch (project.Variables["decode_text"].Value)
{
//+++++++++++++++++++++Основные кнопки++++++++++++++++++++++
case "Текущие настройки":
//получаем из списка "koef_min" и ложим в переменную koef
var koefminList = project.Lists["koef_min"];
string koef_min = koefminList[0];
//получаем из списка "koef_max" и ложим в переменную bet
var koefmaxList = project.Lists["koef_max"];
string koef_max = koefmaxList[0];
//получаем из списка "filter" и ложим в переменную filter
var filterList = project.Lists["filter"];
string filter = filterList[0];
return "Коэффициент мин: " + koef_min + "\n" + "Коэффициент макс: " + koef_max + "\n" +"Фильтр: " + filter;
break;
default:
throw new Exception("Выход по ошибке");
}
C#:
var str = @""+project.Variables["text"].Value+"";
str = Regex.Replace(str, @"\\u([\da-f]{4})", m => ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString());
return str;
C#:
var str = project.Variables["decode_text"].Value;
if (Regex.Match(str, @"\d").Success)
{
//Содержит цифру, выход по зеленой
return true;
}
else
{
//Не содержит цифру, выход по красной
throw new Exception();
}
C#:
//чистим переменные и добавляем новые
string decode_text = project.Variables["decode_text"].Value;
string own_message = project.Variables["own_message"].Value;
if(own_message == "21")
{
//чистим список "koef_min"
var koefminlist = project.Lists["koef_min"]; // список проекта
for (int i = 0; i < koefminlist.Count; i++)
{
koefminlist.RemoveAt(i); i--;
}
//добавляем новое значение
koefminlist.Add(decode_text);
return "Минимальный коэффициент изменен. Текущий: " + decode_text;
}
//проверяем введенное значение на условие больше
if(own_message == "31")
{
//чистим список "koef_max"
var koefmaxlist = project.Lists["koef_max"]; // список проекта
for (int i = 0; i < koefmaxlist.Count; i++)
{
koefmaxlist.RemoveAt(i); i--;
}
//добавляем новое значение
koefmaxlist.Add(decode_text);
return "Максимальный коэффициент изменен. Текущий: " + decode_text;
}
else
{
throw new Exception("Выход");
}
С помощью такой связки, мой заказчик получил очень удобный механизм управления сигналами на спорт и довольно успешно продвигает свой проект по беттингу.
Будут пожелания продолжить тематику пишите в комментарии.
И да пребудет с Вами удача.
- Тема статьи
- Другое
- Номер конкурса статей
- Двенадцатый конкурс статей
Вложения
-
101 КБ Просмотры: 492
Для запуска проектов требуется программа ZennoPoster или ZennoDroid.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...
Для того чтобы запустить шаблон, откройте нужную программу. Нажмите кнопку «Добавить», и выберите файл проекта, который хотите запустить.
Подробнее о том, где и как выполняется проект.
Последнее редактирование модератором: