Isifanekiso se-bot ye-telegram elula yezingane zesikole ezisebangeni lesi-7-9 kusetshenziswa i-Powershell

Phakathi nezingxoxo nomngane wami, kungazelelwe ngafunda ukuthi izingane ezifunda amabanga 8-10 esikoleni sazo azifundiswa nhlobo izinhlelo. IZwi, i-Excel nakho konke. Ayikho i-logo, ngisho noPascal, ngisho ne-VBA ye-Excel.

Ngamangala kakhulu, ngavula i-inthanethi futhi ngaqala ukufunda -
Omunye wemisebenzi yesikole esiyisipesheli ukukhuthaza imfundo yesizukulwane esisha esihlangabezana nezimo zomphakathi wolwazi ezingeni laso lentuthuko nendlela yokuphila.
Lesi sifundo sizovumela abafundi ukuthi bahlanganise ngokwenza ulwazi lwabo lwezakhiwo eziyisisekelo zolimi lokuhlela lwePascal. (kusukela ohlelweni lwendawo yokuzivocavoca yango-2017)

Ekugcineni, nginqume ukuchitha amahora ambalwa ngidwebe isibonelo sokuthi "ungayenza kanjani i-bot elula yezingane zesikole."

Ngezansi kokusikwa indlela yokubhala enye i-bot elula ku-Powershell futhi uyenze isebenze ngaphandle kwe-webhook, ama-IP amhlophe, amaseva azinikezele, imishini ebonakalayo efakwe efwini, njalonjalo - ku-PC yasekhaya evamile eneWindows evamile.

I-TLDR: Enye indatshana eyisicefe enamaphutha ohlelo lolimi nayiqiniso, akukho ongakufunda, akukho mahlaya, akukho zithombe.

Akukho okusha esihlokweni, cishe yonke into ebhalwe ngaphambili isivele ikhona ku-Habré, isibonelo ezihlokweni Imiyalo: Ungawakha kanjani ama-bots kuTelegram и I-Telegraph bot yomlawuli wesistimu.
Ngaphezu kwalokho, lesi sihloko asisebenzi ngamabomu ukuze singabhekiseli ezincwadini ezifundisayo ngaso sonke isikhathi. Azikho izinkomba ze-Gang 4, PowerShell Deep Dives noma, yithi, Izinsika ezi-5 Zohlaka Oluklanywe Kahle lwe-AWS embhalweni.

Esikhundleni sesandulelo, ungeqa

Zizwe ukhululekile ukweqaNgo-2006, iMicrosoft yakhipha i-PowerShell 1.0 ye-Windows XP, Vista, ne-Server 2003 yangaleso sikhathi. Ngandlela thize, ithathele indawo izinto ezinjenge-cmdbat scripts, vb scripts, Windows Script Host kanye ne-JScript.

Ngisho namanje, i-PowerShell ingabhekwa kuphela njengesinyathelo esilandelayo ngemva kwezinketho ze-Logo, esikhundleni se-Delphi cishe esasetshenziswa (noma into endala), naphezu kokuba khona kwezihibe, amakilasi, imisebenzi, izingcingo ze-MS GUI, Ukuhlanganiswa kwe-Git nokunye.

I-Powershell isetshenziswa kancane uma kuqhathaniswa; ungahlangabezana nayo kuphela ngendlela ye-PowerShell Core, VMware vSphere PowerCLI, Azure PowerShell, MS Exchange, Desired State Configuration, I-PowerShell Web Access kanye neshumi nambili noma ngaphezulu izinhlelo nemisebenzi engavamile ukusetshenziswa. Mhlawumbe uzothola umoya wesibili ngokukhululwa I-WSL2, kodwa akunjalo.

