Template loogu talagalay bot telegram fudud oo loogu talagalay ardayda dugsiga ee fasalada 7-9 iyadoo la isticmaalayo Powershell

Intii aan wada sheekaysanaynay saaxiibkay, waxa aan si lama filaan ah u ogaaday in carruurta fasallada 8-10 ee dugsigooda aan haba yaraatee la barin barnaamijka. Word, Excel iyo wax walba. Logo ma jiro, xitaa Pascal, xitaa VBA ee Excel.

Aad baan ula yaabay, intarneedka furay oo waxaan bilaabay inaan wax akhriyo.
Mid ka mid ah hawlaha dugsiga gaarka ah waa kor u qaadida waxbarashada jiilka cusub ee buuxiya shuruudaha bulshada macluumaadka heerkeeda horumarineed iyo qaab nololeed.
Koorasku wuxuu u oggolaanayaa ardayda inay si dhab ah u xoojiyaan aqoonta ay u leeyihiin dhismooyinka aasaasiga ah ee luqadda barnaamijka Pascal. (laga soo bilaabo barnaamijka jimicsiga qaar ka mid ah 2017)

Dhammaadkii, waxaan go'aansaday in aan qaato dhawr saacadood oo aan sawiro tusaale "sida loo sameeyo bot fudud oo loogu talagalay carruurta dugsiga."

Hoosta gooynta waa sida loo qoro bot kale oo fudud oo ku yaal Powershell oo ka dhigo inay shaqeyso iyada oo aan lahayn webhook, IP-yada cad, server-yada gaarka ah, mashiinnada farsamada ee daruuraha, iyo wixii la mid ah - PC-ga caadiga ah ee guriga leh Windows caadiga ah.

TLDR: Maqaal kale oo caajis ah oo leh khaladaad naxwe iyo xaqiiqo ah, wax la akhriyo, kaftan, ma sawiro.

Ma jiro wax ku cusub maqaalka, ku dhawaad ​​wax kasta oo hore loo qoray waxay ku jireen HabrΓ©, tusaale ahaan maqaallada Tilmaamaha: Sida loo abuuro bots gudaha Telegram ΠΈ Telegram bot ee maamulaha nidaamka.
Waxaa intaa dheer, maqaalku si ula kac ah ayaa loo dhimay si aan loo tixraacin suugaanta waxbarashada mar kasta. Ma jiraan tixraacyo loo jeediyo Gang 4, PowerShell Deep Dives ama, dheh, Tiirarka 5 ee Qaab-dhismeedka Wanaagsan ee AWS ee qoraalka ku jira.

Halkii gogoldhig, waad ka boodi kartaa

Dareen xornimo inaad booddoSannadkii 2006, Microsoft waxay sii deysay PowerShell 1.0 Windows XP, Vista, iyo Server 2003. Siyaabaha qaarkood, waxay u beddeshay waxyaabaha ay ka midka yihiin cmdbat scripts, vb scripts, Windows Script Host iyo JScript.

Xitaa hadda, PowerShell kaliya waxaa loo tixgelin karaa inay tahay tallaabada xigta ka dib xulashooyinka Logo, halkii laga yaabaa in weli la isticmaalo Delphi (ama wax ka weyn), inkasta oo ay jiraan siddo, fasallo, hawlo, MS GUI wicitaanada, Is dhexgalka Git iyo wixii la mid ah.

Powershell waxaa loo isticmaalaa si dhif ah; waxaad kaliya kula kulmi kartaa qaabka PowerShell Core, VMware vSphere PowerCLI, Azure PowerShell, MS Exchange, Isku-xidhka Gobolka ee la rabo, Helitaanka Shabakadda PowerShell iyo daraasiin ama in ka badan oo ay dhif tahay in la isticmaalo barnaamijyo iyo hawlo. Waxaa laga yaabaa inuu helo dabayl labaad oo la sii daayo WSL2, laakiin si sax ah maaha.

Powershell sidoo kale waxay leedahay saddex faa'iidooyin oo waaweyn:

  1. Way fududahay, waxaa jira suugaan badan iyo tusaalooyin ku saabsan, iyo xitaa Ruushka, tusaale ahaan, maqaal ku saabsan Foreach - laga bilaabo buugga PowerShell qoto dheer - ku saabsan farqiga () iyo {}
  2. Wuxuu raacayaa tifaftiraha ISE, oo ay ku jiraan Windows. Xitaa waxaa jira nooc ka mid ah cilladaha.
  3. Way fududahay in laga soo waco qaybaha dhismaha garaafyada.

