Isakhelo se-telegram bot elula yabantwana besikolo abakumabanga 7-9 usebenzisa i-Powershell

Ngexesha leencoko nomhlobo, ndafunda ngequbuliso ukuba abantwana abakumabanga 8-10 esikolweni sabo abafundiswa inkqubo kwaphela. ILizwi, iExcel nayo yonke into. Akukho logo, nditsho noPascal, nditsho neVBA ye-Excel.

Ndothuka kakhulu, ndavula i-Intanethi kwaye ndaqala ukufunda -
Omnye wemisebenzi yesikolo esikhethekileyo kukukhuthaza imfundo yesizukulwana esitsha esihlangabezana neemeko zoluntu lolwazi kwinqanaba lophuhliso kunye nendlela yokuphila.
Le khosi iya kuvumela abafundi ukuba badibanise ngokuqhelanisa ulwazi lwabo lolwakhiwo olusisiseko lwePascal programming language. (ukusuka kwiprogram ye-gymnasium ethile ngo-2017)

Ekugqibeleni, ndaye ndagqiba ekubeni ndichithe iiyure ezimbalwa kwaye ndizobe umzekelo "wendlela yokwenza i-bot elula yabantwana besikolo."

Apha ngezantsi kunqunyulwe indlela yokubhala enye i-bot elula kwi-Powershell kwaye uyenze isebenze ngaphandle kwe-webhook, ii-IP ezimhlophe, iiseva ezinikezelweyo, oomatshini abasetyenziswayo efini, njalo njalo-kwiPC yasekhaya eqhelekileyo eneWindows eqhelekileyo.

I-TLDR: Elinye inqaku elikruqulayo elineempazamo zegrama neziyinyaniso, akukho nto yokufunda, akukho mahlaya, akukho mifanekiso.

Akukho nto entsha kwinqaku, phantse yonke into ebhaliweyo ngaphambili sele ikhona kwiHabré, umzekelo kumanqaku Imiyalelo: Uyenza njani i-bots kwiTelegram и Ibhot yeTelegram yomlawuli wenkqubo.
Ngaphezu koko, eli nqaku lingasebenzi ngamabom ukuze lingabhekiseli kuncwadi olufundisayo ngalo lonke ixesha. Akukho zimbekiselo kwi-Gang 4, i-PowerShell Deep Dives okanye, yithi, Iintsika ezi-5 ze-AWS iSakhelo esakhiwe kakuhle kwisicatshulwa.

Endaweni yentshayelelo, ungatsiba

Zive ukhululekile ukutsibaNgo-2006, iMicrosoft yakhupha iPowerShell 1.0 yeWindows XP, Vista, kunye neSeva ka-2003. Ngandlela thile, ithathe indawo yezinto ezinje nge cmdbat scripts, vb scripts, Windows Script Host kunye neJScript.

Okwangoku, i-PowerShell inokuqwalaselwa kuphela njengenyathelo elilandelayo emva kweenketho zeLogo, endaweni yokuba mhlawumbi isasetyenziswa iDelphi (okanye into endala), nangona kukho iilophu, iiklasi, imisebenzi, iifowuni ze-MS GUI, Ukudityaniswa kweGit kwaye njalo njalo.

I-Powershell isetyenziswa ngokungaqhelekanga; unokuhlangabezana nayo kuphela ngendlela ye-PowerShell Core, VMware vSphere PowerCLI, i-Azure PowerShell, i-MS Exchange, i-Desired State Configuration, Ukufikelela kwiWebhu yePowerShell kunye neshumi elinesibini okanye ngaphezulu kweenkqubo kunye nemisebenzi engafane isetyenziswe. Mhlawumbi uya kufumana umoya wesibini kunye nokukhululwa WSL2, kodwa akunjalo ncam.

I-Powershell nayo ineenzuzo ezintathu ezinkulu:

  1. Kuyinto elula, kukho uncwadi oluninzi kunye nemizekelo malunga nayo, kwaye nakwisiRashiya, umzekelo, inqaku malunga ne-Foreach - ukusuka kwincwadi PowerShell ngobunzulu - malunga nomahluko () kunye {}
  2. Uhamba nomhleli ISE, ifakiwe kunye neWindows. Kukho nolunye uhlobo lwe debugger apho.
  3. Kulula ukufowuna kuyo amacandelo okwakha ujongano lomzobo.

0. Ukulungiselela.

Siza kufuna:

  • IWindows PC (ndinayo Windows 10)
  • Ubuncinci uhlobo oluthile lokufikelela kwi-Intanethi (nge-NAT umzekelo)
  • Kwabo banokufikelela okulinganiselweyo kwitelegram - efakwe kwaye iqwalaselwe i-freegate kwisiphequluli, kwiimeko ezinzima, kunye ne-Symple DNS Crypt.
  • Ukuba nomthengi osebenzayo wetelegram kwifowuni yakho
  • Ukuqonda izinto ezisisiseko- yeyiphi into eguquguqukayo, uluhlu, iluphu.