I-Powershell nayo inezinzuzo ezintathu ezinkulu:

  1. Kuyinto elula, kunezincwadi eziningi nezibonelo ngakho, futhi ngisho nangesiRashiya, isibonelo, isihloko mayelana ne-Foreach - encwadini. I-PowerShell ekujuleni - mayelana nomehluko () kanye {}
  2. Uhamba nomhleli ISE, kufakwe neWindows. Kukhona ngisho uhlobo oluthile lokususa iphutha lapho.
  3. Kulula ukushayela kuyo izingxenye zokwakha i-graphical interface.

0. Ukulungiselela.

Sizodinga:

  • I-Windows PC (nginayo Windows 10)
  • Okungenani uhlobo oluthile lokufinyelela ku-inthanethi (nge-NAT ngokwesibonelo)
  • Kulabo abanokufinyelela okulinganiselwe kuthelegramu - i-freegate efakiwe futhi emisiwe esipheqululini, kwezinye izimo ezinzima, kanye ne-Symple DNS Crypt
  • Ukuba neklayenti locingo elisebenzayo ocingweni lwakho
  • Ukuqonda izisekelo - ukuthi i-variable, i-array, iluphu iyini.

Kuvulwe futhi kufundwe izindatshana - Imiyalo: Ungawakha kanjani ama-bots kuTelegram и I-Telegraph bot yomlawuli wesistimu

1. Masidale enye i-bot yokuhlola.

Njengoba wonke umuntu esekwazi lokhu, futhi sekwenzekile, ungakwazi futhi ukweqaNjengoba kushiwo esihlokweni esingenhla - Okokuqala, i-bot yeTelegram - kusewuhlelo lokusebenza olusebenza ohlangothini lwakho nokwenza izicelo ku-Telegram Bot API. Ngaphezu kwalokho, i-API icacile - i-bot ifinyelela i-URL ethile enamapharamitha, futhi iTelegramu iphendula ngento ye-JSON.

Izinkinga ezihlobene: uma ngendlela engaziwa uthatha ikhodi ethile entweni ye-JSON futhi ngandlela thize uyithumele ukuze isetshenziswe (hhayi ngenhloso), ikhodi izokwenzelwa wena.

Inqubo yokudala ichazwe ezihlokweni ezimbili ezingenhla, kodwa ngiyaphinda: kuthelegramu sivula othintana nabo, bheka @botfather, mtshele /newbot, dala i-bot Botfortest12344321, ibize i-Mynext1234bot, futhi uthole umlayezo onokhiye oyingqayizivele ifomu 1234544311:AbcDefNNNNNNNNNNNNNNNN

Nakekela ukhiye futhi ungawunikezi!

Khona-ke ungakwazi ukumisa i-bot, isibonelo, ukuvimbela ukuyengeza kumaqembu, kodwa ezinyathelweni zokuqala lokhu akudingekile.

Ake sicele u-BotFather "/mybot" futhi silungise izilungiselelo uma kukhona esingakuthandi.

Masiphinde sivule oxhumana nabo, thola @Botfortest12344321 lapho (kuphoqelekile ukuqala usesho ngokuthi @), chofoza u-"qala" bese ubhalela ibhothi "/Glory to the robots." I / uphawu liyadingeka, izingcaphuno azidingeki.
I-bot, yebo, ngeke iphendule lutho.

Ake sihlole ukuthi i-bot idaliwe futhi siyivule.

api.telegram.org/bot1234544311:AbcDefNNNNNNNNNNNNNN/getMe
lapho 1234544311:AbcDefNNNNNNNNNNNNNN kuwukhiye owamukelwe ngaphambilini,
futhi uthole umugqa onjengawo
{"kulungile":iqiniso,"umphumela":{""}}

Sinebinzana lokuqala eliyimfihlo (uphawu). Manje sidinga ukuthola inombolo yesibili eyimfihlo - i-ID yengxoxo ne-bot. Ingxoxo ngayinye, iqembu, njll. ingeyodwa futhi inenombolo yayo (ngezinye izikhathi inokususa - yamaqembu avuliwe). Ukuze sithole le nombolo, sidinga ukucela esipheqululini (empeleni, akudingekile nhlobo esipheqululini, kodwa ukuze uqonde kangcono ungaqala ngayo) ikheli (lapho 1234544311:NNNNNNNNNN kuwuphawu lwakho).

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

