Страница 10 из 13
Re: Телеграмма для Mikrotik...
Добавлено: 11 авг 2023, 13:23
Apollo22
Brook писал(а): ↑10 авг 2023, 12:50
Apollo22 писал(а): ↑10 авг 2023, 11:50
Приветствую всех.
Так как с версии OS 7.9 поменялся формат вывода даты с (aug/10/2023) на (2023-08-10),
я придумал решение которое будет работать при обоих форматах.
Понимаю что решение не очень но оно работает
Код: Выделить всё
:global teGetDate
:if (!any $teGetDate) do={ :global teGetDate do={
:local date
:local tmpdate [/system clock get date]
:local dateformat
:local tpmpformat [:pick $tmpdate 4]
:if ($tpmpformat = 1) do={:set dateformat 0} else={:set dateformat 1}
:if ($dateformat = 0) do={
:local months {"jan"=1; "feb"=2; "mar"=3; "apr"=4; "may"=5; "jun"=6; "jul"=7; "aug"=8; "sep"=9; "oct"=10; "nov"=11; "dec"=12}
:local tmpm ($months -> [:pick $tmpdate 0 3])
:if ($tmpm < 10) do={:set tmpm ("0".$tmpm)
}
:return (([:pick $tmpdate 7 11]).".".$tmpm.".".([:pick $tmpdate 4 6]))
} else={
:if ($dateformat > 0) do={
:return ([:pick $tmpdate 0 4].".".[:pick $tmpdate 5 7].".".[:pick $tmpdate 8 10])
}
}
}
}
Не совсем понял вот это
:local tpmpformat [:pick $tmpdate 4]
:if ($tpmpformat = 1) ...
Получается проверяем есть ли на этом месте в строке 1? А если там другая дата?
Наверное надо искать символ "/" и по нему определять формат даты?
upd: Пардон посмотрел не на ту дату. Наверное надо искать символ "-"
Код: Выделить всё
:local tmpdate [system/clock/get date];
:local tpmpformat [:pick $tmpdate 4];
:if ($tpmpformat = "-") do={...}
Да вы правы нужно искать символ "/" или "-"
Но при выполнении данной команды :local tpmpformat [:pick $tmpdate 4];
Результат будет число "1" а не знак "/" , поэтому и написал такой костыль.
Но я нашел решение
Код: Выделить всё
:local tmpdate [system/clock/get date];
:local dateformat
:local tpmpformat [:pick $tmpdate 0 4]
:local tpmpformat1 [:pick $tpmpformat 3]
:if ($tpmpformat1 = "/") do={:set dateformat 0} else={:set dateformat 1}
Так как сейчас два вида формата даты, то определять проще по первому формату (aug/10/2023).
Четвертый знак как раз и будет символ "/"
Re: Телеграмма для Mikrotik...
Добавлено: 13 авг 2023, 01:01
Brook
Да вы правы нужно искать символ "/" или "-"
Но при выполнении данной команды :local tpmpformat [:pick $tmpdate 4];
Результат будет число "1" а не знак "/" , поэтому и написал такой костыль.Да вы правы нужно искать символ "/" или "-"
Но при выполнении данной команды :local tpmpformat [:pick $tmpdate 4];
Результат будет число "1" а не знак "/" , поэтому и написал такой костыль.
Команда
:pick возвращает подстроку. Если не указано второе значение, то возвращает символ.
В данном случае вернет "-", если дата 2023-10-10
Я уже внес исправления в функцию и она прекрасно работает с новой версией.
Кстати, большое спасибо, что обратили на это внимание.
Re: Телеграмма для Mikrotik...
Добавлено: 13 авг 2023, 11:48
Apollo22
Это вам огромное спасибо за данный проект!
Я читал что вы хотите переписать бота для использования нижних кнопок меню (надеюсь правильно их назвал),
очень интересно опробовать данный функционал если он готов.
Так как я изменил пункты меню под себя то я столкнулся с некоторыми неудобствами.
Нет возможности использовать условия для вывода кнопок меню.
Хотел создать меню с настройками бота под конкретную задачу (чтоб не плодить кучу версий бота)
То есть хотел отключать вывод некоторых пунктов меню.
Вторичные меню нормально работают с условиями.
У меня есть надежда что новый формат кнопок меню сможет реагировать на условия.
Я конечно понимаю что мои хотелки не вписываться в концепцию вашего проекта.
Еще раз спасибо вам огромное.

