ProHoster > Blog > nutizie internet > Template per un bot di telegramma simplice per i scolari in i gradi 7-9 cù Powershell
Template per un bot di telegramma simplice per i scolari in i gradi 7-9 cù Powershell
Durante e cunversazione cù un amicu, aghju amparatu di colpu chì i zitelli in i gradi 8-10 in a so scola ùn sò micca insignati di prugrammazione. Word, Excel è tuttu. Nisun logu, nè Pascal, nè VBA per Excel.
Eru assai sorpresu, hà apertu l'Internet è hà cuminciatu à leghje - Unu di i compiti di una scola specializata hè di prumove l'educazione di una nova generazione chì risponde à e cundizioni di a sucetà di l'infurmazione in u so livellu di sviluppu è di modu di vita.
Stu corsu permetterà à i studienti di cunsulidà in pratica a so cunniscenza di i custrutti basi di u linguaghju di prugrammazione Pascal. (da u prugramma di qualchi gimnasia per 2017)
À a fine, aghju decisu di passà un paru d'ore è sketch un esempiu di "cumu creà un bot simplice per i scolari".
Sottu u tagliu hè cumu scrive un altru bot simplice in Powershell è fà u travagliu senza webhook, IP bianchi, servitori dedicati, macchine virtuali implementate in u nuvulu, è cusì - in un PC di casa regulare cù Windows regulare.
TLDR: Un altru articulu noioso cù errori grammaticali è fattuali, nunda di leghje, senza umore, senza ritratti.
Ùn ci hè nunda di novu in l'articulu, quasi tuttu ciò chì hè scrittu prima hè digià statu nantu à Habré, per esempiu in articuli Instructions: Cumu creà bots in Telegram и Telegram bot per amministratore di sistema.
Inoltre, l'articulu hè deliberatamente redundante per ùn fà micca riferite à a literatura educativa ogni volta. Ùn ci sò micca riferimenti à Gang 4, PowerShell Deep Dives o, per dì, I 5 Pilastri di u Framework AWS Well-Architected in u testu.
Invece di una prefazione, pudete saltà
Sentite liberu di saltàIn u 2006, Microsoft hà liberatu PowerShell 1.0 per Windows XP, Vista è Server 2003. In certi modi, hà rimpiazzatu cose cum'è cmdbat scripts, vb scripts, Windows Script Host è JScript.
Ancu avà, PowerShell pò esse cunsideratu solu cum'è u prossimu passu dopu à l 'opzioni Logo, invece di u prubabilmente ancora usatu Delphi (o qualcosa di più vechje), nunustanti la prisenza di loops, classi, funzioni, MS GUI chiama, Integrazione di Git e accussì on.
Powershell hè utilizatu relativamente raramente; pudete scuntrà solu in a forma di PowerShell Core, VMware vSphere PowerCLI, Azure PowerShell, MS Exchange, Configurazione di u Statu Desiratu, Accessu Web PowerShell è una decina di prugrammi è funzioni più raramenti utilizati. Forse averà un secondu ventu cù a liberazione WSL2, ma ùn hè micca esattamente.
Powershell hà ancu trè grandi vantaghji:
Hè relativamente simplice, ci hè assai letteratura è esempii nantu à questu, è ancu in russo, per esempiu, un articulu nantu à Foreach - da u libru PowerShell in prufundità - circa a diffarenza () è {}
Va cun l'editore ISE, inclusu cù Windows. Ci hè ancu un tipu di debugger quì.
Almenu qualchì tipu di accessu à Internet (via NAT per esempiu)
Per quelli chì anu accessu limitatu à u telegramma - stallatu è cunfiguratu freegate in u navigatore, in certi casi difficili, inseme cù Symple DNS Crypt
Avè un cliente di telegramma chì funziona in u vostru telefunu
Capisce i principii fundamentali - ciò chì hè una variabile, array, loop.
Siccomu ognunu sapi digià questu, è hè digià accadutu, pudete ancu saltàCum'è dichjaratu in l'articulu sopra - Prima di tuttu, un bot per Telegram - hè sempre una applicazione chì funziona da u vostru latu è face richieste à l'API Telegram Bot. Inoltre, l'API hè chjaru - u bot accede à un URL specificu cù parametri, è Telegram risponde cù un oggettu JSON.
Problemi cunnessi: se in qualchì manera scunnisciuta pigliate un codice da un ughjettu JSON è in qualchì manera u mandate per l'esekzione (micca apposta), u codice serà eseguitu per voi.
U prucessu di creazione hè descrittu in dui articuli sopra, ma ripetu: in un telegramma avemu apertu cuntatti, cercate @botfather, dite à /newbot, creanu un bot Botfortest12344321, chjamate Mynext1234bot, è riceve un missaghju cù una chjave unica di u furmulariu 1234544311:AbcDefNNNNNNNNNNNNNN
Pigliate a chjave è ùn la dà micca!
Allora pudete cunfigurà u bot, per esempiu, pruibisce l'aghjunghje à i gruppi, ma in i primi passi ùn hè micca necessariu.
Dumandimu à BotFather per "/mybot" è aghjustate i paràmetri si ùn ci piace micca qualcosa.
Apermu di novu i cuntatti, truvate @Botfortest12344321 quì (hè ubligatoriu per inizià a ricerca cù @), cliccate "inizià" è scrivite à u bot "/ Gloria à i robots". U signu / hè necessariu, ùn ci hè micca bisognu di quote.
U bot, sicuru, ùn risponde micca nunda.
Cuntrollamu chì u bot hè statu creatu è apre.
api.telegram.org/bot1234544311:AbcDefNNNNNNNNNNNNNN/getMe
induve 1234544311:AbcDefNNNNNNNNNNNNNN hè a chjave ricevuta prima,
è uttene una linea cum'è
{"ok":true,"result":{""}}
Avemu a prima frasa secreta (token). Avà avemu bisognu di truvà u sicondu numeru sicretu - l'ID di u chat cù u bot. Ogni chat, gruppu, etc. hè individuale è hà u so propiu numeru (a volte cù un minus - per i gruppi aperti). Per sapè stu numeru, avemu bisognu di dumandà in u navigatore (in fatti, ùn hè micca necessariu in u navigatore, ma per un megliu capiscenu pudete principià cù ellu) l'indirizzu (induve 1234544311: NNNNNNNNNN hè u vostru token).
Cuntrollamu chì pudemu scrive à u chat manualmente: chjamate l'indirizzu da u navigatore
https://api.telegram.org/botваштокен/sendMessage?chat_id=123456789&text="Life is directed motion"
Se ricevi un missaghju da un bot in u vostru chat, va bè, andate à a tappa successiva.
Questu modu (via u navigatore) pudete sempre verificà s'ellu ci sò prublemi cù a generazione di ligami, o se qualcosa hè ammucciatu in un locu è ùn funziona micca.
Ciò chì avete bisognu di sapè prima di cuntinuà a lettura
Telegram hà parechji tippi di chat di gruppu (apertu, chjusu). Per questi chats, alcune di e funzioni (per esempiu, id) sò diverse, chì à volte causanu qualchì problema.
Assumimu chì hè a fine di l'annu 2019, è ancu l'eroi di u nostru tempu, a famosa Man-Orchestra (amministratore, avvucatu, specialista in securità di l'infurmazioni, programatore è praticamenti MVP) Evgeniy V. distingue a variàbile $i da un array. hà ammaistratu loops, fighjate in i prossimi dui anni hà maestru Chocolatey, è dopu Trattamentu parallelu cù PowerShell и Per ogni ughjettu parallelu venerà.
1. Pensemu à ciò chì u nostru bot farà
Ùn aghju micca idee, aghju avutu à pensà. Aghju digià scrittu un bot-notebook. Ùn vulia micca fà un bot "chì manda qualcosa in qualchì locu". Per cunnette à Azure avete bisognu di una carta di creditu, ma da induve u studiente l'avete? Ci hè da nutà chì tuttu ùn hè micca cusì male: i nuvuli principali dannu un tipu di periodu di prova per liberu (ma avete sempre bisognu di un numeru di carta di creditu - è pare chì un dollaru serà debitu da ellu. Ùn mi ricordu se hè stata restituita dopu.)
Senza AI ML ùn hè micca cusì interessante per fà un bot-pover-poet-weaver.
Aghju decisu di fà un bot chì mi ricurdarà (o micca) di e parolle inglesi di u dizziunariu.
Per evitari di fiddle cù a basa di dati, u dizziunariu serà guardatu in un schedariu di testu è aghjurnatu manualmente.
In questu casu, u compitu hè di mustrà i principii di u travagliu, è micca di fà almenu un pruduttu parzialmente finitu.
2. Pruvate ciò chì è cumu per a prima volta
Creemu un cartulare C:poshtranslate
Prima, vedemu chì tipu di powershell avemu, lancemu ISE via start-run
powershell ise
o truvate Powershell ISE in i prugrammi installati.
Dopu à u lanciu, u solitu familiar "qualche tipu di editore" si apre; se ùn ci hè micca un campu di testu, pudete sempre cliccà "File - creà novu".
Fighjemu a versione di powershell - scrivite in u campu di testu:
get-host
è appughjà F5.
Powershell offre à salvà - "U script chì site per eseguisce serà salvatu.", accunsemu, è salvà u schedariu da powershell cù u nome in C: poshtranslate myfirstbotBT100.
Dopu à u lanciamentu, in a finestra di testu più bassa avemu un tavulu di dati:
Name : Windows PowerShell ISE Host
Version : 5.1.(и так далее)
Aghju 5.1 qualcosa, hè abbastanza. Sè vo avete un vechju Windows 7/8 allora ùn hè micca grande affare - ancu se PowerShell hà da esse aghjurnatu à a versione 5 - per esempiu. instructions.
Type Get-Date in a linea di cumanda sottu, appughjà Enter, fighjate à u tempu, andate à u cartulare radicali cù u cumandimu
cd
è sguassate u screnu cù u cumandamentu cls (no, ùn avete micca bisognu di utilizà rm)
Avà verificate ciò chì travaglia è cumu - scrivemu micca ancu u codice, ma duie linee, è pruvate à capisce ciò chì facenu. Cummentemu a linea cù get-host cù u simbulu # è aghjunghje un pocu.
# Пример шаблона бота
# get-host
<# это пример многострочного комментария #>
$TimeNow = Get-Date
$TimeNow
(Ciò chì hè interessante hè chì in a lista di furmazioni di codice in Habré ci sò duie duzina d'opzioni - ma Powershell ùn hè micca. Dos hè quì. Perl hè quì.)
È corremu u codice premendu F5 o ">" da a GUI.
Avemu a seguente output:
Saturday, December 8, 2019 21:00:50 PM (или что-то типа)
Avà guardemu à sti dui linii è certi punti interessanti per ùn vultà micca in questu in u futuru.
A cuntrariu di Pascal (è micca solu), PowerShell stessu prova di determinà quale tipu d'assignà à una variabile; più dettagli nantu à questu sò scritti in l'articulu. Prugramma educativu nantu à scrive in linguaggi di prugrammazione
Dunque, creendu una variàbile $TimeNow è assignendu u valore di a data è l'ora attuale (Get-Date), ùn ci vole micca troppu preoccupatu di quale tipu di dati seranu quì.
True, sta ignuranza pò fà male dopu, ma hè per più tardi. Sottu in u testu ci sarà un esempiu.
Videmu ciò chì avemu. Eseguimu (nantu à a linea di cummanda)
$TimeNow | Get-member
è uttene una pagina di testu incomprensibile
Esempiu di testu incomprensibile numeru 1
PS C:> $TimeNow | Get-member
TypeName: System.DateTime
Name MemberType Definition
---- ---------- ----------
Add <b>Method </b>datetime Add(timespan value)
..
DisplayHint NoteProperty DisplayHintType DisplayHint=DateTime
Date <b>Property </b>datetime Date {get;}
Year Property int Year {get;}
..
DateTime ScriptProperty System.Object DateTime {get=if ((& { Set-StrictMode -Version 1; $this.DisplayHint }) -ieq "Date")...
Comu pudete vede, una variàbile di tipu TypeName: System.DateTime hè stata creata cù una mansa di metudi (in u sensu di ciò chì pudemu fà cù questu ughjettu variabile) è pruprietà.
Chjamemu $TimeNow.DayOfYear - avemu u numeru di u ghjornu di l'annu.
Chjamemu $TimeNow.DayOfYear | Get-Member - avemu TypeName: System.Int32 è un gruppu di metudi.
Chjamemu $TimeNow.ToUniversalTime() - è uttene l'ora in UTC
Debugger
A volte succede chì hè necessariu eseguisce un prugramma finu à una certa linea è vede u statu di u prugramma in quellu mumentu. Per questu scopu, ISE hà una funzione Debug - toggle break point
Mettite un puntu di rottura in un locu à mezu à mezu, eseguite queste duie linee è vede ciò chì pare a pausa.
3. Capisce l'interazzione cù u bot Telegram
Di sicuru, ancu più letteratura hè stata scritta nantu à l'interazzione cù u bot, cù tutti i getpush è cusì, ma u prublema di a teoria pò esse cunsideratu opzione.
In u nostru casu hè necessariu:
Amparate à mandà qualcosa in currispundenza
Amparate à ottene qualcosa da a corrispondenza
3.1 Amparate à mandà qualcosa in currispundenza è riceve da ellu
è in a Federazione Russa à questu puntu avemu l'errore Unable to connect to the remote server.
O ùn avemu micca ricevutu - dipende di l'operatore di telecomunicazione è se u proxy hè cunfiguratu è funziona
Ebbè, tuttu ciò chì resta hè di aghjunghje un proxy. Per piacè nutate chì l'usu di un proxy non criptatu è generalmente fraudulente hè estremamente periculosu per a vostra salute.
U compitu di truvà un proxy di travagliu ùn hè micca assai difficiule - a maiò parte di i proxy http publicati funzionanu. Pensu chì u quintu hà travagliatu per mè.
Sintaxi cù proxy:
Invoke-WebRequest -Uri $URL4SEND -Proxy $MyProxy
Se ricevi un missaghju in u vostru chat cun un bot, allora tuttu hè bè, pudete passà. Se no, cuntinuà a debugging.
Pudete vede ciò chì a vostra stringa $URL4SEND diventa è pruvate à dumandà in u navigatore, cum'è questu:
Write-Host "ParsedHtml"
$MyMessageGet.ParsedHtml # тут интересное
Write-Host "RawContent"
$MyMessageGet.RawContent # и тут интересное, но еще к тому же и читаемое.
Write-Host "Content"
$MyMessageGet.Content
Se tuttu funziona per voi, uttene una longa linea cum'è:
Fortunatamente, in l'articulu publicatu prima Telegram bot per l'amministratore di sistema sta linea (iè, sicondu $MyMessageGet.RawContent | get-member hè System.String), hè digià statu disassemblatu.
4. Prucessa ciò chì riceve (sapemu digià cumu mandà qualcosa)
Cum'è digià scrittu ccà, e cose più necessarie si trovanu in u cuntenutu. Fighjemu un ochju più vicinu.
Prima, scriveremu un paru di frasi più à u bot da l'interfaccia web o da u telefunu
/message1
/message2
/message3
è fighjate à traversu u navigatore à l'indirizzu chì hè statu furmatu in a variabile $URLGET.
Chì ghjè ? Qualchì ughjettu cumplessu da arrays di oggetti chì cuntenenu un identificatore di messagiu end-to-end, identificatore di chat, identificatore di mandatu è assai altre informazioni.
Tuttavia, ùn avemu micca bisognu di capisce "chì tipu d'ughjettu hè questu" - una parte di u travagliu hè digià fattu per noi. Videmu ciò chì ci hè dentru:
Leghje i missaghji ricevuti o parte 4
Write-Host "This is part 4" <# конечно эта строка нам не нужна в итоговом тексте, но по ней удобно искать. #>
$Content4Pars01 = ConvertFrom-Json $MyMessageGet.Content
$Content4Pars01 | Get-Member
$Content4Pars01.result
$Content4Pars01.result[0]
$Content4Pars01.result[0] | Get-Member
$Content4Pars01.result[0].update_id
$Content4Pars01.result[0].message
$Content4Pars01.result[0].message.text
$Content4Pars01.result[1].message.text
$Content4Pars01.result[2].message.text
5. Chì duvemu fà avà ?
Salvemu u schedariu resultanti sottu u nome myfirstbotBT105 o ciò chì ti piace di più, cambiate u titulu è cummentate tuttu u codice digià scrittu via
<#start comment 105 end comment 105#>
Avà avemu bisognu di decide induve uttene u dizziunariu (bene, induve - nantu à u discu in un schedariu) è ciò chì parerà.
Di sicuru, pudete scrive un dizziunariu enormu ghjustu in u testu di u script, ma questu hè cumplettamente fora di u puntu.
Allora vedemu ciò chì Powershell pò travaglià nurmale.
In generale, ùn importa micca u schedariu per travaglià, ùn ci importa micca.
Avemu una scelta: txt (pudete, ma perchè), csv, xml.
Pudemu guardà tutti ?
Creemu una classa MyVocabClassExample1 è una variabile $MyVocabExample1
Aghju nutatu chì a classa hè scritta senza $
qualchì codice #5
write-host "This is part 5"
class MyVocabClassExample1 {
[string]$Original # слово
[string]$Transcript
[string]$Translate
[string]$Example
[int]$VocWordID # очень интересный момент. Использование int с его ограничениями может порой приводить к диким последствиям, для примера - недавний случай с SSD HPE. Изначально я не стал добавлять этот элемент, потом все же дописал и закомментировал.
}
$MyVocabExample1 = [MyVocabClassExample1]::new()
$MyVocabExample1.Original = "Apple"
$MyVocabExample1.Transcript = "[ ˈapəl ]"
$MyVocabExample1.Translate = "Яблоко"
$MyVocabExample1.Example = "An apple is a sweet, edible fruit produced by an apple tree (Malus domestica)"
# $MyVocabExample1.$VocWordID = 1
$MyVocabExample2 = [MyVocabClassExample1]::new()
$MyVocabExample2.Original = "Pear"
$MyVocabExample2.Transcript = "[ pe(ə)r ]"
$MyVocabExample2.Translate = "Груша"
$MyVocabExample2.Example = "The pear (/ˈpɛər/) tree and shrub are a species of genus Pyrus"
# $MyVocabExample1.$VocWordID = 2
Pruvemu di scrive questu in i schedari usendu campione.
Comu hè faciule di vede, MS ùn hè micca particularmente distintu da a so logica; per una prucedura simili, in un casu -FilePath hè utilizatu, in un altru -Path.
Inoltre, in u terzu schedariu, a lingua russa hè sparita, in u quartu schedariu hè risultatu ... bè, qualcosa hè accadutu. #TYPE System.Object[] 00
# "Count", "Length", "LongLength", "Rank", "SyncRoot", "IsReadOnly", "IsFixedSize", "IsSynchronized" #
Riscrivimu un pocu:
Sembra avè aiutatu, ma ùn mi piace ancu u furmatu.
In particulare ùn mi piace micca chì ùn possu micca mette linee da un ughjettu in un schedariu direttamente.
A propositu, postu chì avemu cuminciatu à scrive à i schedari, pudemu cumincià à mantene un logu di startup? Avemu u tempu cum'è una variabile, pudemu stabilisce u nome di u schedariu.
True, ùn ci hè nunda di scrive ancu, ma pudete pensà à cumu megliu per rotà i logs.
Pruvemu xml per avà.
$MyFilenameExample06 = $ScriptDir + "Example06.xml"
$MyVocabExample4AsArray = Import-Clixml -Path $MyFilenameExample06
# $MyVocabExample4AsArray
# $MyVocabExample4AsArray[0]
# и немного о совершенно неочевидных нюансах. Powershell время от времени ведет себя не так, как вроде бы как бы стоило бы ожидать бы.
# например у меня эти два вывода отличаются
# Write-Output $MyVocabExample4AsArray
# write-host $MyVocabExample4AsArray
Riturnemu à u compitu. Avemu scrittu un schedariu di teste, leghjite, u formatu di almacenamentu hè chjaru, se ne necessariu, pudete scrive un editore di fugliale separatu per aghjunghje è sguassà e linee.
Lasciami ricurdà chì u compitu era di fà un picculu bot di furmazione.
Formatu di travagliu: Mandu u cumandamentu "esempiu" à u bot, u bot mi manda una parolla è una trascrizzione aleatoriamente selezziunate, è dopu à 10 seconde mi manda una traduzzione è un cumentu. Sapemu cumu leghje cumandamenti, ci piacerebbe ancu amparà à selezziunà automaticamente è cuntrollà i proxy, è resettanu i contatori di messagi à l'obliu.
Scommentemu tuttu ciò chì hà cummentatu prima cum'è innecessariu, cummentate l'esempii avà innecessarii cù txt è csv, è salvà u schedariu cum'è versione B106
Oh iè. Mandemu qualcosa à u bot di novu.
6. Dispatch da e funzioni è più
Prima di trasfurmà a ricezione, avete bisognu di creà una funzione per mandà "almenu qualcosa" altru ch'è un missaghju di prova.
Di sicuru, in l'esempiu averemu solu un mandatu è un solu trasfurmazioni, ma chì s'ellu ci vole à fà a stessa cosa parechje volte?
Hè più faciule per scrive una funzione. Cusì, avemu una variàbbili di tipu oggettu $MyVocabExample4AsArray, lettu da u schedariu, in a forma di un array di quant'è dui elementi. Andemu à leghje.
À u listessu tempu, avemu da trattà cù u clock; avemu bisognu dopu (in fattu, in questu esempiu ùn avemu micca bisognu :)
Qualchì codice #6.1
Write-Output "This is Part 6"
$Timezone = (Get-TimeZone)
IF($Timezone.SupportsDaylightSavingTime -eq $True){
$TimeAdjust = ($Timezone.BaseUtcOffset.TotalSeconds + 3600) } # приведенное время
ELSE{$TimeAdjust = ($Timezone.BaseUtcOffset.TotalSeconds)
}
function MyFirstFunction($SomeExampleForFunction1){
$TimeNow = Get-Date
$TimeNow.ToUniversalTime()
# $MyText02 = $TimeNow + " " + $SomeExampleForFunction1 # и вот тут мы получим ошибку
$MyText02 = $SomeExampleForFunction1 + " " + $TimeNow # а тут не получим, кто догадается почему - тот молодец.
$URL4SendFromFunction = "https://api.telegram.org/bot$MyToken/sendMessage?chat_id=$MyChatID&text=$MyText02"
Invoke-WebRequest -Uri $URL4SendFromFunction -Proxy $MyProxy
}
Comu pudete vede facilmente, a funzione chjama $MyToken è $MyChatID, chì eranu codificati prima.
Ùn ci hè bisognu di fà questu, è se $MyToken hè unu per ogni bot, allora $MyChatID cambierà secondu u chat.
Tuttavia, postu chì questu hè un esempiu, l'ignoreremu per avà.
Siccomu $MyVocabExample4AsArray ùn hè micca un array, ancu s'ellu hè assai simili à unu, allora ùn pudete micca solu piglià dumandà a so durata.
Una volta avemu da fà qualcosa chì ùn si pò fà - parachute micca secondu u codice - pigliate è cuntate
Qualchì codice #6.2
$MaxRandomExample = 0
foreach ($Obj in $MyVocabExample4AsArray) {
$MaxRandomExample ++
}
Write-Output $MaxRandomExample
$RandomExample = Get-Random -Minimum 0 -Maximum ($MaxRandomExample)
$TextForExample1 = $MyVocabExample4AsArray[$RandomExample].Original
# MyFirstFunction($TextForExample1)
# или в одну строку
# MyFirstFunction($MyVocabExample4AsArray[Get-Random -Minimum 0 -Maximum ($MaxRandomExample -1)].Example)
# Угадайте сами, какой пример легче читается посторонними людьми.
Random caratteristica interessante. Diciamu chì vulemu riceve 0 o 1 (avemu solu dui elementi in l'array). Quandu stabilisce e fruntiere 0..1, averemu "1"?
no - ùn l'avemu micca, avemu un esempiu speciale Esempiu 2: Ottene un interu aleatoriu trà 0 è 99 Get-Random -Maximu 100
Dunque, per 0..1 avemu bisognu di stabilisce a dimensione 0..2, cù u numeru massimu di elementi = 1.
7. Trattamentu di i missaghji ricevuti è a lunghezza massima di a fila
Induve avemu firmatu prima ? avemu a variabile ricevuta $MyMessageGet
è $Content4Pars01 ottenutu da ellu, di quale avemu interessatu in l'elementi di l'array Content4Pars01.result.
Andemu per tuttu ciò chì hè ricevutu è mandà una risposta se u messagiu era /parola
u casu di custruzzione, ciò chì certi descrive cum'è if-elseif, hè chjamatu in powershell via l'interruttore. À u listessu tempu, u codice sottu usa a chjave -wildcard, chì hè cumplettamente inutile è ancu dannusu.
Qualchì codice #7.1
Write-Output "This is part 7"
Foreach ($Result in $Content4Pars01.result) # Да, можно сделать быстрее
{
switch -wildcard ($Result.message.text)
{
"/word" {MyFirstFunction($TextForExample1)}
}
}
Eseguimu u script un paru di volte. Averemu a stessa parolla duie volte per ogni tentativu di esecutivu, soprattuttu se avemu fattu un sbagliu in l'implementazione di casuale.
Ma ferma. Ùn avemu micca mandatu / parola di novu, allora perchè u missaghju hè trattatu di novu?
A fila per mandà missaghji à u bot hà una durata finita (100 o 200 missaghji, pensu) è deve esse sbulicatu manualmente.
Questu hè di sicuru descrittu in a ducumentazione, ma avete da leghje!
In questu casu, avemu bisognu di u paràmetru ?chat_id, è &timeout, &limit, &parse_mode=HTML è &disable_web_page_preview=true ùn sò micca bisognu.
Documentazione per Telegram api hè quì Si dice in biancu è in inglese: Identificatore di a prima aghjurnazione da esse restituita. Deve esse più grande di unu di u più altu trà l'identificatori di l'aghjurnamenti ricevuti prima. Per automaticamente, l'aghjurnamenti cumincianu cù i primi micca cunfirmata l'aghjurnamentu sò tornati. Un aghjurnamentu hè cunsideratu cunfirmatu appena getUpdates hè chjamatu cù un offset Lingua cà u so update_id. L'offset negativu pò esse specificatu per ricuperà l'aghjurnamenti partendu da -offset update da a fine di a fila di l'aghjurnamenti. Tutte l'aghjurnamenti precedenti saranu scurdati.
Iè, è l'avemu resettatu è riscrive a funzione un pocu. Avemu duie opzioni - passà u missaghju tutale à a funzione è u processà sanu sanu in a funzione, o dà solu l'ID di missaghju è resettate. Per esempiu, u sicondu pare più simplice.
Prima, a nostra stringa di dumanda "tutti i missaghji" pareva
Nimu ùn vi pruibisce di riceve prima tutti i missaghji, li processà, è solu dopu a dumanda di trasfurmazioni successu unconfirmed -> cunfirmata.
Perchè hè sensu di chjamà a cunferma dopu chì tuttu u prucessu hè finitu? Un fallimentu hè pussibule in u mità di l'esekzione, è se per l'esempiu di un chatbot gratuitu, manca un missaghju unicu ùn hè nunda di spiciale, allora si tratta di u salariu o di a transazzione di carta di qualcunu, u risultatu pò esse peghju.
Un paru di più linee di codice
$LastMessageId = ($Content4Pars01.result | select -last 1).update_id #ошибку в этом месте предполагается исправить самостоятельно.
$URLGET1 = "https://api.telegram.org/bot$mytoken/getUpdates?offset=$LastMessageId&limit=100"
Invoke-WebRequest -Uri $URLGET1 -Method Get -Proxy $MyProxy
8. Invece di una cunclusione
Funzioni basi - lettura di missaghji, resetting fila, lettura da u schedariu è scrive à u schedariu sò fatti è mostra.
Ci sò solu quattru cose da fà:
mandendu a risposta curretta à una dumanda in chat
mandendu una risposta à ANY chat à quale u bot hè statu aghjuntu
esecutà codice in un ciclu
lanciari un bot da u pianificatore di Windows.
Tutti issi compiti sò sèmplice è ponu esse facirmenti rializatu da leghje a ducumentazione circa paràmetri cum'è
Set-ExecutionPolicy Unrestricted è -ExecutionPolicy Bypass
ciclu di a forma
$TimeToSleep = 3 # опрос каждые 3 секунды
$TimeToWork = 10 # минут
$HowManyTimes = $TimeToWork*60/$TimeToSleep # счетчик для цикла
$MainCounter = 0
for ($MainCounter=0; $MainCounter -le $HowManyTimes) {
sleep $TimeToSleep
$MainCounter ++