futhi uthole impendulo efana

{"ok":true,"result":[{"update_id":...,... baxoxe":{"id":123456789

Sidinga i-chat_id.

Ake sihlole ukuthi singabhalela engxoxweni mathupha: shayela ikheli esipheqululini

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

Uma uthola umlayezo ovela ku-bot engxoxweni yakho, kulungile, udlulela esigabeni esilandelayo.

Ngale ndlela (ngesiphequluli) ungahlala uhlola ukuthi kukhona yini izinkinga ngesizukulwane sesixhumanisi, noma uma kukhona okufihliwe endaweni ethile futhi kungasebenzi.

Odinga ukukwazi ngaphambi kokuqhubeka nokufunda

I-Telegraph inezinhlobo ezimbalwa zezingxoxo zeqembu (ezivuliwe, ezivaliwe). Kulezi zingxoxo, eminye imisebenzi (isibonelo, i-id) ihlukile, ngezinye izikhathi edala izinkinga ezithile.

Ake sicabange ukuthi ekupheleni kuka-2019, futhi ngisho neqhawe lesikhathi sethu, i-Man-Orchestra eyaziwa kakhulu (umlawuli, ummeli, uchwepheshe wezokuphepha kolwazi, umklami kanye ne-MVP cishe) u-Evgeniy V. uhlukanisa i-$ i eguquguqukayo ohlwini, uye waba yingcweti izihibe, bheka eminyakeni embalwa ezayo izoba master Chocolatey, bese Ukucubungula okufanayo nge-PowerShell и Ukuhambisana Kwento Ngayinye izofika.

1. Sicabanga ngalokho okuzokwenza i-bot yethu

Ngangingenayo imibono, kwadingeka ngicabange. Sengiyibhalile kakade i-bot-notebook. Ngangingafuni ukwenza i-bot "ethumela okuthile kwenye indawo." Ukuze uxhumeke ku-Azure udinga ikhadi lesikweletu, kodwa umfundi ulithathaphi? Kumele kuqashelwe ukuthi konke akukubi kakhulu: amafu amakhulu anikeza uhlobo oluthile lwenkathi yokuhlola mahhala (kodwa usadinga inombolo yekhadi lesikweletu - futhi kubonakala sengathi idola lizodonswa kuyo. Angikhumbuli uma yabuyiswa kamuva.)

Ngaphandle kwe-AI ML akujabulisi kangako ukwenza i-bot-poor-poet-weaver.

Nginqume ukwenza i-bot ezongikhumbuza (noma hhayi mina) amagama esiNgisi asuka kusichazamazwi.
Ukuze ugweme ukugxambukela kusizindalwazi, isichazamazwi sizogcinwa kufayela lombhalo futhi sibuyekezwe mathupha.
Kulokhu, umsebenzi ukukhombisa izinto eziyisisekelo zomsebenzi, hhayi ukwenza okungenani umkhiqizo oqedwe ngokwengxenye.

2. Ukuzama ukuthini futhi kanjani okokuqala

Masidale ifolda C:poshtranslate
Okokuqala, ake sibone ukuthi hlobo luni lwe-powershell esinalo, ake sethule i-ISE ngokuqalisa
powershell ize
noma thola i-Powershell ISE ezinhlelweni ezifakiwe.
Ngemva kokwethulwa, okujwayelekile okujwayelekile “uhlobo oluthile lomhleli” luzovuleka; uma ingekho inkambu yombhalo, ungahlala uchofoza okuthi “Ifayela - dala okusha”.

Ake sibheke inguqulo ye-powershell - bhala endaweni yombhalo:

get-host 

bese ucindezela u-F5.

I-Powershell izonikezela ngokulondoloza - "Iskripthi ozosisebenzisa sizogcinwa.", siyavuma, futhi silondoloza ifayela ku-powershell enegama elithi C: poshtranslate myfirstbotBT100.

Ngemva kokwethulwa, efasiteleni lombhalo ophansi sithola ithebula ledatha:

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

Ngino-5.1 okuthile, kwanele. Uma une-Windows 7/8 endala ngakho-ke akukho nto enkulu - nakuba i-PowerShell izodinga ukubuyekezwa ukuze ibe yinguqulo 5 - isb. imiyalelo.

Thayipha i-Get-Date kulayini womyalo ongezansi, cindezela u-Enter, bheka isikhathi, hamba kufolda yezimpande ngomyalo.
cd
bese usula isikrini ngomyalo we-cls (cha, awudingi ukusebenzisa i-rm)

Manje ake sihlole ukuthi yini esebenzayo nokuthi kanjani - asibhale ngisho nekhodi, kodwa imigqa emibili, futhi sizame ukuqonda ukuthi benzani. Ake siphawule umugqa wokubamba ngophawu # futhi sengeze kancane.

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

(Okujabulisayo ukuthi ohlwini lokudonsela phansi lokufometha kwekhodi ku-Habré kunezinketho eziyishumi nambili - kodwa i-Powershell ayikho. I-Dos ikhona. I-Perl ikhona.)

Futhi masisebenzise ikhodi ngokucindezela okuthi F5 noma ">" ku-GUI.

Sithola okukhiphayo:

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

Manje ake sibheke le migqa emibili kanye namanye amaphuzu athakazelisayo ukuze singabuyeli kulokhu esikhathini esizayo.

Ngokungafani no-Pascal (hhayi kuphela), i-PowerShell ngokwayo izama ukunquma ukuthi yiluphi uhlobo oluzonikezwa okuguquguqukayo; imininingwane eyengeziwe mayelana nalokhu ibhalwe esihlokweni. Uhlelo lwezemfundo lokuthayipha ngezilimi zokuhlela
Ngakho-ke, ngokwakha okuguquguqukayo kwe-$TimeNow futhi sikunikeze inani ledethi nesikhathi samanje (Thola-Idethi), akudingeki sikhathazeke kakhulu ngokuthi yiluphi uhlobo lwedatha oluzoba lapho.

Yiqiniso, lokhu kungazi kungase kubuhlungu kamuva, kodwa lokho kwenzeka kamuva. Ngezansi embhalweni kuzoba nesibonelo.
Ake sibone ukuthi yini esinayo. Masikhiphe (kumugqa womyalo)

$TimeNow | Get-member

futhi uthole ikhasi lombhalo ongaqondakali

Isibonelo sombhalo ongaqondakali 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")...                                         

Njengoba ubona, ukuhlukahluka kohlobo lwe-TypeName: I-System.DateTime idalwe ngenqwaba yezindlela (ngomqondo wokuthi singenzani ngale nto eguquguqukayo) kanye nezakhiwo.

Asishayele ucingo $TimeNow.DayOfYear - sithola inombolo yosuku lonyaka.
Asishayele ucingo $TimeNow.DayOfYear | Get-Member - sithola TypeName: System.Int32 kanye neqembu lezindlela.
Asishayele ucingo $TimeNow.ToUniversalTime() - futhi uthole isikhathi ku-UTC

Ukususa iphutha

Ngezinye izikhathi kwenzeka ukuthi kuyadingeka ukwenza uhlelo kuze kufike kulayini othile futhi ubone isimo sohlelo ngaleso sikhathi. Ngale njongo, i-ISE inomsebenzi Wokususa iphutha - guqula indawo yekhefu
Beka i-breakpoint endaweni ethile phakathi, sebenzisa le migqa emibili futhi ubone ukuthi ikhefu libukeka kanjani.

3. Ukuqonda ukusebenzisana ne-Telegram bot

Vele, izincwadi eziningi ziye zabhalwa ekusebenzisaneni ne-bot, nazo zonke i-getpush nokunye, kodwa indaba yethiyori ingacatshangelwa ngokuzikhethela.

Esimweni sethu kuyadingeka:

  • Funda ukuthumela okuthile ngezincwadi
  • Funda ukuthola okuthile ngokubhalelana

3.1 Ukufunda ukuthumela okuthile ngencwadi nokuthola kukho

Ikhodi encane - ingxenye 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

futhi e-Russian Federation ngalesi sikhathi sithola iphutha Ayikwazi ukuxhuma kuseva ekude.

Noma asiyitholi - kuncike ku-opharetha we-telecom nokuthi ingabe ummeleli umisiwe futhi uyasebenza
Nokho, okusele nje ukwengeza ummeleli. Sicela uqaphele - ukusebenzisa ummeleli ongabethelwe futhi owumgunyathi ngokuvamile kuyingozi kakhulu empilweni yakho.

Umsebenzi wokuthola ummeleli osebenzayo awunzima kakhulu - iningi lama-proxies e-http ashicilelwe ayasebenza. Ngicabanga ukuthi eyesihlanu yangisebenzela.

I-syntax isebenzisa ummeleli:

Invoke-WebRequest -Uri $URL4SEND -Proxy $MyProxy

Uma uthola umlayezo engxoxweni yakho ne-bot, khona-ke konke kuhamba kahle, ungaqhubeka. Uma kungenjalo, qhubeka nokususa iphutha.

Ungabona ukuthi uchungechunge lwakho lwe-$URL4SEND luba yini bese uzama ukusicela esipheqululini, kanje:

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

3.2. Sifunde ukubhala "into" engxoxweni, manje ake sizame ukuyifunda

Ake sengeze imigqa emi-4 futhi sibone ukuthi yini engaphakathi | thola-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

Into ethakazelisa kakhulu inikezwe thina

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

Ake sibone ukuthi yini ekuzo:

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

Uma konke kukusebenzele, uzothola ulayini omude njengo:

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

Ngenhlanhla, esihlokweni esishicilelwe ngaphambilini I-Telegram bot yomlawuli wohlelo lo mugqa (yebo, ngokuya nge-$MyMessageGet.RawContent | get-member is System.String), isivele yahlakazwa.

4. Yenza lokho okutholayo (sesiyazi ukuthi sikuthumela kanjani okuthile)

Njengoba sekubhaliwe lapha, izinto ezidingekayo kakhulu zilele kokuqukethwe. Ake siyibhekisise.

Okokuqala, sizobhala imishwana embalwa ku-bot kusuka kusixhumi esibonakalayo sewebhu noma ocingweni

/message1
/message2
/message3

bese ubheka kusiphequluli ekhelini elakhiwe kokuhluka kwe-$URLGET.

Sizobona 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 

Yini? Into ethile eyinkimbinkimbi evela kumalungu afanayo ezinto aqukethe isihlonzi somlayezo osuka ekupheleni uye ekupheleni, isihlonzi sengxoxo, isihlonzi esithumelayo kanye nolunye ulwazi oluningi.

Kodwa-ke, asikho isidingo sokuthola ukuthi "luhlobo luni lwento lena" - ingxenye yomsebenzi isivele yenzelwa thina. Ake sibone ukuthi yini engaphakathi:

Ukufunda imiyalezo etholiwe noma ingxenye 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. Yini okufanele siyenze ngakho manje?

Masigcine ifayela eliwumphumela ngaphansi kwegama elithi myfirstbotBT105 noma ngabe yini oyithanda kakhulu, shintsha isihloko bese uphawula ngayo yonke ikhodi esivele ibhaliwe nge

<#start comment 105 end comment 105#>

Manje sidinga ukunquma ukuthi singasitholaphi isichazamazwi (kahle, kuphi - kudiski efayeleni) nokuthi sizobukeka kanjani.

Kunjalo, ungakwazi ukubhala isichazamazwi esikhulu khona kanye embhalweni weskripthi, kodwa lokhu kusondelene ngokuphelele nephuzu.
Ngakho-ke ake sibone ukuthi iyiphi i-powershell engasebenza nayo ngokujwayelekile.
Ngokuvamile, akanandaba ukuthi yiliphi ifayela azosebenza nalo, akunandaba nathi.
Sinokukhetha: txt (ungakwazi, kodwa kungani), csv, xml.
Singakwazi ukubuka wonke umuntu? Ake sibone wonke umuntu.
Masidale ikilasi le-MyVocabClassExample1 kanye ne-$MyVocabExample1 eguquguqukayo
Ngiyaqaphela ukuthi ikilasi libhalwe ngaphandle kwe-$

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

Ake sizame ukubhala lokhu kube amafayela sisebenzisa isampula.

Enye ikhodi #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

- futhi sithola iphutha kulayini Out-File -FilePath $MyFilenameExample01 -InputObject -Append $MyVocabExample2.

Akafuni ukwengeza, ah-ah, yeka ihlazo.

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

Ake sibone ukuthi kwenzekani. Ukubuka okuhle kombhalo - kodwa ungawuthumela kanjani futhi? Ingabe kufanele ngethule uhlobo oluthile lwezihlukanisi zombhalo, ezinjengamakhoma?

Futhi ekugcineni uthola ifayela elithi "comma-separated values ​​​​(CSV) A YEKA 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 

Njengoba kulula ukubona, i-MS ayihlukanisiwe ikakhulukazi nge-logic yayo; ngenqubo efanayo, esimweni esisodwa -FilePath isetshenziswa, kwenye -Indlela.

Ngaphezu kwalokho, efayeleni lesithathu ulimi lwesiRashiya lwanyamalala, efayeleni lesine kwavela ... kahle, kwenzeka okuthile. #TYPE System.Object[] 00
# “Bala”,”Ubude”,”Ubude Obude”,”Izinga”,”SyncRoot”,”IsReadOnly”,”IsFixedSize”,”Iyavumelaniswa”
#
Masiyibhale kabusha kancane:

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

Kubonakala sengathi kusizile, kodwa namanje angikayithandi ifomethi.

Angithandi ikakhulukazi ukuthi angikwazi ukubeka imigqa esuka entweni iye efayeleni ngokuqondile.
Ngendlela, njengoba saqala ukubhalela amafayela, singakwazi yini ukuqala ukugcina irekhodi lokuqalisa? Sinesikhathi njengokuguquguquka, singasetha igama lefayela.

Yiqiniso, akukho lutho oluzobhalwa okwamanje, kodwa ungacabanga ngendlela engcono kakhulu yokuzungezisa izingodo.
Ake sizame i-xml okwamanje.

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

Ukuthekelisa ku-xml kunezinzuzo eziningi - ukufundeka, ukuthunyelwa kwento yonke, futhi asikho isidingo sokwenza i-uppend.

Ake sizame funda ifayela le-xml.

Ukufunda okuncane ku-xml

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

Masibuyele emsebenzini. Sabhala ifayela lokuhlola, salifunda, ifomethi yokugcina icacile, uma kunesidingo, ungabhala umhleli wefayela elincane elihlukile lokwengeza nokususa imigqa.

Ake ngikukhumbuze ukuthi umsebenzi kwakuwukwenza ibhodlela elincane lokuqeqesha.

Ifomethi yomsebenzi: Ngithumela umyalo “wesibonelo” ku-bot, i-bot ingithumelela igama elikhethwe ngokungahleliwe nokulotshiwe, futhi ngemva kwemizuzwana eyi-10 ingithumelela ukuhumusha nokuphawula. Siyazi ukuthi ifundwa kanjani imiyalo, singathanda futhi nokufunda ukuthi ungazikhetha kanjani futhi uhlole ama-proxies, bese usetha kabusha izinto zokubala zemiyalezo ukuze ukhohlwe.

Ake sihoxise yonke into ephawulwe ngaphambilini njengengenasidingo, siphawule ngezibonelo ezingadingekile manje nge-txt ne-csv, futhi silondoloze ifayela njengenguqulo B106.

Awu yebo. Ake sithumele okuthile ku-bot futhi.

6. Ukuthumela kusuka kumisebenzi nokunye okwengeziwe

Ngaphambi kokucubungula ukwamukela, udinga ukudala umsebenzi wokuthumela "okungenani okuthile" ngaphandle komlayezo wokuhlola.

Yiqiniso, esibonelweni sizoba nokuthumela okukodwa kanye nokucubungula okukodwa kuphela, kodwa kuthiwani uma sidinga ukwenza into efanayo izikhathi eziningana?

Kulula ukubhala umsebenzi. Ngakho-ke, sinokuhlukahluka kohlobo lwento engu-$MyVocabExample4AsArray, efundwa efayelini, ngendlela yohlu lwama-elementi amaningi afika amabili.
Asihambe sifunde.

Ngesikhathi esifanayo, sizobhekana newashi; sizoyidinga kamuva (empeleni, kulesi sibonelo ngeke siyidinge :)

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

Njengoba ubona kalula, umsebenzi ubiza i-$MyToken kanye ne-$MyChatID, ezazifakwe ikhodi kanzima ngaphambili.

Asikho isidingo sokwenza lokhu, futhi uma i-$MyToken ingeyodwa kubhothi ngayinye, i-$MyChatID izoshintsha kuye ngengxoxo.

Nokho, njengoba lokhu kuyisibonelo, sizokuziba okwamanje.

Njengoba i-$MyVocabExample4AsArray ingeyona i-array, nakuba ifana kakhulu neyodwa, khona-ke awukwazi ukuvele uthathe cela ubude bayo.

Nakulokhu kuzomele senze into engeke yenziwe - iparachute hhayi ngokwekhodi - yithathe uyibale

Enye ikhodi #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 isici esithakazelisayo. Ake sithi sifuna ukuthola u-0 noma u-1 (sinezinto ezimbili kuphela ohlwini). Uma ubeka imingcele 0..1, sizothola "1"?
cha - ngeke sikuthole, sinesibonelo esikhethekile Isibonelo sesi-2: Thola inombolo engahleliwe phakathi kuka-0 no-99 Thola Okungahleliwe -Ubukhulu obungu-100
Ngakho-ke, ku-0..1 sidinga ukusetha usayizi 0..2, nenombolo yesici esiphezulu = 1.

7. Ukucutshungulwa kwemilayezo engenayo kanye nobude bomugqa ophezulu

Sime kuphi ngaphambili? sinokuhluka okutholiwe okungu-$MyMessageGet
kanye ne-$Content4Pars01 etholwe kuyo, esinentshisekelo yayo kuma-elementi ohlu lomphumela we-Content4Pars01.

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

Masithumele i-bot /message10, /message11, /message12, /igama futhi futhi /igama kanye /sawubona.
Ake sibone ukuthi yini esinayo:

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

Ake sidlule kukho konke okutholiwe futhi sithumele impendulo uma umyalezo wawungu/izwi
icala lokwakha, lokho abanye abakuchaza ngokuthi uma-ke, kubizwa ngokuthi ku-powershell ngokushintsha. Ngesikhathi esifanayo, ikhodi engezansi isebenzisa ukhiye we-wildcard, ongadingeki ngokuphelele futhi oyingozi.

Enye ikhodi #7.1

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

Masiqhube iskripthi izikhathi ezimbalwa. Sizothola igama elifanayo kabili ngomzamo ngamunye wokwenza, ikakhulukazi uma senze iphutha ekusebenziseni okungahleliwe.

Kodwa yeka. Asiphindanga sathumela/igama, ngakho kungani umlayezo usacutshungulwa futhi?

Ulayini wokuthumela imilayezo ku-bot unobude obulinganiselwe (ngicabanga ukuthi imilayezo eyi-100 noma engu-200) futhi kufanele isulwe mathupha.

Lokhu kuchazwe ngempela emibhalweni, kodwa kufanele ukufunde!

Kulokhu, sidinga ipharamitha ye-?chat_id, kanye ne-&timeout, &limit, &parse_mode=HTML kanye ne-&disable_web_page_preview=true okwamanje.

Amadokhumenti e- I-telegram api isilapha
Ithi ngomhlophe nangesiNgisi:
Inkomba yesibuyekezo sokuqala esizobuyiswa. Kufanele ibe nkulu ngeyodwa kunephezulu kakhulu phakathi kwezihlonzi zezibuyekezo ezitholwe ngaphambilini. Ngokuzenzakalelayo, izibuyekezo eziqala ekuqaleni
akuqinisekisiwe isibuyekezo siyabuyiselwa. Isibuyekezo sithathwa njengesiqinisekisiwe ngokushesha nje lapho i-getUpdates ibizwa nge- offset ephakeme kune-update_id yayo. I-negative offset ingacaciswa ukuze kubuyiswe izibuyekezo eziqala ku--offset update kusukela ekupheleni komugqa wezibuyekezo. Zonke izibuyekezo zangaphambilini zizolibaleka.

Ake sibheke:

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

Yebo, futhi sizosetha kabusha futhi sibhale kabusha umsebenzi kancane. Sinezinketho ezimbili - dlulisela wonke umlayezo kumsebenzi futhi uwucubungule ngokuphelele kumsebenzi, noma unikeze kuphela i-ID yomlayezo bese uwumisa kabusha. Ngokwesibonelo, eyesibili ibonakala ilula.

Ngaphambilini, uchungechunge lwethu lwemibuzo "yonke imilayezo" belubukeka kanje

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

futhi kuzobukeka

$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 

Akekho okwenqabela ukuthi uthole kuqala yonke imilayezo, uyicubungule, futhi kuphela ngemva kokuba isicelo sokucubungula ngempumelelo singaqinisekisiwe -> siqinisekisiwe.

Kungani kunengqondo ukubiza isiqinisekiso ngemuva kokuthi konke ukucubungula sekuqediwe? Ukwehluleka kungenzeka phakathi nokubulawa, futhi uma ngokwesibonelo se-chatbot yamahhala, ukulahlekelwa umlayezo owodwa akuyona into ekhethekile, ngakho-ke uma ucubungula iholo lothile noma ukuthengiselana kwekhadi, umphumela ungase ube mubi kakhulu.

Eminye imigqa embalwa yekhodi

$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. Esikhundleni sesiphetho

Imisebenzi eyisisekelo - ukufunda imilayezo, ukusetha kabusha umugqa, ukufunda kusuka efayeleni nokubhala kuya kufayela kwenziwa futhi kuyaboniswa.

Kusele izinto ezine kuphela okumele zenziwe:

  • ukuthumela impendulo efanele esicelweni engxoxweni
  • ukuthumela impendulo KUNOMA IYIPHI ingxoxo lapho i-bot yengezwe khona
  • ukwenza ikhodi ku-loop
  • kwethula i-bot kusuka kusihleli seWindows.

Yonke le misebenzi ilula futhi ingafezwa kalula ngokufunda imibhalo emayelana nemingcele efana
I-Set-ExecutionPolicy Ayikhawulelwe futhi -ExecutionPolicy Bypass
umjikelezo wefomu

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

Siyabonga kuwo wonke umuntu ofundile.

Source: www.habr.com

Engeza amazwana