Re: Телеграмма для Mikrotik...
Добавлено: 23 авг 2023, 19:24
Рад помочь. Будет очень интересно посмотреть!
Форум поддержи и обмена опытом пользователей оборудования RouterBOARD и операционной системы RouterOS Латвийского производителя MikroTik
https://forummikrotik.ru/
Код: Выделить всё
:if ($messageText~"Status Router") do={
:if ([$teRightsControl fMethod=get fGroupID=$userChatID fRightName=root]) do={
$teSystemMenu fChatID=$userChatID
:return true
}
}
:if ($messageText~"Modules") do={
:if ([$teRightsControl fMethod=get fGroupID=$userChatID fRightName=root]) do={
$teModules fChatID=$userChatID
:return true
}
}
У меня получилосьBrook писал(а): ↑29 авг 2023, 22:21 В этом и недостаток таких кнопок. Сложно реализовать принцип одного окна. При нажатии обычной кнопки под сообщением, мы в колбэке получаем ИД этого сообщения и можем его редактировать.
А в случае с reply кнопками мы получаем номер того сообщения, которое в кнопке зашито. С остальными сделать ничего не можем. Только если записывать номера всех отправленных сообщений, но это тот еще гемор.
Код: Выделить всё
#---------------------------------------teAddvalue----------------------------------------------------
# $teNumberMessage - variable data entry
#--------------------------------------teAddvalue----------------------------------------------------
# Function for adding a value to the array
:global teAddvalue
:if (!any $teAddvalue) do={
:global teAddvalue do={
:global teNumberMessage
:set $teNumberMessage ("$teNumberMessage $newvalueTEST1")
:set $teNumberMessage ("$teNumberMessage ; $newvalueTEST2 ;")
}
}
Код: Выделить всё
#---------------------------------------teAddsearchvalue----------------------------------------------------
# $teNumberMessage - variable data entry
#--------------------------------------teAddsearchvalue----------------------------------------------------
:global teAddsearchvalue
:if (!any $teAddsearchvalue) do={
:global teAddsearchvalue do={
# Set the original string
:global teNumberMessage
# Initialize the variable to store the found block
:global teNumberMessageTime
:global teNumberMessageTimeOk
:global teNumberMessageTimeOff
:global teNumberMessageTimeDell
:global teDeleteMessage
# Initialize a variable to store the updated string
:local updatedMessage
:local matchCount 0
# Define a flag to control the loop
:local continueSearch true
# Use a while loop to continue searching until there are no more blocks
:while ($continueSearch) do={
:local blockPos [:len [:find $teNumberMessage ";"]]
# If no more blocks are found, exit the loop
:if ($blockPos = 0) do={
:set teNumberMessage ($teNumberMessageTimeOff)
:set teNumberMessageTimeOff ""
:set teNumberMessageTimeOk ""
:set continueSearch false
} else={
# Iterate through the blocks
:put [ :toarray [:find $teNumberMessage ";"]]
:foreach block in=[ :toarray [:find $teNumberMessage ";"]] do={
:local blockText [:pick [:tostr $teNumberMessage] 0 $block]
:if ([:find $blockText $searchValue] >= 0) do={
:set matchCount ($matchCount + 1)
#:log info ("Found a block with the first part $searchValue, current match count: $matchCount")
# Store the found block in teNumberMessageTimeOk
:set teNumberMessageTimeOk ($teNumberMessageTimeOk . $blockText)
# Find and store the number after the "-"
:local hyphenPos [:find $blockText "-"]
:local numberAfterHyphen [:pick $blockText ($hyphenPos + 1) [:len $blockText]]
:set teNumberMessageTimeDell $numberAfterHyphen
$teDeleteMessage fChatID=$searchValue fMessageID=$numberAfterHyphen
# Remove the found block from teNumberMessage
:set teNumberMessage [:pick $teNumberMessage ([:len $blockText] + 1) [:len $teNumberMessage]]
:delay 500ms
} else={
# If the block doesn't match, add it to the updatedMessage
:set teNumberMessageTimeOff ("$teNumberMessageTimeOff$blockText;")
# Remove the not found block from teNumberMessage
:set teNumberMessage [:pick $teNumberMessage ([:len $blockText] + 1) [:len $teNumberMessage]]
}
}
}
# Output the number of matches
#:put ("Number of matches in the string: $matchCount")
# If there's a remaining block in teNumberMessage, add it to updatedMessage
:if ([:len $teNumberMessage] > 0) do={
:set updatedMessage ($updatedMessage . $teNumberMessage)
}
}
}
}
Код: Выделить всё
:global teAddvalue
:global teAddsearchvalue
:if ($messageText~"Status Router") do={
:local mesing []
:local searchValue []
:set messageID [$teSendMessage fChatID=$queryChatID fText="Start menu Status Router"]
:set mesing ($messageID + 1)
:local newvalueTEST1 []
:local newvalueTEST2 []
:set searchValue $userChatID
:set newvalueTEST1 ("$userChatID-$messageID")
:set newvalueTEST2 ("$userChatID-$mesing")
:if ([$teRightsControl fMethod=get fGroupID=$userChatID fRightName=root]) do={
$teSystemMenu fChatID=$userChatID
$teAddsearchvalue searchValue=$searchValue
$teAddvalue newvalueTEST1=$newvalueTEST1 newvalueTEST2=$newvalueTEST2
:return true
}
}
Код: Выделить всё
import file-name=teMessages.rsc
import file-name=teInterface.rsc
Код: Выделить всё
:put [$teSendMessage fBotID=$botID fChatID=$chatID fText="Test Text"]
Код: Выделить всё
# Сообщение только с текстом и фото
:global teSendPhoto
:local botID "botxxxxxxxxx:FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
:local sendText "Any text..."
:local chatID 1234567890
:local image "https://habrastorage.org/webt/kz/uh/xm/kzuhxmsrjq7mrzqin8aznrrhclw.jpeg"
:local messageID [$teSendPhoto fBotID=$botID fChatID=$chatID fPhoto=$imageRoot fText=$sendText]