0. Diyaarinta.

Waxaan u baahan doonaa:

  • Windows PC (waxaan haystaa Windows 10)
  • Ugu yaraan nooc ka mid ah gelitaanka internetka (iyada oo loo marayo NAT tusaale ahaan)
  • Kuwa haysta xaddidan ee telegram-ku rakibay oo habeeyay freegate ee browserka, xaaladaha adag qaarkood, oo ay weheliso Symple DNS Crypt
  • Haysashada macmiil telegram oo shaqaynaya taleefankaaga
  • Fahamka aasaaska aasaasiga ah - waa maxay doorsoome, array, loop.

Maqaallada la furay oo akhriyay - Tilmaamaha: Sida loo abuuro bots gudaha Telegram ΠΈ Telegram bot ee maamulaha nidaamka

1. Aynu abuurno bot kale oo tijaabo ah.

Maadaama qof kastaa uu hore u ogaa tan, oo uu hore u dhacay, sidoo kale waad ka boodi kartaaSida lagu sheegay maqaalka kore - Marka hore, bot for Telegram - wali waa codsi dhankaaga ka socda oo codsiyo u diraya Telegram Bot API. Intaa waxaa dheer, API-gu waa cad yahay - botku wuxuu gelayaa URL gaar ah oo leh cabbirro, Telegram-na wuxuu kaga jawaabaa shay JSON ah.

Dhibaatooyinka la xidhiidha: haddii si aan la garanayn aad ka qaadato kood shay JSON oo si uun ugu dirto fulinta (maaha ujeedo), koodka waa laguu fulin doonaa adiga.

Habka abuurista waxaa lagu qeexay laba maqaal oo kor ku xusan, laakiin waxaan ku celinayaa: telegram waxaan furaynaa xiriirada, raadi @botfather, u sheeg isaga / newbot, samee bot Botfortest12344321, wac Mynext1234bot, oo hel fariin leh fure u gaar ah foomka 1234544311:AbcDefNNNNNNNNNNNNNN

Daryeel furaha oo ha siin!

Markaa waxaad habayn kartaa bot-ka, tusaale ahaan, mamnuuc in lagu daro kooxaha, laakiin talaabooyinka ugu horreeya tani maahan lagama maarmaan.

Aan waydiisano BotFather "/mybot" oo aan hagaajino jaangooyooyinka haddii aynaan jeclayn wax.

Aan mar kale furno xiriirada, ka hel @Botfortest12344321 halkaas (waa qasab in raadinta @), dhagsii "bilow" oo u qor bot-ka"/Glory to the robots." Calaamadda / calaamadda ayaa loo baahan yahay, xigashooyinka looma baahna.
Botka, dabcan, waxba kama jawaabi doono.

Aynu eegno in bot-ka la sameeyay oo fur.

api.telegram.org/bot1234544311:AbcDefNNNNNNNNNNNNNN/getMe
halka 1234544311:AbcDefNNNNNNNNNNNN uu yahay furihii hore loo helay,
oo hel khad sida
{"ok": run,"natiijada":{""}}

Waxaan haynaa weedha sirta ah ee ugu horeysa (token). Hadda waxaan u baahanahay inaan ogaano lambarka labaad ee sirta ah - aqoonsiga wada sheekeysiga ee bot. Sheeko kasta, koox, iwm. waa shaqsi waxayna leedahay nambar u gaar ah (mararka qaarkood laga jaray - kooxaha furan). Si aan u ogaano lambarkan, waxaan u baahanahay inaan ka codsano browserka (xaqiiqda, maahan wax lagama maarmaan ah browserka, laakiin si aad u fahamto si fiican waxaad ku bilaabi kartaa) cinwaanka (halkaas oo 1234544311: NNNNNNNNNN waa calaamaddaada).

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

oo ka jawaab sida