Ivulwe kwaye yafunda amanqaku - Imiyalelo: Uyenza njani i-bots kwiTelegram и Ibhot yeTelegram yomlawuli wenkqubo

1. Masenze enye i-bot yovavanyo.

Kuba wonke umntu sele eyazi le nto, kwaye sele yenzekile, unokuyitsibaNjengoko kuchaziwe kwinqaku elingasentla - Okokuqala, i-bot yeTelegram - iseyisicelo esisebenza kwicala lakho kwaye yenza izicelo kwiTelegram Bot API. Ngaphezu koko, i-API icacile - i-bot ifikelela kwi-URL ethile kunye neeparitha, kwaye iTelegram iphendula ngento ye-JSON.

Iingxaki eziyeleleneyo: ukuba ngandlela ithile engaziwayo uthatha ikhowudi ethile kwinto ye-JSON kwaye ngandlela ithile uyithumele ukuze iphunyezwe (hayi ngenjongo), ikhowudi iya kwenzelwa wena.

Inkqubo yokudala ichazwe kumanqaku amabini angasentla, kodwa ndiyaphinda: kwitelegram sivula abafowunelwa, khangela @botfather, mxelele /newbot, yenza i-bot Botfortest12344321, yibize iMynext1234bot, kwaye ufumane umyalezo onesitshixo esikhethekileyo ifomu 1234544311:AbcDefNNNNNNNNNNNNNNNN

Qaphela isitshixo kwaye ungamniki!

Emva koko unokuqwalasela i-bot, umzekelo, ukunqanda ukuyongeza kumaqela, kodwa kumanyathelo okuqala oku akuyimfuneko.

Masibuze kuBotFather "/mybot" kwaye sihlengahlengise useto ukuba akukho nto siyithandayo.

Masivule abafowunelwa kwakhona, fumana @Botfortest12344321 apho (kunyanzelekile ukuba uqalise ukukhangela nge-@), cofa "ukuqala" kwaye ubhalele kwi-bot "/ Uzuko kwiirobhothi." I / uphawu luyafuneka, iikowuti azifuneki.
I-bot, ngokuqinisekileyo, ayiyi kuphendula nantoni na.

Makhe sijonge ukuba i-bot yenziwe kwaye siyivule.

api.telegram.org/bot1234544311:AbcDefNNNNNNNNNNNNNN/getMe
apho 1234544311:AbcDefNNNNNNNNNNNNNN sisitshixo esamkelwe ngaphambili,
kwaye ufumane umgca onje
{"kulungile":yinyani,"isiphumo":{""}}

Sinebinzana lokuqala eliyimfihlo (uphawu). Ngoku kufuneka sifumane inombolo yesibini eyimfihlo - i-ID yengxoxo kunye ne-bot. Incoko nganye, iqela, njalo njalo lilodwa kwaye linenombolo yalo (ngamanye amaxesha ngokuthabatha - kumaqela avuliweyo). Ukuze sifumane le nombolo, kufuneka sicele kwi-browser (eqinisweni, akuyimfuneko kwaphela kwisikhangeli, kodwa ukuqonda okungcono ungaqala ngayo) idilesi (apho 1234544311:NNNNNNNNNN ithokheni yakho).

https://api.telegram.org/bot1234544311:NNNNNNNNN/getUpdates

kwaye ufumane impendulo efana