Re: Телеграмма для Mikrotik...
Добавлено: 13 авг 2023, 14:50
Brook
Apollo22 писал(а): ↑13 авг 2023, 11:48
Это вам огромное спасибо за данный проект!
Я читал что вы хотите переписать бота для использования нижних кнопок меню (надеюсь правильно их назвал),
очень интересно опробовать данный функционал если он готов.
Так как я изменил пункты меню под себя то я столкнулся с некоторыми неудобствами.
Нет возможности использовать условия для вывода кнопок меню.
Хотел создать меню с настройками бота под конкретную задачу (чтоб не плодить кучу версий бота)
То есть хотел отключать вывод некоторых пунктов меню.
Вторичные меню нормально работают с условиями.
У меня есть надежда что новый формат кнопок меню сможет реагировать на условия.
Я конечно понимаю что мои хотелки не вписываться в концепцию вашего проекта.
Еще раз спасибо вам огромное.
Да, есть мысли написать новый движок. Только это будут не нижние кнопки, а инлайн меню. Сейчас такая менюшка есть в разделе Terminal.
Если их использовать, то можно организовать принцип одного окна и отказаться от групп и от хранения информации в комментариях самого микротика.
Что касается условий, не вижу препятствий.
Код: Выделить всё
:local pictScripts "\F0\9F\93\9A"
:local buttonScripts [$teBuildButton fPictButton=$pictScripts fTextButton=" List of available scripts" fTextCallBack="teCallbackRootMenu,scripts"]
:local line1 "$buttonAbout"
:local line2 "$NL$buttonTerminal"
:local line3 "$NL$buttonSystem"
:local line4 "$NL$buttonModules"
:local line5 "$NL$buttonScripts"
:local line "$line1$line2$line3$line4$line5"
:local replyMarkup [$teBuildKeyboard fButtonsKeyBoard=$line fReplyKeyboard=false]
Это код из
teRootMenu. Последняя строка строит клавиатуру. А перед ней добавляются кнопки. Ничего не мешает создавать кнопки в зависимости от условия и строить клавиатуру из них.
Re: Телеграмма для Mikrotik...
Добавлено: 13 авг 2023, 21:00
Brook
А текст функции получения даты получился такой.
Код: Выделить всё
#---------------------------------------------------teGetDate--------------------------------------------------------------
# Function returns the current date converted to the format dd.mm.yyyy
# and returns it in text format
# No params.
#---------------------------------------------------teGetDate--------------------------------------------------------------
:global teGetDate
:if (!any $teGetDate) do={ :global teGetDate do={
:local date
:local tmpdate [/system clock get date]
:local dateformat [:pick $tmpdate 4]
:if ($dateformat != "-") do={
:local months {"jan"=1; "feb"=2; "mar"=3; "apr"=4; "may"=5; "jun"=6; "jul"=7; "aug"=8; "sep"=9; "oct"=10; "nov"=11; "dec"=12}
:local tmpm ($months -> [:pick $tmpdate 0 3])
:if ($tmpm < 10) do={:set tmpm ("0".$tmpm) }
:return (([:pick $tmpdate 7 11]).".".$tmpm.".".([:pick $tmpdate 4 6]))
} else={
:return ([:pick $tmpdate 8 10].".".[:pick $tmpdate 5 7].".".[:pick $tmpdate 0 4])
}
}
}
Re: Телеграмма для Mikrotik...
Добавлено: 20 авг 2023, 13:14
Apollo22
Хочется вот такое иметь меню
В моем случае это обусловлено тем что Mikrotik присылает сообщение о какой либо проблеме.
Сейчас эти оповещения выведены в отдельную группу и это не удобно так как нужно переходить в чат к боту.
Инлайн меню интересно но как по мне не практично, много пунктов меню не очень буду смотреться.
В случае Reply кнопок то можно хоть 3 штуки в ряд сделать.
Если у вас есть наработки как создать эти кнопки то поделитесь пожалуйста.
Заранее спасибо вам.
Re: Телеграмма для Mikrotik...
Добавлено: 20 авг 2023, 16:13
Brook
Apollo22 писал(а): ↑20 авг 2023, 13:14
Хочется вот такое иметь меню
В моем случае это обусловлено тем что Mikrotik присылает сообщение о какой либо проблеме.
Сейчас эти оповещения выведены в отдельную группу и это не удобно так как нужно переходить в чат к боту.
Инлайн меню интересно но как по мне не практично, много пунктов меню не очень буду смотреться.
В случае Reply кнопок то можно хоть 3 штуки в ряд сделать.
Если у вас есть наработки как создать эти кнопки то поделитесь пожалуйста.
Заранее спасибо вам.
В папке
Library->Interface есть функция создания таких кнопок.
teBuildReplyButton - строит кнопку.У нее три параметра,
fPictButton - картинка;
fTextButton - текст и
fRequestLocation - запрос местоположения.
Если передать функции
teBuildKeyboard такую кнопку и установить параметр
fReplyKeyboard=true, то из них будет создана клавиатура.
В остальном все так же, как и с обычными кнопками. Создаем клавиатуру, привязываем к сообщению и отправляем. А не используются они в боте потому, что там нельзя прописать
Callback и обрабатывать придется в
teMessageResponse.
В общем не нашел им применение, но все необходимое для этого есть.
Тут еще надо понимать, что к сообщению можно привязать только одну клавиатуру. Или с обычными кнопками или с reply.
Были эксперименты. Reply привязывал к верхней картинке (это ведь тоже сообщение), а обычную к основному. Не помню чем закончилось, но вроде работало.
Re: Телеграмма для Mikrotik...
Добавлено: 22 авг 2023, 18:57
Apollo22
Brook писал(а): ↑20 авг 2023, 16:13
Apollo22 писал(а): ↑20 авг 2023, 13:14
Хочется вот такое иметь меню
В моем случае это обусловлено тем что Mikrotik присылает сообщение о какой либо проблеме.
Сейчас эти оповещения выведены в отдельную группу и это не удобно так как нужно переходить в чат к боту.
Инлайн меню интересно но как по мне не практично, много пунктов меню не очень буду смотреться.
В случае Reply кнопок то можно хоть 3 штуки в ряд сделать.
Если у вас есть наработки как создать эти кнопки то поделитесь пожалуйста.
Заранее спасибо вам.
В папке
Library->Interface есть функция создания таких кнопок.
teBuildReplyButton - строит кнопку.У нее три параметра,
fPictButton - картинка;
fTextButton - текст и
fRequestLocation - запрос местоположения.
Если передать функции
teBuildKeyboard такую кнопку и установить параметр
fReplyKeyboard=true, то из них будет создана клавиатура.
В остальном все так же, как и с обычными кнопками. Создаем клавиатуру, привязываем к сообщению и отправляем. А не используются они в боте потому, что там нельзя прописать
Callback и обрабатывать придется в
teMessageResponse.
В общем не нашел им применение, но все необходимое для этого есть.
Тут еще надо понимать, что к сообщению можно привязать только одну клавиатуру. Или с обычными кнопками или с reply.
Были эксперименты. Reply привязывал к верхней картинке (это ведь тоже сообщение), а обычную к основному. Не помню чем закончилось, но вроде работало.
Это все супер!
Но что-то я не пойму как дальше все связать, прошу не кидаться в меня тапками.
Как обработать сообщение в teMessageResponse?
Можно пример обработки?
Заранее спасибо.
Re: Телеграмма для Mikrotik...
Добавлено: 22 авг 2023, 20:20
Brook
Да без проблем.
При нажатии на
Reply кнопку, в чат с ботом улетит текстовое сообщение, которое в этой кнопке прописано. Это сообщение попадет в модуль
teMessageResponse.
Если откроете сам модуль, то в нем, после объявления всех переменных идут проверки условий. Например:
Код: Выделить всё
:if ($messageText~"start") do={
:if ([$teRightsControl fMethod=get fGroupID=$userChatID fRightName=root]) do={
$teRootMenu fChatID=$userChatID
:return true
}
}
В данном случае мы проверяем текст сообщения и если это
start, то запускаем на выполнение модуль
$teRootMenu. Это первое условие в модуле, которое отвечает за реакцию на команду
start. Рекомендую добавлять свой код после этого блока.
Если добавить в
teMessageResponse свой блок с условием, то он выполнится. К примеру в
Reply кнопке зашит текст
"Hello"...
Код: Выделить всё
:if ($messageText~"Hello") do={
:set messageID [$teSendMessage fChatID=$queryChatID fText="Hi, am mikRobot"]
:return true
}
... в ответ прилетит сообщение
Hi, am mikRobot. Тоже самое произойдет, если просто отправить сообщение
Hello.
В этом блоке уже может быть Ваш код, какой пожелаете...
Надеюсь понятно объяснил. У меня бывают с этим проблемы.
Re: Телеграмма для Mikrotik...
Добавлено: 23 авг 2023, 18:35
Apollo22
Brook писал(а): ↑22 авг 2023, 20:20
Да без проблем.
При нажатии на
Reply кнопку, в чат с ботом улетит текстовое сообщение, которое в этой кнопке прописано. Это сообщение попадет в модуль
teMessageResponse.
Если откроете сам модуль, то в нем, после объявления всех переменных идут проверки условий. Например:
Код: Выделить всё
:if ($messageText~"start") do={
:if ([$teRightsControl fMethod=get fGroupID=$userChatID fRightName=root]) do={
$teRootMenu fChatID=$userChatID
:return true
}
}
В данном случае мы проверяем текст сообщения и если это
start, то запускаем на выполнение модуль
$teRootMenu. Это первое условие в модуле, которое отвечает за реакцию на команду
start. Рекомендую добавлять свой код после этого блока.
Если добавить в
teMessageResponse свой блок с условием, то он выполнится. К примеру в
Reply кнопке зашит текст
"Hello"...
Код: Выделить всё
:if ($messageText~"Hello") do={
:set messageID [$teSendMessage fChatID=$queryChatID fText="Hi, am mikRobot"]
:return true
}
... в ответ прилетит сообщение
Hi, am mikRobot. Тоже самое произойдет, если просто отправить сообщение
Hello.
В этом блоке уже может быть Ваш код, какой пожелаете...
Надеюсь понятно объяснил. У меня бывают с этим проблемы.
Большое спасибо за подсказки.
Теперь стало намного интереснее.
Как сделаю что-то более менее рабочее то обязательно покажу.