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
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,
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 nayo inezinzuzo ezintathu ezinkulu:
- Kuyinto elula, kunezincwadi eziningi nezibonelo ngakho, futhi ngisho nangesiRashiya, isibonelo, isihloko mayelana ne-Foreach - encwadini.
I-PowerShell ekujuleni - mayelana nomehluko () kanye {} - Uhamba nomhleli
ISE , kufakwe neWindows. Kukhona ngisho uhlobo oluthile lokususa iphutha lapho. - 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 -
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.
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
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.
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.
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
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
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
#
$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
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.
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
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
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-
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