{"kulungile":yinyani,"isiphumo":[{"uhlaziyo_iid":...,... ncokola":"{"id":123456789

Sidinga i-chat_id.

Makhe sijonge ukuba sinokubhalela kwingxoxo ngesandla: fowunela idilesi kwisikhangeli

https://api.telegram.org/botваштокен/sendMessage?chat_id=123456789&text="Life is directed motion"

Ukuba ufumana umyalezo ovela kwi-bot kwincoko yakho, kulungile, udlulela kwinqanaba elilandelayo.

Ngale ndlela (nge-browser) unokuhlala ujonga ukuba kukho iingxaki ngesizukulwana sekhonkco, okanye ukuba kukho into efihliweyo kwindawo ethile kwaye ayisebenzi.

Yintoni ekufuneka uyazi ngaphambi kokuba uqhubeke ufunda

ITelegram ineentlobo ezininzi zeengxoxo zeqela (evulekileyo, evaliweyo). Kwezi ngxoxo, ezinye zemisebenzi (umzekelo, id) ziyahluka, nto leyo ebangela iingxaki ngamanye amaxesha.

Makhe sicinge ukuba kukuphela kuka-2019, kunye neqhawe lexesha lethu, i-Man-Orchestra eyaziwayo (umlawuli, igqwetha, ingcali yokhuseleko lolwazi, umdwelisi weprogram kunye ne-MVP ebonakalayo) u-Evgeniy V. wahlula i-$ i variable ukusuka kuluhlu, ikwazile ukurhintyela, jonga kule minyaka imbalwa izayo iya kuba yinkosi yeChocolatey, emva koko Ukusetyenzwa ngokunxuseneyo nePowerShell и Ukuhambelana kweNjongo-Nganye iya kuza.

1. Sicinga malunga nokuba ibhot yethu iya kwenza ntoni

Ndandingenazo naziphi na iingcamango, kwafuneka ndicinge. Sele ndiyibhalile i-bot-notebook. Andizange ndifune ukwenza i-bot "ethumela into kwenye indawo." Ukuqhagamshela kwi-Azure ufuna ikhadi letyala, kodwa umfundi ulifumana phi? Kufuneka kuqatshelwe ukuba yonke into ayibi kakhulu: amafu aphambili anika uhlobo oluthile lwexesha lokuvavanya mahhala (kodwa usadinga inombolo yekhadi lesikweletu - kwaye kubonakala ngathi idola iya kutsalwa kuyo. Andikhumbuli ukuba yabuyiswa emva kwexesha.)

Ngaphandle kwe-AI ML ayinomdla kakhulu ukwenza i-bot-poor-poet-weaver.

Ndigqibe ekubeni ndenze i-bot eza kundikhumbuza (okanye hayi mna) amagama esiNgesi asuka kwisichazi-magama.
Ukunqanda ukujongana nesiseko sedatha, isichazi-magama siya kugcinwa kwifayile yokubhaliweyo kwaye ihlaziywe ngesandla.
Kule meko, umsebenzi kukubonisa iziseko zomsebenzi, kwaye ungenzi ubuncinane imveliso egqityiweyo.

2. Ukuzama ntoni kwaye njani okokuqala

Masenze ifolda C:poshtranslate
Okokuqala, makhe sibone ukuba loluphi uhlobo lwe-powershell esinalo, masiqalise i-ISE ngokuqalisa
powershell ise
okanye ufumane i-Powershell ISE kwiinkqubo ezifakiweyo.
Emva kokuqaliswa, okuqhelekileyo okuqhelekileyo "uhlobo oluthile lomhleli" luya kuvula; ukuba akukho ndawo yokubhaliweyo, ngoko unokuhlala ucofa "Ifayile - yenza entsha".

Makhe sijonge kuguqulelo lwe-powershell-bhala kwindawo yokubhaliweyo:

get-host 

kwaye cinezela F5.

I-Powershell iya kunika ukugcina - "Iskripthi osele usenza siza kugcinwa.", siyavuma, kwaye ugcine ifayile kwi-powershell enegama kwi-C: poshtranslate myfirstbotBT100.

Emva kokuqaliswa, kwiwindow esezantsi yokubhaliweyo sifumana itafile yedatha:

Name             : Windows PowerShell ISE Host
Version          : 5.1.(и так далее)

Ndino 5.1 into, kwanele. Ukuba une-Windows 7/8 endala ke akukho nto inkulu - nangona i-PowerShell iya kufuneka ihlaziywe kwinguqulo 5 - umz. imiyalelo.

Chwetheza Fumana-Umhla kumgca womyalelo ongezantsi, cinezela Ngena, jonga ixesha, yiya kwifolda yengcambu ngomyalelo.
cd
kwaye ucime isikrini ngomyalelo we-cls (hayi, awudingi ukusebenzisa rm)

Ngoku makhe sijonge ukuba yintoni esebenzayo kwaye njani - masibhale hayi ikhowudi, kodwa imigca emibini, kwaye sizame ukuqonda into abayenzayo. Masigqabaze ngomgca wokufumana umamkeli ngophawu # kwaye songeze kancinci.

# Пример шаблона бота 
# get-host
<# это пример многострочного комментария #>
$TimeNow = Get-Date
$TimeNow

(Into enika umdla kukuba kuluhlu oluhlayo lokufomatha ikhowudi kwiHabré kukho iinketho ezimbini - kodwa iPowershell ayikho. I-Dos ikhona. I-Perl ikhona.)

Kwaye masiqhube ikhowudi ngokucinezela F5 okanye ">" kwi GUI.

Sifumana imveliso:

Saturday, December 8, 2019 21:00:50 PM (или что-то типа)

Ngoku makhe sijonge le migca mibini kunye neengongoma ezinomdla ukuze singabuyeli kule nto kwixesha elizayo.

Ngokungafaniyo noPascal (kwaye hayi kuphela), iPowerShell ngokwayo izama ukumisela ukuba loluphi uhlobo lokwabela ukuguquguquka; iinkcukacha ezingakumbi malunga noku zibhaliwe kwinqaku. Inkqubo yemfundo yokuchwetheza kwiilwimi zokuprograma
Ngoko ke, ngokwenza i-$TimeNow eguquguqukayo kwaye uyinike ixabiso lomhla kunye nexesha langoku (Get-Date), akufuneki sikhathazeke kakhulu malunga nokuba loluphi uhlobo lwedatha oluya kubakho.

Enyanisweni, oku kungazi kunokubangela intlungu kamva, kodwa oko kwenzeka kamva. Ngezantsi kwisicatshulwa kuya kubakho umzekelo.
Makhe sibone ukuba sinantoni na. Masenze (kumgca womyalelo)

$TimeNow | Get-member

kwaye ufumane iphepha lokubhaliweyo okungaqondakaliyo

Umzekelo wesicatshulwa esingaqondakaliyo inombolo 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")...                                         

Njengoko ubona, ukuguquguquka kohlobo lwe-TypeName: I-System.DateTime yenziwe ngeqela leendlela (kwingqiqo yokuba sinokwenza ntoni ngale nto iguquguqukayo) kunye neepropati.

Masitsalele umnxeba $TimeNow.DayOfYear - sifumana inani losuku lonyaka.
Masitsalele umnxeba $TimeNow.DayOfYear | Get-Member - sifumana TypeName: System.Int32 kunye neqela leendlela.
Masitsalele umnxeba $TimeNow.ToUniversalTime() -kwaye ufumane ixesha kwi-UTC

Debugger

Ngamanye amaxesha kwenzeka ukuba kuyimfuneko ukuphumeza inkqubo ukuya kumgca othile kwaye ubone imeko yeprogram ngaloo mzuzu. Ngale njongo, i-ISE inomsebenzi we-Debug-toggle break point
Beka i-breakpoint kwindawo ethile phakathi, sebenzisa le migca mibini kwaye ubone ukuba ikhefu libukeka njani.

3. Ukuqonda ukusebenzisana ne-Telegram bot

Ngokuqinisekileyo, uncwadi oluninzi lubhaliwe kwintsebenziswano kunye ne-bot, nayo yonke i-getpush njalo njalo, kodwa umba wethiyori unokuqwalaselwa ngokukhetha.

Kwimeko yethu kuyimfuneko:

  • Funda ukuthumela into ngembalelwano
  • Funda ukufumana into kwimbalelwano

3.1 Ukufunda ukuthumela into ngembalelwano nokufumana kuyo

Ikhowudi encinci - inxalenye yesi-3

Write-output "This is part 3"
$MyToken = "1234544311:AbcDefNNNNNNNNNNNNN"
$MyChatID = "123456789"
$MyProxy = "http://1.2.3.4:5678" 

$TimeNow = Get-Date
$TimeNow.ToUniversalTime()
$ScriptDir = Split-Path $script:MyInvocation.MyCommand.Path
$BotVersion = "BT102"

$MyText01 = "Life is directed motion - " + $TimeNow

$URL4SEND = "https://api.telegram.org/bot$MyToken/sendMessage?chat_id=$MyChatID&text=$MyText01"

Invoke-WebRequest -Uri $URL4SEND

kwaye kwiRussian Federation ngeli xesha sifumana impazamo Ayikwazanga ukuxhuma kwiseva ekude.

Okanye asiyifumani - kuxhomekeke kumsebenzisi we-telecom kunye nokuba iproxy ibunjiwe kwaye iyasebenza
Ewe, okuseleyo kukongeza i-proxy. Nceda uqaphele ukuba ukusebenzisa ummeli ongafihlwayo kunye nobuqhetseba ngokubanzi kuyingozi kakhulu kwimpilo yakho.

Umsebenzi wokufumana ummeli osebenzayo awunzima kakhulu - uninzi lweeproksi ezipapashiweyo ze-http zisebenza. Ndicinga ukuba eyesihlanu indisebenzele.

Isivakalisi sisebenzisa ummeli:

Invoke-WebRequest -Uri $URL4SEND -Proxy $MyProxy

Ukuba ufumana umyalezo kwincoko yakho nge-bot, ke yonke into ilungile, ungaqhubeka. Ukuba akunjalo, qhubeka ukulungisa ingxaki.

Unokubona ukuba i-$URL4SEND yakho ijika ibe yintoni umtya kwaye uzame ukuyicela kwibhrawuza, ngolu hlobo:

$URL4SEND2 = '"'+$URL4SEND+'"'
start chrome $URL4SEND2 

3.2. Sifunde indlela yokubhala "into" kwingxoxo, ngoku makhe sizame ukuyifunda

Makhe songeze imigca emi-4 kwaye sibone okungaphakathi kwi-| fumana-ilungu

$URLGET = "https://api.telegram.org/bot$MyToken/getUpdates"
$MyMessageGet = Invoke-WebRequest -Uri $URLGET -Method Get -Proxy $MyProxy
Write-Host "Get-Member"
$MyMessageGet | Get-Member

Eyona nto inomdla kakhulu inikezelwe kuthi

Content           Property   string Content {get;}  
ParsedHtml        Property   mshtml.IHTMLDocument2 ParsedHtml {get;}                                    
RawContent        Property   string RawContent {get;set;}

Makhe sibone ukuba yintoni na kubo:

Write-Host "ParsedHtml"
$MyMessageGet.ParsedHtml # тут интересное
Write-Host "RawContent"
$MyMessageGet.RawContent # и тут интересное, но еще к тому же и читаемое. 
Write-Host "Content"
$MyMessageGet.Content

Ukuba yonke into ikusebenzela, uya kufumana umgca omde onje:

{"ok":true,"result":[{"update_id":12345678,
"message":{"message_id":3,"from":{"id"

Ngethamsanqa, kwinqaku elipapashwe ngaphambili iTelegram bot yomlawuli wenkqubo lo mgca (ewe, ngokwe $MyMessageGet.RawContent | fumana-ilungu yi System.String), sele iqhawukile.

4. Yenza into oyifumanayo (sele siyayazi indlela yokuthumela into)

Njengoko sele kubhaliwe apha, ezona zinto ziyimfuneko kukumxholo. Makhe siyijonge ngakumbi.

Okokuqala, siza kubhala amanye amabinzana ambalwa kwi-bot ukusuka kujongano lwewebhu okanye kwifowuni

/message1
/message2
/message3

kwaye ujonge kwisikhangeli kwidilesi eyenziweyo kwi-variable ye-$URLGET.

Siza kubona into efana nale:

{"ok":true,"result":[{"update_id":NNNNNNN,
"message":{"message_id":10, .. "text":"/message1"
"message":{"message_id":11, .. "text":"/message2 
"message":{"message_id":12, .. "text":"/message3 

Yintoni? Enye into entsonkothileyo evela kuluhlu lwezinto eziqulethe isichongi somyalezo osuka ekupheleni ukuya-ekuphelweni, isichongi sencoko, isichongi sokuthumela kunye nolunye ulwazi oluninzi.

Nangona kunjalo, akufuneki sifumanise ukuba "luhlobo luni lwento le" - inxalenye yomsebenzi sele senzelwe thina. Makhe sibone okungaphakathi:

Ukufunda imiyalezo efunyenweyo okanye inxalenye yesi-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. Yintoni esimele siyenze ngoku?

Masigcine ifayile enesiphumo phantsi kwegama elithi myfirstbotBT105 okanye nantoni na oyithanda kakhulu, tshintsha isihloko kwaye uphawule ngayo yonke ikhowudi esele ibhaliwe.

<#start comment 105 end comment 105#>

Ngoku kufuneka sithathe isigqibo sokuba singasifumana phi isichazi-magama (kakuhle, phi - kwidiski kwifayile) kwaye iya kujongeka njani.

Ewe kunjalo, ungabhala isichazi-magama esikhulu ngqo kwisicatshulwa sombhalo, kodwa oku kusecaleni kwenqaku ngokupheleleyo.
Ke makhe sibone ukuba yeyiphi i-powershell enokusebenza ngayo ngokuqhelekileyo.
Ngokubanzi, akakhathali ukuba yiyiphi ifayile esebenza nayo, ayinandaba nathi.
Sinokhetho: txt (unga, kodwa kutheni), csv, xml.
Ngaba singabukela wonke umntu?Masibone wonke umntu.
Masidale udidi lweMyVocabClassExample1 kunye nexabiso le-$MyVocabExample1
Ndiyaqaphela ukuba iklasi ibhalwe ngaphandle kwe-$

enye ikhowudi #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

Makhe sizame ukubhala oku kwiifayile usebenzisa isampuli.

Enye ikhowudi #5.1

Write-Host $ScriptDir # надеюсь $ScriptDir вы не закомментировали 
$MyFilenameExample01 = $ScriptDir + "Example01.txt"
$MyFilenameExample02 = $ScriptDir + "Example02.txt"
Write-Host $MyFilenameExample01
Out-File  -FilePath $MyFilenameExample01 -InputObject $MyVocabExample1

Out-File  -FilePath $MyFilenameExample01 -InputObject -Append $MyVocabExample2
notepad $MyFilenameExample01

- kwaye sifumana impazamo kumgca we-Out-File -FilePath $MyFilenameExample01 -InputObject -Append $MyVocabExample2.

Akafuni ukongeza, ah-ah, yintoni ihlazo.

$MyVocabExample3AsArray = @($MyVocabExample1,$MyVocabExample2)
Out-File  -FilePath $MyFilenameExample02 -InputObject $MyVocabExample3AsArray
notepad $MyFilenameExample02

Makhe sibone ukuba kwenzeka ntoni. Ujongo oluhle lombhalo-kodwa ungayithumela njani ngaphandle? Ngaba ndingazisa uhlobo oluthile lwezahluli zokubhaliweyo, ezinje ngeekoma?

Kwaye ekugqibeleni ufumana ifayile "eyahlulwe ngekoma (CSV) A YIMA UKULINDA.
#

$MyFilenameExample03 = $ScriptDir + "Example03.csv"
$MyFilenameExample04 = $ScriptDir + "Example04.csv"
Export-Csv  -Path $MyFilenameExample03 -InputObject $MyVocabExample1 
Export-Csv  -Path $MyFilenameExample03 -InputObject $MyVocabExample2 -Append 
Export-Csv  -Path $MyFilenameExample04 -InputObject $MyVocabExample3AsArray 

Njengoko kulula ukuyibona, i-MS ayohlulwanga ngokukodwa ngengqiqo yayo; kwinkqubo efanayo, kwimeko enye-iFayilePath isetyenziswa, kwenye-iNdlela.

Ukongezelela, kwifayile yesithathu ulwimi lwesiRashiya lwanyamalala, kwifayile yesine yavela ... kakuhle, kwenzeka into ethile. #TYPE System.Object[] 00
# “Bala”,”Ubude”,”Ubude obude”,”Inqanaba”,”SyncRoot”,”IsReadOnly”,”IsFixedSize”,”Imanyeniswa”
#
Masiyibhale kwakhona kancinci:

Export-Csv  -Path $MyFilenameExample03 -InputObject $MyVocabExample1 -Encoding Unicode
Export-Csv  -Path $MyFilenameExample03 -InputObject $MyVocabExample2 -Append -Encoding Unicode
notepad $MyFilenameExample03
notepad $MyFilenameExample04

Kubonakala ngathi luncedo, kodwa andikayithandi ifomathi.

Andithandi ngakumbi ukuba andinako ukubeka imigca ukusuka kwinto ukuya kwifayile ngokuthe ngqo.
Ngendlela, ekubeni saqala ukubhala kwiifayile, ngaba sinokuqala ukugcina ilogi yokuqalisa? Sinexesha njengenguqu, sinokuseta igama lefayile.

Enyanisweni, akukho nto yokubhala okwangoku, kodwa unokucinga malunga nendlela engcono yokujikeleza iilogi.
Makhe sizame i-xml okwangoku.

Enye i-xml

$MyFilenameExample05 = $ScriptDir + "Example05.xml"
$MyFilenameExample06 = $ScriptDir + "Example06.xml"
Export-Clixml  -Path $MyFilenameExample05 -InputObject $MyVocabExample1 
Export-Clixml  -Path $MyFilenameExample05 -InputObject $MyVocabExample2 -Append -Encoding Unicode
Export-Clixml  -Path $MyFilenameExample06 -InputObject $MyVocabExample3AsArray
notepad $MyFilenameExample05
notepad $MyFilenameExample06

Ukuthumela ngaphandle kwi-xml kunezibonelelo ezininzi-ufundeko, ukuthunyelwa ngaphandle kwento iyonke, kwaye akukho mfuneko yokwenza i-uppend.

Masizame funda ifayile ye-xml.

Ukufundwa kancinci kwi-xml

$MyFilenameExample06 = $ScriptDir + "Example06.xml"
$MyVocabExample4AsArray = Import-Clixml -Path $MyFilenameExample06
# $MyVocabExample4AsArray 
# $MyVocabExample4AsArray[0]
# и немного о совершенно неочевидных нюансах. Powershell время от времени ведет себя не так, как вроде бы как бы стоило бы ожидать бы.
# например у меня эти два вывода отличаются
# Write-Output $MyVocabExample4AsArray 
# write-host $MyVocabExample4AsArray 

Masibuyele kumsebenzi. Sibhale ifayile yovavanyo, siyifunde, ifomati yokugcina icacile, ukuba kuyimfuneko, ungabhala umhleli wefayile encinci eyahlukileyo yokongeza kunye nokucima imigca.

Makhe ndikukhumbuze ukuba umsebenzi yayikukwenza ibhot yoqeqesho encinci.

Ifomathi yomsebenzi: Ndithumela umyalelo "womzekelo" kwi-bot, i-bot ithumela igama elikhethiweyo ngokungaqhelekanga kunye nokubhala, kwaye emva kwemizuzwana ye-10 ithumela kum ukuguqulelwa kunye nokuphawula. Siyayazi indlela yokufunda imiyalelo, singathanda nokufunda indlela yokukhetha ngokuzenzekelayo kwaye ujonge iiproxi, kwaye usete kwakhona izibali zemiyalezo ukuba zingalibaleki.

Masingayichazi yonke into echazwe ngaphambili njengengeyomfuneko, gqabaza ngemizekelo engeyomfuneko ngoku nge-txt kunye ne-csv, kwaye ugcine ifayile njengoguqulelo lwe-B106.

Oh ewe. Masithumele into kwi-bot kwakhona.

6. Ukuhanjiswa kwemisebenzi kunye nokunye

Ngaphambi kokuba usebenze ulwamkelo, kufuneka wenze umsebenzi wokuthumela "ubuncinci into" ngaphandle komyalezo wovavanyo.

Ewe, kumzekelo siya kuba nokuthumela okukodwa kunye nokuqhubekeka, kodwa kuthekani ukuba kufuneka senze into enye izihlandlo ezininzi?

Kulula ukubhala umsebenzi. Ke, sinohlobo oluguquguqukayo lwento $MyVocabExample4AsArray, efundwa kwifayile, ngendlela yoluhlu lwezinto ezimbini.
Masihambe sifunde.

Kwangaxeshanye, siya kujongana newotshi; siya kuyidinga kamva (enyanisweni, kulo mzekelo asiyi kuyidinga :)

Enye ikhowudi #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
}

Njengoko unokubona ngokulula, umsebenzi ubiza i-$ MyToken kunye ne-$ MyChatID, ezazikhokhwa ngaphambili.

Akukho mfuneko yokwenza oku, kwaye ukuba i-$MyToken yenye kwi-bot nganye, ngoko i-$MyChatID iya kutshintsha ngokuxhomekeke kwingxoxo.

Nangona kunjalo, kuba lo ngumzekelo, asiyi kuwuhoya okwangoku.

Kuba i-$MyVocabExample4AsArray ingeyonto eyoluhlu, nangona ifana kakhulu nenye, ngoko awukwazi ukuyithatha nje cela ubude bayo.

Kwakhona kuya kufuneka senze into engenakwenziwa - iparashute hayi ngokwekhowudi - yithathe kwaye uyibale

Enye ikhowudi #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)
# Угадайте сами, какой пример легче читается посторонними людьми.

Mthubi inqaku elinomdla. Masithi sifuna ukufumana u-0 okanye u-1 (sinezinto ezimbini kuphela kuluhlu). Xa ubeka imida 0..1, ngaba siya kufumana "1"?
Hayi - asiyi kuyifumana, sinomzekelo okhethekileyo Umzekelo 2: Fumana inani elipheleleyo phakathi kwe-0 kunye ne-99 Fumana-Random -Ubuninzi be-100
Ngoko ke, kwi-0..1 kufuneka sibeke ubungakanani be-0..2, kunye nenani eliphezulu le-elementi = 1.

7. Ukwenziwa kwemiyalezo engenayo kunye nobude bomgca wobude

Sime phi kwangethuba? sifumene umahluko $MyMessageGet
kunye ne-$Content4Pars01 efunyenwe kuyo, apho sinomdla kwizinto ze-Content4Pars01.result array

$Content4Pars01.result[0].update_id
$Content4Pars01.result[0].message
$Content4Pars01.result[0].message.text

Masithumele i-bot /message10, /message11, /message12, /igama kwaye kwakhona /igama kunye /hello.
Makhe sibone ukuba sifumene ntoni:

$Content4Pars01.result[0].message.text
$Content4Pars01.result[2].message.text

Masingene kuyo yonke into efunyenweyo kwaye sithumele impendulo ukuba umyalezo ngu/igama
imeko yokwakha, into abanye abayichaza njenge-if-elseif, ibizwa ngokuba yi-powershell ngokutshintsha. Kwangaxeshanye, ikhowudi engezantsi isebenzisa isitshixo -wildcard, okungafunekiyo ngokupheleleyo kwaye nokuba yingozi.

Enye ikhowudi #7.1

Write-Output "This is part 7"
Foreach ($Result in $Content4Pars01.result) # Да, можно сделать быстрее 
 { 
    switch -wildcard ($Result.message.text) 
            {
            "/word" {MyFirstFunction($TextForExample1)}
            }
}

Masiqhube iskripthi amaxesha ambalwa. Siya kufumana igama elifanayo kabini kumzamo ngamnye wokubulawa, ngakumbi ukuba senze impazamo ekuphunyezweni kwe-random.

Kodwa yeka. Asizange sithumele / igama kwakhona, kutheni umyalezo usenziwa kwakhona?

Umgca wokuthumela imiyalezo kwi-bot unobude obunqamlekileyo (imiyalezo eyi-100 okanye engama-200, ndiyacinga) kwaye kufuneka icocwe ngesandla.

Oku kunjalo kuchazwe kumaxwebhu, kodwa kufuneka uyifunde!

Kulo mzekelo, sifuna i-?chat_id iparamitha, kunye ne&timeout, &limit, &parse_mode=HTML kunye &disable_web_page_preview=true ayikafuneki.

Amaxwebhu e I-telegram api ilapha
Ithi ngomhlophe nangesiNgesi:
Isichongi sohlaziyo lokuqala oluza kubuyiselwa. Kufuneka ibenkulu ngesinye kuneyona iphezulu phakathi kwezichongi zohlaziyo olufunyenwe ngaphambili. Ngokuzenzekelayo, uhlaziyo oluqala kwasekuqaleni
akuqinisekanga uhlaziyo luyabuyiselwa. Uhlaziyo luthathwa njengoluqinisekisiweyo nje ukuba i-getUpdates ibizwe nge ukucinywa eliphezulu kune update_id yayo. I-offset engalunganga inokuchazwa ukubuyisela uhlaziyo oluqala kuhlaziyo lwe-offset ukusuka ekupheleni komgca wohlaziyo. Lonke uhlaziyo lwangaphambili luya kulityalwa.

Makhe sijonge:

$Content4Pars01.result[0].update_id
$Content4Pars01.result[1].update_id 
$Content4Pars01.result | select -last 1
($Content4Pars01.result | select -last 1).update_id

Ewe, kwaye siya kuyibuyisela kwaye sibhale umsebenzi kancinci. Sinokhetho ezimbini - sigqithise umyalezo wonke kumsebenzi kwaye siwuqhube ngokupheleleyo kumsebenzi, okanye unike kuphela umyalezo we-ID kwaye uwusethe kwakhona. Ngokomzekelo, eyesibini ibonakala ilula.

Ngaphambili, "yonke imiyalezo" yethu yemibuzo yayikhangeleka ngathi

$URLGET = "https://api.telegram.org/bot$MyToken/getUpdates"

kwaye kuya kubonakala ngathi

$LastMessageId = ($Content4Pars01.result | select -last 1).update_id
$URLGET1 = "https://api.telegram.org/bot$mytoken/getUpdates?offset=$LastMessageId&limit=100" 
$MyMessageGet = Invoke-WebRequest -Uri $URLGET1 -Method Get -Proxy $MyProxy 

Akukho mntu ukwalelayo ukuba ufumane kuqala yonke imiyalezo, uyiqhube, kwaye kuphela emva kokuba isicelo sokuqhuba esiyimpumelelo singaqinisekiswanga -> siqinisekisiwe.

Kutheni kunengqiqo ukubiza isiqinisekiso emva kokuba yonke inkqubo igqityiwe? Ukungaphumeleli kunokwenzeka phakathi kokubulawa, kwaye ukuba umzekelo we-chatbot yamahhala, ukulahlekelwa ngumyalezo omnye akukho nto ikhethekileyo, ngoko ukuba ulungisa umvuzo womntu okanye ukuthengiselana kwekhadi, umphumo unokuba mbi.

Imigca emibini ngaphezulu yekhowudi

$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. Endaweni yesiphelo

Imisebenzi esisiseko - ukufunda imiyalezo, ukusetha kwakhona umgca, ukufunda kwifayile kunye nokubhala kwifayile kwenziwa kwaye kubonisiwe.

Kukho izinto ezine kuphela eziseleyo ekufuneka zenziwe:

  • ukuthumela impendulo echanekileyo kwisicelo kwincoko
  • ukuthumela impendulo kuyo NAYIPHI incoko apho ibhot yongezwa
  • ukwenza ikhowudi kwilophu
  • ukwazisa i-bot kumcwangcisi weefestile.

Yonke le misebenzi ilula kwaye inokufezekiswa ngokulula ngokufunda uxwebhu malunga neeparamitha ezinje
Seta-ExecutionPolicy engasikelwanga mda kunye -ExecutionPolicy Bypass
umjikelo wefom

$TimeToSleep = 3 # опрос каждые 3 секунды
$TimeToWork = 10 # минут
$HowManyTimes = $TimeToWork*60/$TimeToSleep # счетчик для цикла
$MainCounter = 0
for ($MainCounter=0; $MainCounter -le $HowManyTimes) {
sleep $TimeToSleep
$MainCounter ++

Enkosi nonke ngokufunda.

umthombo: www.habr.com

Yongeza izimvo