{"ok": run", natiijada":[{"update_id":...,... chat":{"aqoonsi":123456789

Waxaan u baahanahay chat_id

Aynu eegno inaan gacanta ugu qori karno sheekeysiga: ciwaanka ka wac browserka

https://api.telegram.org/botΠ²Π°ΡˆΡ‚ΠΎΠΊΠ΅Π½/sendMessage?chat_id=123456789&text="Life is directed motion"

Haddii aad fariin ka hesho bot wada sheekeysigaaga, waayahay, waxaad u gudubtaa marxaladda xigta.

Habkan (iyada oo loo marayo browserka) waxaad had iyo jeer hubin kartaa inay jiraan dhibaatooyin xagga jiilka isku xirka, ama haddii wax meel qarsoon ku qarsoon yihiin oo aan shaqaynayn.

Waxa aad u baahan tahay inaad ogaato ka hor intaadan sii wadin akhriska

Telegram waxa uu leeyahay dhawr nooc oo wada sheekaysi kooxeed ah (furan, xidhan). Sheekooyinkaas, qaar ka mid ah hawlaha (tusaale, id) way ka duwan yihiin, kuwaas oo mararka qaarkood keena dhibaatooyin.

Aynu ka soo qaadno inay tahay dhamaadka 2019, iyo xitaa geesiga wakhtigeena, Man-Orchestra ee caanka ah (maamulaha, qareenka, khabiirka amniga macluumaadka, barnaamij-sameeyaha iyo ficil ahaan MVP) Evgeniy V. wuxuu ka soocaa doorsoomiyaha $ i ka soo diyaarsan, wuxuu qabsaday wareegyada, fiiri labada sano ee soo socota waxay baran doontaa Chocolatey, ka dibna Isbarbar dhigga PowerShell ΠΈ Isbarbar yaaca Walax Walba way iman doontaa.

1. Waxaan ka fekereynaa waxa bot-keena uu sameyn doono

Ma aanan haysan wax fikrad ah, waa inaan ka fikiraa. Waxaan horey u qoray buug-yaraha. Ma aanan rabin inaan sameeyo bot "kaas oo meel u soo diraya." Si aad ugu xirto Azure waxaad u baahan tahay kaarka deynta, laakiin halkee buu ardaygu ka helayaa? Waa in la ogaadaa in wax walbaa aysan ahayn mid aad u xun: daruuraha ugu muhiimsan waxay bixiyaan nooc ka mid ah xilliga imtixaanka bilaashka ah (laakiin waxaad weli u baahan tahay lambarka kaararka deynta - waxayna u egtahay in dollar laga jari doono. Ma xasuusto haddii mar dambe ayaa la soo celiyay.)

La'aanteed AI ML ma aha mid aad u xiiso leh in la sameeyo bot-faqiir-gabayaa-weaver.

Waxaan go'aansaday in aan sameeyo bot taas oo i xasuusin doonta (ama aniga) erayada Ingiriisiga ee qaamuuska.
Si looga fogaado in lagu khaldo kaydka xogta, qaamuuska waxa lagu kaydin doonaa faylka qoraalka oo gacanta lagu cusboonaysiin doonaa.
Xaaladdan oo kale, hawshu waa in la muujiyo aasaaska shaqada, oo aan la samayn ugu yaraan qayb ahaan wax soo saarka.

2. Isku day waxa iyo sida markii ugu horeysay

Aynu abuurno gal C:poshtranslate
Marka hore, aan aragno nooca powershell ee aan haysano, ku bilow ISE iyada oo loo marayo bilow-orod
powershell waa
ama ka hel Powershell ISE barnaamijyada rakiban.
Ka dib markii la bilaabo, "nooc ka mid ah tifaftiraha" ee caadiga ah ayaa furmi doona; haddii aysan jirin meel qoraal ah, markaa waxaad mar walba riixi kartaa "File - abuur cusub".

Aynu eegno nooca powershell-ku qor goobta qoraalka:

get-host 

oo taabo F5.

Powershell wuxuu soo bandhigayaa inuu kaydiyo - "Qoraalka aad ku dhowdahay inaad socodsiiso waa la keydin doonaa.", waan ku heshiinay, oo ka badbaadinay faylka powershell magaca ku yaal C: poshtranslate myfirstbotBT100.

Ka dib bilawga, daaqada qoraalka hoose waxaan helnaa miiska xogta:

Name             : Windows PowerShell ISE Host
Version          : 5.1.(ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅)

Waxaan haystaa 5.1 wax, taas ayaa igu filan. Haddii aad leedahay Windows 7/8 duug ah markaa wax weyn ma jiraan - in kasta oo PowerShell ay u baahan doonto in lagu cusboonaysiiyo nooca 5 - tusaale. tilmaamaha.

Ku qor Get-Date ee khadka taliska ee hoose, taabo Gelida, fiiri wakhtiga, tag faylka xididka ee amarka
cd
oo ku nadiifi shaashadda amarka cls (maya, uma baahnid inaad isticmaasho rm)

Hadda aynu eegno waxa shaqeeya iyo sida - aynu qori xataa code, laakiin laba line, oo isku day in ay fahmaan waxa ay qabtaan. Aynu faallo ka bixinno xariiqda martigeliyaha ee sumadda # oo ku dar wax yar.

# ΠŸΡ€ΠΈΠΌΠ΅Ρ€ шаблона Π±ΠΎΡ‚Π° 
# get-host
<# это ΠΏΡ€ΠΈΠΌΠ΅Ρ€ многострочного коммСнтария #>
$TimeNow = Get-Date
$TimeNow

(Waxa xiisaha lihi waa in liiska hoos-u-dhaca qaabaynta koodka ee HabrΓ© ay jiraan laba darsin doorasho - laakiin Powershell ma jiro. Dos waa jiraa. Perl waa jiraa.)

Oo aynu socodsiinno koodka adigoo riixaya F5 ama ">" ee GUI.

Waxaan helnaa wax soo saarka soo socda:

Saturday, December 8, 2019 21:00:50 PM (ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Ρ‚ΠΈΠΏΠ°)

Haddaba bal aynu eegno labadan sadar iyo qodobbo xiiso leh si aynaan mustaqbalka ugu soo noqon arrintan.

Si ka duwan Pascal (oo keliya maaha), PowerShell lafteedu waxay isku daydaa inay go'aamiso nooca lagu meeleeyo doorsoomayaasha; Faahfaahin dheeraad ah oo tan ku saabsan ayaa lagu qoray maqaalka Barnaamij-waxbarasheed ku saabsan ku-qorista luqadaha barnaamijyada
Sidaa darteed, annaga oo abuuraya doorsoome $TimeNow oo aan u qoondayno qiimaha taariikhda iyo wakhtiga hadda (Get-Date), ma aha inaan aad uga walaacno nooca xogta halkaas ku jiri doonta.

Run, jaahilnimadan ayaa laga yaabaa inay dhaawacdo, laakiin taasi waa dambe. Hoosta qoraalka waxaa ku jiri doona tusaale.
Aan aragno waxa aan helnay. Aynu fulino (khadka taliska)

$TimeNow | Get-member

oo hel bog qoraal ah oo aan la fahmi karin

Tusaalaha qoraalka aan la fahmi karin 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")...                                         

Sida aad arki karto, doorsoome ka mid ah nooca TypeName: System.DateTime ayaa la abuuray iyada oo leh farabadan hababka (macnaha waxa aan ku samayn karno shaygan doorsooma) iyo hanti.

Aan wacno $TimeNow.DayOfYear - waxaan helnaa tirada maalinta sanadka.
Aan wacno $TimeNow.DayOfYear | Get-Member - waan helnaa TypeName: System.Int32 iyo koox hababka.
Aan wacno $TimeNow.ToUniversalTime() - oo waqti ku hel UTC

Debugger

Mararka qaarkood waxaa dhacda in ay lagama maarmaan noqoto in la fuliyo barnaamij ilaa xariiq gaar ah oo la eego xaaladda barnaamijka wakhtigaas. Ujeedadan awgeed, ISE waxay leedahay shaqada Debug - beddel barta nasashada
Dhig barta jabinta meel dhexe, ku orod labadan sadar oo arag sida uu u eg yahay nasashadu.

3. Fahamka isdhexgalka bot-ka Telegram

Dabcan, xitaa suugaan badan ayaa lagu qoray isdhexgalka bot, oo leh dhammaan getpush iyo wixii la mid ah, laakiin arrinta aragtida waxaa loo tixgelin karaa ikhtiyaari.

Xaaladeena waa lagama maarmaan:

  • Baro inaad u dirto wax waraaqo ah
  • Baro inaad wax ka hesho waraaqaha

3.1 Barashada in wax waraaqo ah loo diro oo laga helo

Cod yar - qaybta 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

iyo Xiriirka Ruushka markan waxaan helnaa qaladka Lama awoodin in lagu xiro server-ka fog.

Ama ma helno - waxay kuxirantahay hawlwadeenka isgaadhsiinta iyo haddii wakiilku habaysan yahay oo shaqeeyo
Hagaag, waxa hadhay waa in lagu daro wakiil. Fadlan la soco in adeegsiga wakiil aan qarsoodi ahayn oo guud ahaan been abuur ah ay aad khatar ugu tahay caafimaadkaaga.

Hawsha helitaanka wakiil shaqeeya ma aha mid aad u adag - inta badan wakiillada http ee la daabacay ayaa shaqeeya. Waxaan filayaa in kii shanaad uu ii shaqeeyay.

Syntax adoo isticmaalaya wakiil:

Invoke-WebRequest -Uri $URL4SEND -Proxy $MyProxy

Haddii aad fariin ka hesho wada sheekeysigaaga bot, markaa wax walba waa fiican yihiin, waad sii socon kartaa. Haddaysan ahayn, sii wad khaladka.

Waxaad arki kartaa waxa xadhigaaga $URL4SEND isku rogo oo isku day inaad ka codsato browserka, sida tan:

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

3.2. Waxaan baranay sida loo qoro "wax" sheekada, hadda aan isku dayno inaan akhrino

Aan ku darno 4 sadar oo kale oo aan aragno waxa gudaha ku jira | xubin ka noqosho

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

Waxa ugu xiisaha badan ayaa nala siiyay

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

Aan aragno waxa ku jira:

Write-Host "ParsedHtml"
$MyMessageGet.ParsedHtml # Ρ‚ΡƒΡ‚ интСрСсноС
Write-Host "RawContent"
$MyMessageGet.RawContent # ΠΈ Ρ‚ΡƒΡ‚ интСрСсноС, Π½ΠΎ Π΅Ρ‰Π΅ ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΈ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠ΅. 
Write-Host "Content"
$MyMessageGet.Content

Haddii wax walba ay kuu shaqeeyaan, waxaad heli doontaa saf dheer sida:

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

Nasiib wanaag, maqaalkii hore ee la daabacay Telegram bot ee maamulaha nidaamka khadkan (haa, marka loo eego $MyMessageGet.RawContent | xubin ka noqoshada waa System.string), mar hore waa la kala furfuray.

4. Ka baaraandeg waxa aad hesho (waxaanu hore u naqaanay sida wax loo diro)

Sidii horeba loo qoray halkan, waxyaabaha ugu muhiimsan waxay ku jiraan nuxurka. Aynu si qoto dheer u eegno.

Marka hore, waxaan ku qori doonaa dhowr weedho oo dheeri ah bot-ka barta shabakadda ama taleefanka

/message1
/message2
/message3

oo ka eeg browserka ciwaanka lagu sameeyay doorsoomaha $URLGET.

Waxaan arki doonaa wax sida:

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

Waa maxay? Waxoogaa qalafsan oo ka kooban walxo ka kooban farriimaha dhamaadka-ilaa-dhamaadka, aqoonsiga wada sheekaysiga, diritaanka aqoonsiga iyo macluumaad kale oo badan.

Si kastaba ha ahaatee, uma baahnid inaan ogaano "nooca shay kani yahay" - qayb ka mid ah shaqada ayaa horeba naloo qabtay. Aan aragno waxa gudaha ku jira:

Akhrinta fariimaha la helay ama qaybta 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. Maxaan ka yeelnaa hadda?

Aynu kaydinno faylka ka soo baxay magaca myfirstbotBT105 ama wax kasta oo aad jeceshahay, beddel cinwaanka oo faallo ka bixi dhammaan kood hore loo qoray

<#start comment 105 end comment 105#>

Hadda waxaan u baahanahay inaan go'aan ka gaarno halka laga helayo qaamuuska (si fiican, meesha - diskka faylka) iyo sida uu u ekaan doono.

Dabcan, waxaad ku qori kartaa qaamuus weyn oo sax ah qoraalka qoraalka, laakiin tani gabi ahaanba waa dhinac barta.
Haddaba aan aragno waxa powershell uu si caadi ah ula shaqayn karo.
Guud ahaan, ma daneeyo faylka uu ku shaqeynayo, wax naguma aha.
Waxaan haynaa doorasho: txt (waad awoodaa, laakiin sababta), csv, xml.
Qof walba ma daawan karnaa? Aan aragno qof walba.
Aynu abuurno fasal MyVocabClassExample1 iyo doorsoome $MyVocabExample1
Waxaan ogsoonahay in fasalka uu ku qoran yahay lacag la'aan

code #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

Aan isku dayno inaan tan ku qorno faylasha annagoo adeegsanayna muunad.

Qaar ka mid ah code #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

- waxaana khalad ka helnaa khadka Out-File -FilePath $MyFilenameExample01 -InputObject -Ku lifaaq $MyVocabExample2.

Ma rabo inuu ku daro, ah-ah, maxaa ceeb ah.

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

Aan aragno waxa dhaca. Aragti qoraaleed weyn - laakiin sidee dib loogu dhoofiyaa? Miyaan soo bandhigaa nooc ka mid ah kala-soocida qoraalka, sida hakatooyinka?

Ugu dambeyntiina waxaad heleysaa "qiyamta kala-soocida (CSV) faylka A JOOJI SUG.
#

$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 

Sida ay fududahay in la arko, MS si gaar ah looguma kala saarin caqligiisa; nidaam la mid ah, hal kiis -FilePath ayaa loo isticmaalaa, mid kale -Path.

Intaa waxaa dheer, feylka saddexaad ee luqadda Ruushku waa la waayay, faylka afraad ayaa soo baxday ... si fiican, wax ayaa dhacay. Nidaamka #TYPE. Shayga[] 00
# "Tirin","Length","Dheer dheer","Derejada","SyncRoot", "IsReadOnly", "IsFixedSize", "Is-FixedSize"
#
Aan dib u qorno in yar:

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

Waxay u muuqataa inay caawisay, laakiin weli ma jecli qaabka.

Gaar ahaan ma jecli in aanan si toos ah xardadka shay u gelin karin fayl.
Dhanka kale, tan iyo markii aan bilownay wax ku qorista faylalka, ma bilaabi karnaa in aan xafidno diiwaanka bilowga? Waxaan haysanaa waqti doorsoome ahaan, waxaan dejin karnaa magaca faylka.

Run, ma jiraan wax la qoro weli, laakiin waxaad ka fekeri kartaa sida ugu wanaagsan ee loo rogo logyada.
Aynu isku dayno xml hadda.

Qaar ka mid ah 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

U Dhoofinta xml waxay leedahay faa'iidooyin badan - akhrin kara, dhoofinta shayga oo dhan, oo looma baahna in la sameeyo kor u kac.

Aan isku dayno akhri faylka xml.

Akhris yar oo xml ah

$MyFilenameExample06 = $ScriptDir + "Example06.xml"
$MyVocabExample4AsArray = Import-Clixml -Path $MyFilenameExample06
# $MyVocabExample4AsArray 
# $MyVocabExample4AsArray[0]
# ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹Ρ… Π½ΡŽΠ°Π½ΡΠ°Ρ…. Powershell врСмя ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π²Π΅Π΄Π΅Ρ‚ сСбя Π½Π΅ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π²Ρ€ΠΎΠ΄Π΅ Π±Ρ‹ ΠΊΠ°ΠΊ Π±Ρ‹ стоило Π±Ρ‹ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ Π±Ρ‹.
# Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρƒ мСня эти Π΄Π²Π° Π²Ρ‹Π²ΠΎΠ΄Π° ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ
# Write-Output $MyVocabExample4AsArray 
# write-host $MyVocabExample4AsArray 

Aan u soo noqono hawshii. Waxaan qornay feyl tijaabo ah, akhri, qaabka kaydintu waa caddahay, haddii loo baahdo, waxaad qori kartaa tifaftire yar oo gaar ah si aad ugu darto oo u tirtirto khadadka.

Aan ku xasuusiyo in hawshu ahayd in la sameeyo bot yar oo tababar ah.

Qaabka shaqada: Waxaan u diraa amarka "tusaale" bot-ka, bot-ku wuxuu ii soo diraa kelmad si aan kala sooc lahayn loo doortay iyo qoraal, 10 ilbiriqsi kadib waxay ii soo dirtaa tarjumaad iyo faallo. Waxaan ognahay sida loo akhriyo amarrada, waxaan sidoo kale jeclaan lahayn inaan barano sida si toos ah loo xusho oo loo hubiyo wakiillada, iyo dib-u-habeynta farriimaha xisaabaadka si ay u illoobaan.

Aynu ka hadalno wax kasta oo hore looga faallooday inay yihiin kuwo aan loo baahnayn, ka faalloon tusaalooyinka aan hadda loo baahnayn ee txt iyo csv, oo u kaydi faylka sida nooca B106

Oh haa. Aan mar kale wax u dirno botka.

6. Diritaanka hawlaha iyo wax ka badan

Kahor intaadan farsamayn soo dhawaynta, waxaad u baahan tahay inaad abuurto shaqo dirida "ugu yaraan shay" aan ahayn fariinta tijaabada ah.

Dabcan, tusaale ahaan waxaan lahaan doonaa hal diris oo kaliya iyo hal farsameyn, laakiin maxaa dhacaya haddii aan u baahanahay inaan sameyno wax la mid ah dhowr jeer?

Way fududahay in la qoro hawl. Markaa, waxaanu haynaa doorsoomayaal nooca shay $MyVocabExample4AsArray, ka akhri faylka, oo ah qaab isku dubarid ah ilaa laba walxood.
Aan tagno akhri.

Isla mar ahaantaana, waxaan la macaamili doonaa saacadda; waxaan u baahan doonaa mar dambe (xaqiiqda, tusaalahan uma baahn doono :)

Qaar ka mid ah code #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
}

Sida aad si fudud u arki karto, shaqadu waxay wacdaa $MyToken iyo $MyChatID, kuwaas oo si adag loo sumadeeyay mar hore.

Looma baahna in tan la sameeyo, oo haddii $MyToken uu yahay mid ka mid ah bot kasta, markaa $MyChatID way isbedeshaa iyadoo ku xidhan sheekada.

Si kastaba ha ahaatee, mar haddii tani ay tahay tusaale, waanu iska indhatiray doonaa hadda.

Mar haddii $MyVocabExample4AsArray aanu ahayn array, in kasta oo ay aad ula mid tahay mid, markaas ma qaadan kartid kaliya codso dhererkeeda.

Mar labaad waa inaan samaynaa wax aan la samayn karin - baarashuud ma aha si waafaqsan code - qaado oo tiri

Qaar ka mid ah code #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 muuqaal xiiso leh. Aynu nidhaahno waxaan rabnaa inaan helno 0 ama 1 (waxaan ku haynaa laba walxood oo keliya ee ku jira shaxda). Marka la dejinayo xuduudaha 0..1, ma heli doonaa "1"?
maya - ma heli doono, waxaanu haynaa tusaale gaar ah Tusaalaha 2: Hel tiro random inta u dhaxaysa 0 iyo 99 Get-Random -Maximum 100
Sidaa darteed, 0..1 waxaan u baahanahay inaan dejino cabbirka 0..2, oo leh lambarka ugu sarreeya ee = 1.

7. Habaynta fariimaha soo socda iyo dhererka safka ugu badan

Halkee ayaan ku joogsanay mar hore? waxaanu haynaa doorsoomaha la helay $MyMessageGet
iyo $Content4Pars01 laga helay, kuwaas oo aanu xiisaynayno canaasiirta Content4Pars01. natiijada soo diyaarinta

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

Aynu soo dirno botka /message10, /message11, /message12, /word and again /word and / hello.
Aan aragno waxa aan helnay:

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

Aynu dhex marno wax kasta oo la helay oo aan u dirno jawaab haddii farriintu ahayd / kelmad
kiiska dhisitaanka, waxa dadka qaar ku sifeeyaan haddii-elseif, waxaa loo yaqaan 'powershell' iyada oo loo marayo beddelka. Isla mar ahaantaana, koodka hoose wuxuu isticmaalaa furaha -wildcard, kaas oo gebi ahaanba aan loo baahnayn oo xitaa waxyeello leh.

Qaar ka mid ah code #7.1

Write-Output "This is part 7"
Foreach ($Result in $Content4Pars01.result) # Π”Π°, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ быстрСС 
 { 
    switch -wildcard ($Result.message.text) 
            {
            "/word" {MyFirstFunction($TextForExample1)}
            }
}

Aynu socodsiinno qoraalka dhawr jeer. Waxaan heli doonaa isla ereyga laba jeer isku day kasta oo dil ah, gaar ahaan haddii aan khalad ku samaynay hirgelinta aan tooska ahayn.

Laakin jooji. Maaan soo dirin/erey mar kale, markaa maxaa fariinta mar kale loo habeeyey?

Safka loogu diro fariimaha bot-ka ayaa leh dherer kooban (100 ama 200 farriimo, waxaan filayaa) waana in gacanta lagu nadiifiyaa.

Tani dabcan waa lagu sifeeyay dukumentiyada, laakiin waa inaad akhridaa!

Xaaladdan oo kale, waxaan u baahanahay ?chat_id parameter, iyo &timeout, &limit, &parse_mode=HTML iyo &disable_web_page_preview= run weli looma baahna.

Dukumentiyada loogu talagalay api telegram waa halkan
Waxay ku leedahay caddaan iyo Ingiriis:
Aqoonsiga cusboonaysiinta ugu horreysa ee la soo celinayo. Waa in uu ka weyn yahay mid ka mid ah kuwa ugu sarreeya ee tilmaamayaasha cusboonaysiinta hore loo helay. Sida caadiga ah, cusboonaysiinta waxay ka bilaabantaa kuwa ugu horreeya
aan caddayn update la soo celiyaa. Cusboonaysiinta ayaa loo tixgaliyaa in la xaqiijiyo isla marka getUpdates loogu yeero a offset sare marka loo eego cusboonaysiintiisa_id. Deminta taban waxaa lagu qeexi karaa dib u soo celinta cusbooneysiinta laga bilaabo -offset update laga bilaabo dhamaadka safka cusboonaysiinta. Dhammaan cusbooneysiintii hore waa la iloobi doonaa.

Aan eegno:

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

Haa, oo waanu dib u dejin doonaa oo dib u qori doonaa shaqada wax yar. Waxaan haynaa laba ikhtiyaar - u gudbi fariinta oo dhan shaqada oo ka baaraandegi gabi ahaanba shaqada, ama sii kaliya aqoonsiga fariinta oo dib u deji. Tusaale ahaan, kan labaad wuxuu u muuqdaa mid fudud.

Markii hore, xadhig weydiinta "dhammaan fariimahayaga" waxay u ekaayeen

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

waxayna u ekaan doontaa

$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 

Ma jiro qof kaa mamnuucaya inaad marka hore hesho dhammaan fariimaha, socodsiiso, oo kaliya ka dib markii lagu guulaysto codsi habayn aan la xaqiijin -> la xaqiijiyay.

Maxay macno u samaynaysaa in la waco xaqiijinta ka dib marka dhammaan habaynta la dhammeeyo? Guuldarrooyinka ayaa suurtagal ah dhexda dhexe ee fulinta, iyo haddii tusaale ahaan chatbot bilaash ah, maqnaanshaha hal fariin ma aha wax gaar ah, markaa haddii aad ka shaqeyneyso mushaarka qof ama kaarka macaamilka, natiijadu way ka sii dari kartaa.

Dhowr saf oo kood ah

$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. Halkii gunaanad

Hawlaha aasaasiga ah - akhrinta fariimaha, dib u dejinta safka, akhrinta faylka iyo qorista faylka waa la sameeyaa oo la muujiyaa.

Waxa hadhay afar shay oo keliya in la sameeyo:

  • u diraya jawaabta saxda ah ee codsiga wada sheekaysiga
  • u diraya jawaab sheek kasta oo bot-ka lagu daro
  • fulinta code ee loop ah
  • ka soo saarida bot ka jadwalaha daaqadaha.

Dhammaan hawlahani waa sahlan yihiin waxaana si fudud loo fulin karaa iyadoo la akhriyo dukumentiyada ku saabsan cabbirrada sida
Deji-fulinta Siyaasada aan xadidneyn iyo -Xukunka Fulinta
wareegga foomka

$TimeToSleep = 3 # опрос ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 3 сСкунды
$TimeToWork = 10 # ΠΌΠΈΠ½ΡƒΡ‚
$HowManyTimes = $TimeToWork*60/$TimeToSleep # счСтчик для Ρ†ΠΈΠΊΠ»Π°
$MainCounter = 0
for ($MainCounter=0; $MainCounter -le $HowManyTimes) {
sleep $TimeToSleep
$MainCounter ++

Mahadsanid qof kasta oo akhriya.

Source: www.habr.com

Add a comment