- Регистрация
- 06.02.2017
- Сообщения
- 165
- Реакции
- 493
- Баллы
- 63
Тема взаимодействия 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}
И inline_keyboard которая будет приходить с ответом на Ваш запрос
Код:
&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("Выход");
}
С помощью такой связки, мой заказчик получил очень удобный механизм управления сигналами на спорт и довольно успешно продвигает свой проект по беттингу.
Будут пожелания продолжить тематику пишите в комментарии.
И да пребудет с Вами удача.
- Номер конкурса статей
- Двенадцатый конкурс статей
- Тема статьи
- Другое
Вложения
Последнее редактирование модератором:



