Teamplaid airson bot teileagram sìmplidh airson clann-sgoile ann an ìrean 7-9 a’ cleachdadh Powershell

Ann an còmhraidhean le caraid, dh'ionnsaich mi gu h-obann nach eil clann ann an ìrean 8-10 san sgoil aca a 'teagasg phrògraman idir. Word, Excel agus a h-uile càil. Gun suaicheantas, no eadhon Pascal, no eadhon VBA airson Excel.

Chuir e iongnadh mòr orm, dh’ fhosgail mi an eadar-lìn agus thòisich mi a’ leughadh -
Is e aon de na gnìomhan aig sgoil speisealta foghlam ginealach ùr a bhrosnachadh a choinnicheas ri cumhaichean a’ chomainn fiosrachaidh anns an ìre leasachaidh agus dòigh-beatha aice.
Leigidh an cùrsa seo le oileanaich an eòlas air na structaran bunaiteach ann an cànan prògramadh Pascal a dhaingneachadh. (bho phrògram cuid de gymnasium airson 2017)

Aig a’ cheann thall, chuir mi romham uair no dhà a chaitheamh agus dealbh a dhèanamh de eisimpleir de “mar a chruthaicheas tu bot sìmplidh dha clann-sgoile.”

Fon gearradh tha mar a sgrìobhas tu bot sìmplidh eile ann an Powershell agus toirt air obrachadh às aonais webhook, IPan geal, frithealaichean sònraichte, innealan brìgheil air an cleachdadh san sgòth, agus mar sin air adhart - air PC dachaigh àbhaisteach le Windows cunbhalach.

TLDR: Artaigil dòrainneach eile le mearachdan gràmair is fìrinneach, gun dad ri leughadh, gun àbhachdas, gun dealbhan.

Chan eil dad ùr san artaigil, tha cha mhòr a h-uile dad a chaidh a sgrìobhadh roimhe air a bhith air Habré mu thràth, mar eisimpleir ann an artaigilean Stiùireadh: Mar a chruthaicheas tu botaichean ann an Telegram и Telegram bot airson rianaire an t-siostam a.
A bharrachd air an sin, tha an artaigil a dh'aona ghnothaich gun fheum gus nach toir e iomradh air litreachas foghlaim a h-uile turas. Chan eil iomradh sam bith air Gang 4, PowerShell Deep Dives no, can, Na 5 Colbhan de Fhrèam AWS air a dheagh dhealbhadh san teacsa.

An àite ro-ràdh, faodaidh tu leum

Faodaidh tu a dhol seachad airAnn an 2006, leig Microsoft a-mach PowerShell 1.0 airson an uairsin-Windows XP, Vista, agus Server 2003. Ann an cuid de dhòighean, chuir e an àite rudan mar sgriobtaichean cmdbat, sgriobtaichean vb, Windows Script Host agus JScript.

Fiù ‘s a-nis, chan urrainnear beachdachadh air PowerShell ach mar an ath cheum às deidh na roghainnean Suaicheantas, an àite Delphi (no rudeigin nas sine) a tha fhathast air a chleachdadh, a dh’ aindeoin gu bheil lùban, clasaichean, gnìomhan, gairmean MS GUI ann, Amalachadh git agus mar sin air.

Is ann ainneamh a thathas a’ cleachdadh Powershell; chan urrainn dhut tachairt ach ann an cruth PowerShell Core, VMware vSphere PowerCLI, Azure PowerShell, MS Exchange, Rèiteachadh Stàite Miannaichte, Ruigsinneachd lìn PowerShell agus dusan prògram no gnìomh nach eilear a’ cleachdadh ach ainneamh. Is dòcha gum faigh e dàrna gaoth leis an naidheachd WSL2, ach chan ann dìreach.

Tha trì buannachdan mòra aig Powershell cuideachd:

  1. Tha e an ìre mhath sìmplidh, tha tòrr litreachas agus eisimpleirean mu dheidhinn, agus eadhon ann an Ruisis, mar eisimpleir, artaigil mu Foreach - bhon leabhar PowerShell ann an doimhneachd - mun diofar () agus {}
  2. Tha e a’ dol leis an neach-deasachaidh ISE, air a ghabhail a-steach le Windows. Tha eadhon seòrsa de bugger ann.
  3. Tha e furasta a ghairm bhuaithe co-phàirtean airson eadar-aghaidh grafaigeach a thogail.

0. Ullachadh.

Feumaidh sinn:

  • Windows PC (tha Windows 10 agam)
  • Co-dhiù seòrsa de chothrom air an eadar-lìon (tro NAT mar eisimpleir)
  • Dhaibhsan aig a bheil cothrom cuibhrichte air teileagram - freegate a chuir a-steach agus a rèiteachadh sa bhrobhsair, ann an cuid de chùisean duilich, còmhla ri Symple DNS Crypt
  • Le teachdaiche teileagram obrach air an fhòn agad
  • A 'tuigsinn nam bunaitean - dè a th' ann an caochladh, sreath, lùb.

A’ fosgladh agus a’ leughadh artaigilean - Stiùireadh: Mar a chruthaicheas tu botaichean ann an Telegram и Telegram bot airson rianaire an t-siostam a

1. Cruthaichidh sinn bot deuchainn eile.

Leis gu bheil fios aig a h-uile duine mu thràth, agus gu bheil e air tachairt mar-thà, faodaidh tu cuideachd a sgiobadhMar a chaidh a ràdh san artaigil gu h-àrd - An toiseach, bot airson Telegram - tha e fhathast na thagradh a ’ruith air do thaobh agus a’ dèanamh iarrtasan gu Telegram Bot API. A bharrachd air an sin, tha an API soilleir - bidh am bot a ’faighinn cothrom air URL sònraichte le paramadairean, agus bidh Telegram a’ freagairt le nì JSON.

Duilgheadasan co-cheangailte: ma bheir thu ann an dòigh neo-aithnichte cuid de chòd bho nì JSON agus dòigh air choireigin ga chuir gu bàs (chan ann a dh’aona ghnothach), thèid an còd a chuir gu bàs dhut.

Tha am pròiseas cruthachaidh air a mhìneachadh ann an dà artaigil gu h-àrd, ach bidh mi ag ath-aithris: ann an teileagram bidh sinn a’ fosgladh luchd-aithne, coimhead airson @botfather, innis dha / newbot, cruthaich bot Botfortest12344321, cuir fòn thuige Mynext1234bot, agus gheibh sinn teachdaireachd le iuchair shònraichte den foirm 1234544311:AbcDefNNNNNNNNNNNNNN

Thoir an aire don iuchair agus na toir seachad e!

An uairsin faodaidh tu am bot a rèiteachadh, mar eisimpleir, casg a chuir air buidhnean, ach anns na ciad cheumannan chan eil seo riatanach.

Iarraidh sinn air BotFather airson “/ mybot” agus atharraich na roghainnean mura toil leinn rudeigin.

Fosglaidh sinn an luchd-aithne a-rithist, lorg @Botfortest12344321 an sin (tha e riatanach an rannsachadh a thòiseachadh le @), cliog air “tòiseachadh” agus sgrìobh chun bot “/ Glòir dha na h-innealan-fuadain.” Tha feum air an / soidhne, chan eil feum air luachan.
Cha fhreagair am bot, gu dearbh, dad.

Feuch an dèan sinn cinnteach gu bheil am bot air a chruthachadh agus fosgail e.

api.telegram.org/bot1234544311:AbcDefNNNNNNNNNNNNNNNN/getMe
far a bheil 1234544311:AbcDefNNNNNNNNNNNNNN an iuchair a fhuaireadh roimhe,
agus faigh loidhne mar
{"ok":true, "toradh":{""}}

