How can we help?
Находим в поиске @botFather, пишем команду: /newbot
@botFather просит ввести name бота, задаем например HotspotBot.
@botFather просит ввести username бота, задаем например HotspotBot.
Далее бот отвечает следующим сообщением, нас интересует токен выделенный красным цветом:
Done! Congratulations on your new bot. You will find it at <a href="http://t.me/HotspotBot">t.me/HotspotBot</a>. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this. Use this token to access the HTTP API: <strong><span class="has-inline-color has-vivid-red-color">xxxxx:yyyyyyyyyyyyyyy</span></strong> Keep your token secure and store it safely, it can be used by anyone to control your bot. For a description of the Bot API, see this page: <a href="https://core.telegram.org/bots/api">https://core.telegram.org/bots/api</a>
Затем, находим бота в поиске по имени @HotspotBot и нажимаем на кнопку Start, чтобы его запустить.
Далее создаем групповой чат, называем его например HotspotGroup, добавляем в него нашего бота.
Далее открываем браузер и вводим в него вот такую строку, где xxxxx:yyyyyyyyyyyyyyy — токен нашего бота:
https://api.telegram.org/botxxxxx:yyyyyyyyyyyyyyy/getUpdates
Откроется страница примерно такого содержания:
{"ok":true,"result":[{"update_id":436525341,"message": {"message_id":4,"from": <strong><span class="has-inline-color has-vivid-red-color">"id":210801772</span></strong>,"is_bot":false, "first_name":"xxxxxxx","last_name":"xxxxxxx", "language_code":"ru"},"chat":{"id":210801772, "first_name":"xxxxxxx","last_name":"xxxxxx", "type":"private"},"date":1552152487,"text":"/start", "entities":[{"offset":0,"length":6,"type":"bot_command"}]}}, "update_id":436525342,"message":{"message_id":5, "from":"id":210801772,"is_bot":false,"first_name":"xxxxxxxx", "last_name":"xxxxx","language_code":"ru"},"chat":<strong><span class="has-inline-color has-vivid-red-color">"id":-390666473</span></strong>, "title":"xxxxxxxxxx","type":"group", "all_members_are_administrators":true},"date":1552152512, "text":"/join xxxxxxxxxxxxx", "entities":{"offset":0,"length":5,"type":"bot_command"}, {"offset":6,"length":19,"type":"mention"}]}}]}
id групповых чатов начинаются со знака «-» в данном случае нас интересует «id»:-390666473.
Далее нам нужно добавить команды которые будет выполнять наш бот. Для этого возвращаемся к @botFather и пишем ему /setcommands, он спросит какому боту, пишем @HotspotBot и добавляем команды:
hsp-disable — отключает хотспот
hsp-enable — активирует хотспот
Далее переходим к микротику.
Создаем скрипт telegram-bot-start, который будет задавать переменные. Скрипт с правами write следующего содержания:
:global botID "botxxxxx:yyyyyyyyyyyyyyy" ; :global myChatID "-390666473" ;
Создаем скрипт telegram-bot-check, который будет читать сообщения в групповом чате и в случае появления команды запускать ее. Скрипт с правами write следующего содержания:
:global botID; :global myChatID; :local parse do={ :local startLoc ([:find $content $variable -1] + [:len $variable] + 2); :local commaLoc ([:find $content "," $startLoc] - 1 + 1); :local braceLoc ([:find $content "}" $startLoc] - 1 + 1); :local endLoc $commaLoc; :local startSymbol [:pick $content $startLoc] :if ($braceLoc != 0 and ($commaLoc = 0 or $braceLoc < $commaLoc)) do={ :set endLoc $braceLoc; }; :if ($startSymbol = "{") do={ :set endLoc ($braceLoc + 1); }; :if ($quotas = true) do={ :set startLoc ($startLoc + 2); :set endLoc ($endLoc - 1); } :if ($endLoc < $startLoc) do={ :set endLoc ($startLoc + 1); }; :local value [:pick $content $startLoc $endLoc] :log debug message="Telegram: parsed $variable : $value"; :return $value; } :local content [/tool fetch url=("https://api.telegram.org/".$botID."/getUpdates?limit=1&allowed_updates=message") as-value output=user]; :set content ($content ->"data"); :if ([:len $content] > 23 ) do={ :local updateId [$parse content=$content variable="update_id"] :local chat [$parse content=$content variable="chat"] :local chatId [$parse content=$chat variable="id"] :if ($chatId = $myChatID) do={ :local message [$parse content=$content variable="text" quotas=true] ; :log warn message="Command $message received" ; :if ([/system script find name=$message] != "") do={ :system script run $message ; } else={ :tool fetch url=("https://api.telegram.org/".$botID."/sendmessage\?chat_id=".$chatId."&text=Wrong command.") keep-result=no ; }; } else={ :tool fetch url=("https://api.telegram.org/".$botID."/sendmessage\?chat_id=".$chatId."&text=I can't talk with you.") keep-result=no ; }; :set updateId ($updateId +1) ; :tool fetch url=("https://api.telegram.org/".$botID."/getUpdates\?offset=$updateId") keep-result=no ; };
Создаем скрипт hsp-enable, который будет включать Hotspot. Скрипт с правами write следующего содержания:
/ip hotspot enable 0 :global botID; :global myChatID; /tool fetch url="https://api.telegram.org/bot$botID/sendmessage\?chat_id=$myChatID&text=HotSpot-up" keep-result=no
Создаем скрипт hsp-disable, который будет выключать Hotspot. Скрипт с правами write следующего содержания:
/ip hotspot disable 0 :global botID; :global myChatID; /tool fetch url="https://api.telegram.org/bot$botID/sendmessage\?chat_id=$myChatID&text=HotSpot-down" keep-result=no
Далее создаем 2 шедулера, первый выполняется при старте системы: /system script run telegram-bot-start, второй выполняется каждые 30 секунд: /system script run telegram-bot-check.