Tha a’ chiad abairt dhìomhair againn (token). A-nis feumaidh sinn faighinn a-mach an dàrna àireamh dìomhair - ID a 'chat leis a' bot. Tha gach còmhradh, buidheann, msaa fa leth agus tha an àireamh aige fhèin (uaireannan le minus - airson buidhnean fosgailte). Gus an àireamh seo fhaighinn a-mach, feumaidh sinn iarraidh sa bhrobhsair (gu dearbh, chan eil e riatanach idir sa bhrobhsair, ach airson tuigse nas fheàrr faodaidh tu tòiseachadh leis) an seòladh (far a bheil 1234544311:NNNNNNNNNN mar do chomharradh

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

agus faigh freagairt mar

{ "ceart gu leòr": fìor, "toradh":[{ "update_id":...,... cabadaich" :{ " id ":123456789

Feumaidh sinn chat_id.

Feuch an dèan sinn cinnteach gun urrainn dhuinn sgrìobhadh chun chat le làimh: cuir fios chun t-seòladh bhon bhrobhsair

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

Ma gheibh thu teachdaireachd bho bot sa chat agad, ceart gu leòr, gluaisidh tu air adhart chun ath ìre.

San dòigh seo (tron bhrobhsair) faodaidh tu an-còmhnaidh faighinn a-mach a bheil duilgheadasan ann le gineadh ceangail, no a bheil rudeigin falaichte an àiteigin agus nach obraich e.

Na dh’ fheumas tu a bhith eòlach mus lean thu air adhart a’ leughadh

Tha grunn sheòrsaichean de chòmhraidhean buidhne aig Telegram (fosgailte, dùinte). Airson na còmhraidhean sin, tha cuid de na gnìomhan (mar eisimpleir, id) eadar-dhealaichte, a bhios uaireannan ag adhbhrachadh cuid de dhuilgheadasan.

Gabhaidh sinn ris gur e deireadh 2019 a th’ ann, agus eadhon gaisgeach ar n-ùine, am Man-Orchestra ainmeil (rianadair, neach-lagha, eòlaiche tèarainteachd fiosrachaidh, prògramadair agus gu practaigeach MVP) Evgeniy V. a’ dèanamh eadar-dhealachadh eadar an caochladair $i bho raon, air lùban a mhaighstireachd, seall anns an ath dhà bhliadhna bidh maighstireachd air Chocolatey, agus an uairsin Giullachd co-shìnte le PowerShell и ForEach-Rud Co-shìnte thig e.

1. Bidh sinn a 'smaoineachadh air dè a nì ar bot

Cha robh beachdan sam bith agam, bha agam ri smaoineachadh. Tha mi air leabhar-notaichean bot a sgrìobhadh mu thràth. Cha robh mi airson bot a dhèanamh “a chuireas rudeigin a dh’ àiteigin. ” Gus ceangal ri Azure feumaidh tu cairt creideas, ach cò às a gheibh an oileanach e? Bu chòir a thoirt fa-near nach eil a h-uile dad cho dona: tha na prìomh sgòthan a 'toirt seachad seòrsa de dheuchainn an-asgaidh (ach tha feum agad fhathast air àireamh cairt creideis - agus tha e coltach gun tèid dolar a thoirt bhuaithe. Chan eil cuimhne agam ma chaidh a thilleadh nas fhaide air adhart.)

Às aonais AI ML chan eil e cho inntinneach breabadair bot-bochd-bàrd a dhèanamh.

Cho-dhùin mi bot a dhèanamh a chuireas nam chuimhne (no nach mi) faclan Beurla bhon fhaclair.
Gus fìdhlearachd leis an stòr-dàta a sheachnadh, thèid am faclair a stòradh ann am faidhle teacsa agus thèid ùrachadh le làimh.
Anns a 'chùis seo, is e an obair bunaitean na h-obrach a shealltainn, agus gun a bhith a' dèanamh co-dhiù toradh crìochnaichte gu ìre.

2. A 'feuchainn dè agus ciamar airson a' chiad uair

Cruthaichidh sinn pasgan C:poshtranslate
An toiseach, chì sinn dè an seòrsa cumhachd a th’ againn, leig dhuinn ISE a chuir air bhog tro ruith tòiseachaidh
cumhachdan ise
no lorg Powershell ISE ann am prògraman stàlaichte.
Às deidh a chuir air bhog, fosglaidh am fear àbhaisteach “neach-deasachaidh de sheòrsa air choreigin”; mura h-eil raon teacsa ann, faodaidh tu an-còmhnaidh briogadh air “File - cruthaich ùr”.

Nach toir sinn sùil air an dreach de powershell - sgrìobh anns an raon teacsa:

get-host 

agus brùth F5.

Bidh Powershell a’ tabhann sàbhaladh - “Thèid an sgriobt a tha thu gu bhith a’ ruith a shàbhaladh.”, tha sinn ag aontachadh, agus sàbhail am faidhle bho powershell leis an ainm ann an C: poshtranslate myfirstbotBT100.

Às deidh a chuir air bhog, anns an uinneag teacsa ìosal gheibh sinn clàr dàta:

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

Tha 5.1 rudeigin agam, tha sin gu leòr. Ma tha seann Windows 7/8 agad chan eil sin idir idir - ged a dh’ fheumas PowerShell ùrachadh gu dreach 5 - m.e. stiùireadh.

Seòrsa Get-Date anns an loidhne-àithne gu h-ìosal, brùth Enter, coimhead air an àm, rachaibh chun phasgan root leis an àithne
cd
agus glan an sgrion leis an àithne cls (chan eil, chan fheum thu rm a chleachdadh)

A-nis leig dhuinn sùil a thoirt air dè a tha ag obair agus ciamar - leig dhuinn sgrìobhadh chan e eadhon an còd, ach dà loidhne, agus feuchaidh sinn ri tuigsinn dè a bhios iad a ’dèanamh. Bheir sinn beachd a-mach air an loidhne le get-host leis an samhla # agus cuir beagan ris.

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

(Is e an rud a tha inntinneach gu bheil dà dhusan roghainn anns an liosta tuiteam-sìos cruth còd air Habré - ach chan eil Powershell ann. Tha Dos ann. Tha Perl ann.)

Agus ruithidh sinn an còd le putadh air F5 no ">" bhon GUI.

Gheibh sinn an toradh a leanas:

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

A-nis leig dhuinn sùil a thoirt air an dà loidhne seo agus cuid de phuingean inntinneach gus nach till sinn chun seo san àm ri teachd.

Eu-coltach ri Pascal (agus chan e a-mhàin), bidh PowerShell fhèin a’ feuchainn ri faighinn a-mach dè an seòrsa a bu chòir a shònrachadh do chaochladair; tha barrachd fiosrachaidh mu dheidhinn seo sgrìobhte san artaigil Prògram foghlaim airson a bhith a 'sgrìobhadh cànan prògramachaidh
Mar sin, le bhith a’ cruthachadh caochladair $TimeNow agus a’ sònrachadh luach a’ chinn-latha is na h-ùine làithreach (Get-Date) dha, chan fheum sinn cus dragh a ghabhail mu dè an seòrsa dàta a bhios ann.

Fìor, faodaidh an aineolas seo dochann nas fhaide air adhart, ach tha sin airson nas fhaide air adhart. Gu h-ìosal anns an teacsa bidh eisimpleir.
Chì sinn dè fhuair sinn. Nach cuir sinn an gnìomh (air an loidhne-àithne)

$TimeNow | Get-member

agus faigh duilleag de theacsa nach gabh a thuigsinn

Eisimpleir de theacsa neo-thuigsinn àireamh 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")...                                         

Mar a chì thu, chaidh caochladair de sheòrsa TypeName: System.DateTime a chruthachadh le dòrlach de dhòighean (a rèir dè as urrainn dhuinn a dhèanamh leis an nì caochlaideach seo) agus feartan.

Canaidh sinn $TimeNow.DayOfYear — gheibh sinn aireamh latha na bliadhna.
Canaidh sinn $TimeNow.DayOfYear | Get-Member - gheibh sinn TypeName: System.Int32 agus buidheann de dhòighean-obrach.
Canaidh sinn $TimeNow.ToUniversalTime() - agus faigh an ùine ann an UTC

Debugger

Uaireannan bidh e a 'tachairt gu bheil e riatanach prògram a chur an gnìomh suas gu loidhne shònraichte agus faic staid a' phrògraim aig an àm sin. Airson an adhbhair seo, tha gnìomh Debug aig ISE - tog puing briseadh
Cuir puing-briseadh am badeigin sa mheadhan, ruith an dà loidhne seo agus faic cò ris a tha am briseadh coltach.

3. A 'tuigsinn an eadar-obrachadh leis an Telegram bot

Gu dearbh, chaidh eadhon barrachd litreachas a sgrìobhadh air eadar-obrachadh leis a ’bot, leis a h-uile getpush agus mar sin air adhart, ach faodar beachdachadh air cuspair teòiridh mar roghainn.

Anns a 'chùis againn tha e riatanach:

  • Ionnsaich mar a chuireas tu rudeigin ann an conaltradh
  • Ionnsaich mar a gheibh thu rudeigin bho chonaltradh

3.1 Ag ionnsachadh rudeigin a chur ann an litrichean agus faighinn bhuaithe

Còd beag - pàirt 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

agus ann an Caidreachas na Ruis aig an ìre seo gheibh sinn a 'mhearachd Chan urrainn ceangal a dhèanamh ris an fhrithealaiche iomallach.

No chan fhaigh sinn e - bidh e an urra ris a’ ghnìomhaiche telecom agus a bheil an neach-ionaid air a rèiteachadh agus ag obair
Uill, chan eil air fhàgail ach neach-ionaid a chuir ris. Thoir an aire gu bheil cleachdadh neach-ionaid neo-chrioptaichte agus san fharsaingeachd meallta gu math cunnartach airson do shlàinte.

Chan eil e glè dhoirbh a bhith a’ lorg neach-ionaid obrach - bidh a’ mhòr-chuid de na proxies http foillsichte ag obair. Tha mi a’ smaoineachadh gun do dh’obraich an còigeamh fear dhòmhsa.

Syntax a’ cleachdadh neach-ionaid:

Invoke-WebRequest -Uri $URL4SEND -Proxy $MyProxy

Ma gheibh thu teachdaireachd sa chat agad le bot, tha a h-uile dad gu math, faodaidh tu gluasad air adhart. Mura h-eil, lean air adhart a 'deasbad.

Chì thu cò ris a thionndaidheas an t-sreang $URL4SEND agad agus feuch ri iarraidh sa bhrobhsair, mar seo:

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

3.2. Dh’ ionnsaich sinn mar a sgrìobhas sinn “rudeigin” ann an cabadaich, a-nis feuchaidh sinn ri a leughadh

Nach cuir sinn 4 loidhnichean a bharrachd ris agus faic na tha a-staigh troimhe | faigh-bhall

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

Tha an rud as inntinniche air a thoirt dhuinn

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

Chì sinn dè tha annta:

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

Ma tha a h-uile càil ag obair dhut, gheibh thu loidhne fhada mar:

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

Gu fortanach, anns an artaigil a chaidh fhoillseachadh roimhe Telegram bot airson rianadair an t-siostaim an loidhne seo (tha, a rèir $MyMessageGet.RawContent | is e siostam.String a th’ ann am ball fhaighinn), air a thoirt às a chèile mu thràth.

4. Pròiseas na gheibh thu (tha fios againn mu thràth mar a chuireas sinn rudeigin)

Mar a chaidh a sgrìobhadh mu thràth an seo, tha na rudan as riatanach ann an susbaint. Bheir sinn sùil nas mionaidiche air.

An toiseach, sgrìobhaidh sinn abairt no dhà a bharrachd chun bot bhon eadar-aghaidh lìn no bhon fhòn

/message1
/message2
/message3

agus seall tron ​​bhrabhsair aig an t-seòladh a chaidh a chruthachadh sa chaochladair $URLGET.

Chì sinn rudeigin mar:

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

Dè th' ann? Nithean iom-fhillte bho ghrunn nithean anns a bheil aithnichear teachdaireachd deireadh-gu-deireadh, aithnichear cabadaich, aithnichear cur agus tòrr fiosrachaidh eile.

Ach, chan fheum sinn a-mach “dè an seòrsa rud a tha seo” - tha pàirt den obair air a dhèanamh dhuinn mu thràth. Chì sinn dè a tha a-staigh:

Leughadh teachdaireachdan a fhuaireadh no pàirt 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. Dè bu chòir dhuinn a dhèanamh mu dheidhinn a-nis?

Sàbhailidh sinn am faidhle a thig às fon ainm myfirstbotBT105 no ge bith dè as fheàrr leat, atharraich an tiotal agus thoir beachd air a’ chòd a chaidh a sgrìobhadh mu thràth tro

<#start comment 105 end comment 105#>

A-nis feumaidh sinn co-dhùnadh càite am faigh sinn am faclair (uill, càite - air diosc ann am faidhle) agus cò ris a bhios e coltach.

Gu dearbh, faodaidh tu faclair mòr a sgrìobhadh dìreach ann an teacsa an sgriobt, ach tha seo gu tur ri taobh a ’phuing.
Mar sin chì sinn cò leis as urrainn dha powershell obrachadh gu h-àbhaisteach.
San fharsaingeachd, chan eil dragh aige dè am faidhle a bhith ag obair leis, chan eil e gu diofar dhuinn.
Tha roghainn againn: txt (faodaidh tu, ach carson), csv, xml.
Am faic sinn a h-uile duine?
Cruthaichidh sinn clas MyVocabClassExample1 agus caochladair $MyVocabExample1
Tha mi a 'toirt fa-near gu bheil an clas air a sgrìobhadh gun $

cuid de chòd #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

Feuchaidh sinn ri seo a sgrìobhadh ann am faidhlichean a’ cleachdadh eisimpleireach.

Cuid de chòd #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

- agus gheibh sinn mearachd air an loidhne Out-File -FilePath $MyFilenameExample01 -InputObject -Append $MyVocabExample2.

Chan eil e airson a chuir ris, ah-ah, rud a tha nàire.

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

Chì sinn dè thachras. Sealladh teacsa sgoinneil - ach ciamar a nì thu às-mhalairt air ais? Am bu chòir dhomh seòrsa de luchd-sgaraidh teacsa a thoirt a-steach, leithid cromagan?

Agus aig a’ cheann thall gheibh thu faidhle “luachan sgaraichte le cromag (CSV) A STOP FHÈIN.
#

$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 

Mar a tha furasta fhaicinn, chan eil MS air a chomharrachadh gu sònraichte leis an loidsig aige; airson dòigh-obrach coltach ris, ann an aon chùis -FilePath air a chleachdadh, ann an tè eile -Path.

A bharrachd air an sin, anns an treas faidhle chaidh an cànan Ruiseanach à sealladh, anns a 'cheathramh faidhle thionndaidh e a-mach ... uill, thachair rudeigin. #TYPE System.Object[] 00
# “Cunnt”, “Fad”, “Fad fada”, “Rang”, “SyncRoot”, “IsReadOnly”, “IsFixedSize”, “IsSynchronized”
#
Feuch an ath-sgrìobh sinn e beagan:

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

Tha e coltach gun do chuidich e, ach cha toil leam an cruth fhathast.

Cha toil leam sin gu sònraichte chan urrainn dhomh loidhnichean bho nì a chuir ann am faidhle gu dìreach.
Air an t-slighe, bhon a thòisich sinn a 'sgrìobhadh gu faidhlichean, an urrainn dhuinn tòiseachadh a' cumail log tòiseachaidh? Tha ùine againn mar chaochladair, is urrainn dhuinn ainm an fhaidhle a shuidheachadh.

Fìor, chan eil dad ri sgrìobhadh fhathast, ach faodaidh tu smaoineachadh air an dòigh as fheàrr air na logaichean a thionndadh.
Feuch sinn xml an-dràsta.

Cuid de 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

Tha mòran bhuannachdan aig às-mhalairt gu xml - so-leughaidh, às-mhalairt an nì gu lèir, agus chan eil feum air cosgais a dhèanamh.

Feuch sinn leugh faidhle xml.

Leughadh beag bho xml

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

Tillidh sinn chun na h-obrach. Sgrìobh sinn faidhle deuchainn, leugh e, tha an cruth stòraidh soilleir, ma tha sin riatanach, faodaidh tu deasaiche faidhle beag fa leth a sgrìobhadh gus loidhnichean a chuir ris agus a dhubhadh às.

Leig leam do chuimhneachadh gur e an obair bot trèanaidh beag a dhèanamh.

Cruth obrach: Bidh mi a’ cur an àithne “eisimpleir” chun bot, bidh am bot a’ cur thugam facal air a thaghadh air thuaiream agus tar-sgrìobhadh, agus às deidh 10 diogan cuiridh e eadar-theangachadh agus beachd thugam. Tha fios againn mar a leughas sinn òrdughan, bu mhath leinn cuideachd ionnsachadh mar a roghnaicheas tu agus a nì thu sgrùdadh air proxies gu fèin-ghluasadach, agus ath-shuidheachadh cunntairean teachdaireachd gu dearmad.

Nach toir sinn iomradh air a h-uile dad a chaidh ainmeachadh roimhe mar rud neo-riatanach, thoir beachd air na h-eisimpleirean nach eil riatanach a-nis le txt agus csv, agus sàbhail am faidhle mar dhreach B106

O bha. Nach cuir sinn rudeigin chun bot a-rithist.

6. Dispatch bho ghnìomhan agus barrachd

Mus cuir thu crìoch air an fhàilteachadh, feumaidh tu gnìomh a chruthachadh airson “rudeigin co-dhiù” a chuir a-steach ach teachdaireachd deuchainn.

Gu dearbh, anns an eisimpleir cha bhi againn ach aon chuir agus dìreach aon ghiollachd, ach dè ma dh'fheumas sinn an aon rud a dhèanamh grunn thursan?

Tha e nas fhasa gnìomh a sgrìobhadh. Mar sin, tha caochladair againn de sheòrsa nì $MyVocabExample4AsArray, air a leughadh bhon fhaidhle, ann an cruth sreath de cho mòr ri dà eileamaid.
Rachamaid a leughadh.

Aig an aon àm, dèiligidh sinn ris a’ ghleoc; bidh feum againn air nas fhaide air adhart (gu dearbh, san eisimpleir seo cha bhith feum againn air :)

Cuid de chòd #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
}

Mar a chì thu gu furasta, tha an gnìomh a’ gairm $ MyToken agus $MyChatID, a chaidh a chòdachadh gu cruaidh na bu thràithe.

Chan eil feum air seo a dhèanamh, agus ma tha $MyToken mar aon airson gach bot, atharraichidh $ MyChatID a rèir a’ chat.

Ach, leis gur e eisimpleir a tha seo, cha leig sinn seachad e airson a-nis.

Leis nach e raon a th’ ann an $MyVocabExample4AsArray, ged a tha e glè choltach ri fear, an uairsin chan urrainn dhut dìreach a ghabhail iarraidh a fad.

A-rithist feumaidh sinn rudeigin a dhèanamh nach gabh a dhèanamh - paraisiut chan ann a rèir a 'chòd - gabh e agus cunnt

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

thuaiream feart inntinneach. Canaidh sinn gu bheil sinn airson 0 no 1 fhaighinn (chan eil againn ach dà eileamaid san raon). Nuair a shuidhicheas sinn crìochan 0..1, am faigh sinn “1”?
chan fhaigh - chan fhaigh sinn e, tha eisimpleir sònraichte againn Eisimpleir 2: Faigh àireamh-sluaigh air thuaiream eadar 0 agus 99 Get-Random -Maximum 100
Mar sin, airson 0..1 feumaidh sinn am meud 0..2 a shuidheachadh, leis an àireamh eileamaid as àirde = 1.

7. Giullachd teachdaireachdan a tha a 'tighinn a-steach agus an fhad ciudha as àirde

Càite an do stad sinn na bu thràithe? fhuair sinn an caochladair $MyMessageGet
agus $Content4Pars01 air fhaighinn bhuaithe, agus tha ùidh againn anns na h-eileamaidean den t-sreath thoraidhean Content4Pars01.

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

Nach cuir sinn am bot / message10, /message11, /message12, / facal agus a-rithist / facal agus / hello.
Chì sinn na fhuair sinn:

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

Rachamaid tro gach rud a gheibhear agus cuir sinn freagairt ma bha an teachdaireachd /word
tha cùis togail, rud a tha cuid ag ràdh ma tha - eile, ris an canar ann an slige chumhachdan tro suidse. Aig an aon àm, tha an còd gu h-ìosal a 'cleachdadh an -wildcard key, a tha gu tur neo-riatanach agus fiù' s cronail.

Cuid de chòd #7.1

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

Ruithidh sinn an sgriobt turas no dhà. Gheibh sinn an aon fhacal dà uair airson gach oidhirp cur gu bàs, gu sònraichte ma rinn sinn mearachd ann a bhith a’ buileachadh air thuaiream.

Ach stad. Cha do chuir sinn / facal a-rithist, mar sin carson a tha an teachdaireachd ga phròiseas a-rithist?

Tha fad crìochnachaidh aig a’ chiudha airson teachdaireachdan a chuir chun bot (100 no 200 teachdaireachd, tha mi a’ smaoineachadh) agus feumar a ghlanadh le làimh.

Tha seo gu dearbh air a mhìneachadh anns na sgrìobhainnean, ach feumaidh tu a leughadh!

Anns a' chùis seo, feumaidh sinn am paramadair ?chat_id, agus &timeout, &limit, &parse_mode=HTML agus &disable_web_page_preview=chan eil feum air fìor fhathast.

Sgrìobhainnean airson tha telegram api an seo
Tha e ag ràdh ann an geal agus Beurla:
Comharraiche a’ chiad ùrachadh ri thilleadh. Feumaidh a bhith nas motha na aon na an ìre as àirde am measg aithnichearan ùrachaidhean a fhuaireadh roimhe. Gu gnàthach, ùrachaidhean a’ tòiseachadh leis an fheadhainn as tràithe
neo-dhaingnichte ùrachadh air a thilleadh. Thathas den bheachd gu bheil ùrachadh air a dhearbhadh cho luath ‘s a thèid getUpdates a ghairm le faidhle co-rèiteachadh àrd-ìre na an update_id aige. Faodar an cothromachadh àicheil a shònrachadh gus ùrachaidhean fhaighinn air ais bho -offset update bho dheireadh ciudha nan ùrachaidhean. Thèid a h-uile ùrachadh roimhe a dhìochuimhneachadh.

Bheir sinn sùil air:

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

Tha, agus ath-shuidhichidh sinn e agus ath-sgrìobhaidh sinn an gnìomh beagan. Tha dà roghainn againn - cuir seachad an teachdaireachd gu lèir chun ghnìomh agus pròiseas e gu tur san ghnìomh, no thoir seachad ach ID na teachdaireachd agus ath-shuidhich e. Mar eisimpleir, tha an dàrna fear a 'coimhead nas sìmplidh.

Roimhe sin, bha coltas ar sreang ceiste “a h-uile teachdaireachd” againn

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

agus bidh e coltach

$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 

Chan eil duine a’ toirmeasg dhut a h-uile teachdaireachd fhaighinn an-toiseach, an làimhseachadh, agus dìreach às deidh iarrtas giollachd soirbheachail neo-dhearbhte -> dearbhte.

Carson a tha e ciallach fios a chuir gu dearbhadh às deidh a h-uile giollachd a bhith deiseil? Tha e comasach fàilligeadh ann am meadhan cur gu bàs, agus ma tha, mar eisimpleir de chatbot an-asgaidh, nach eil dad sònraichte ann a bhith a’ call aon teachdaireachd, an uairsin ma tha thu a’ giullachd tuarastal no gnothach cairt cuideigin, dh’ fhaodadh an toradh a bhith nas miosa.

Sreath de chòd no dhà eile

$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. An àite co-dhùnadh

Gnìomhan bunaiteach - leugh teachdaireachdan, ath-shuidheachadh ciudha, leughadh bho fhaidhle agus sgrìobhadh gu faidhle air a dhèanamh agus air a shealltainn.

Chan eil ach ceithir rudan ri dhèanamh:

  • a’ cur am freagairt cheart gu iarrtas ann an cabadaich
  • a’ cur freagairt gu cabadaich sam bith ris an deach am bot a chur ris
  • cur an gnìomh còd ann an lùb
  • a' cur air bhog bot bho chlàr-ama nan uinneagan.

Tha na gnìomhan sin uile sìmplidh agus faodar an coileanadh gu furasta le bhith a’ leughadh na sgrìobhainnean mu pharaimearan leithid
Set-ExecutionPolicy Gun bhacadh agus -Seach-rathad Poileasaidh Cur-an-gnìomh
cearcall an fhoirm

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

Mòran taing dhan a h-uile duine a leugh.

Source: www.habr.com

Cuir beachd ann