Teimpléad le haghaidh bot teileagraim simplí do leanaí scoile i ngráid 7-9 ag baint úsáide as Powershell

Le linn comhráite le cara, d'fhoghlaim mé go tobann nach múintear cláir ar chor ar bith do leanaí i ngráid 8-10 ina scoil. Word, Excel agus gach rud. Gan lógó, ní fiú Pascal, ní fiú VBA le haghaidh Excel.

Bhí an-iontas orm, d'oscail mé an tIdirlíon agus thosaigh mé ag léamh -
Is é ceann de na tascanna atá ag scoil speisialaithe ná oideachas a chur chun cinn do ghlúin nua a chomhlíonann coinníollacha na sochaí faisnéise ina leibhéal forbartha agus stíl mhaireachtála.
Tabharfaidh an cúrsa seo deis do mhic léinn a gcuid eolais ar bhunghnéithe theanga ríomhchlárúcháin Pascal a chomhdhlúthú go praiticiúil. (ón gclár roinnt giomnáisiam do 2017)

Sa deireadh, chinn mé cúpla uair an chloig a chaitheamh agus sampla a sceitseáil de “conas bot simplí a chruthú do leanaí scoile.”

Anseo thíos an gearrtha tá conas bot simplí eile a scríobh i Powershell agus é a dhéanamh ag obair gan sreang gréasáin, IPanna bán, freastalaithe tiomnaithe, meaisíní fíorúla imscaradh sa scamall, agus mar sin de - ar ríomhaire baile rialta le Windows rialta.

TLDR: Alt leadránach eile le hearráidí gramadaí agus fíorasacha, gan faic le léamh, gan greann, gan pictiúir.

Níl aon rud nua san alt, tá beagnach gach rud a scríobhadh roimhe seo ar Habré cheana féin, mar shampla in ailt Treoracha: Conas róbónna a chruthú i Telegram и Telegram bot do riarthóir córais.
Thairis sin, tá an t-alt iomarcach d’aon ghnó ionas nach ndéantar tagairt do litríocht oideachais gach uair. Níl aon tagairtí do Gang 4, PowerShell Deep Dives nó, abair, Na 5 Philéir de Chreat Dea-Ailtireachta AWS sa téacs.

In ionad réamhrá, is féidir leat scipeáil

Thig leat skipSa bhliain 2006, d'eisigh Microsoft PowerShell 1.0 le haghaidh Windows XP, Vista, agus Server 2003 mar a bhí. Ar bhealaí áirithe, chuir sé in ionad rudaí mar scripteanna cmdbat, scripteanna vb, Windows Script Host agus JScript.

Fiú amháin anois, ní féidir PowerShell a mheas ach mar an chéad chéim eile tar éis na roghanna Lógó, in ionad Delphi (nó rud éigin níos sine) is dócha a úsáidtear go fóill, in ainneoin go bhfuil lúba, ranganna, feidhmeanna, glaonna MS GUI ann, Comhtháthú git agus mar sin de.

Is annamh a úsáidtear Powershell; ní féidir leat teacht ar é ach i bhfoirm PowerShell Core, VMware vSphere PowerCLI, Azure PowerShell, MS Exchange, Cumraíocht Stáit Inmhianta, Rochtain Gréasáin PowerShell agus dosaen nó mar sin de chláir agus feidhmeanna níos annamha. B'fhéidir go bhfaighidh sé an dara gaoth leis an scaoileadh WSL2, ach níl sé go díreach.

Tá trí bhuntáiste mór ag Powershell freisin:

  1. Tá sé sách simplí, tá go leor litríochta agus samplaí faoi, agus fiú i Rúisis, mar shampla, alt faoi Foreach - as an leabhar PowerShell go domhain - faoin difríocht ( ) agus {}
  2. Téann sé leis an eagarthóir ISE, san áireamh le Windows. Tá fiú debugger de chineál éigin ann.
  3. Is furasta glaoch uaidh comhpháirteanna chun comhéadan grafach a thógáil.

0. Ullmhúchán.

Ní mór dúinn:

  • Windows PC (tá Windows 10 agam)
  • Rochtain Idirlín de shaghas éigin ar a laghad (trí NAT mar shampla)
  • Dóibh siúd a bhfuil rochtain theoranta acu ar theileagram - freegate suiteáilte agus cumraithe sa bhrabhsálaí, i gcásanna áirithe deacra, mar aon le Symple DNS Crypt
  • Cliant teileagraim oibre a bheith agat ar do ghuthán
  • Tuiscint ar na bunghnéithe - cad is athróg, eagar, lúb.

Osclaíodh agus léigh altanna - Treoracha: Conas róbónna a chruthú i Telegram и Telegram bot do riarthóir córais

1. Cruthaimis bot tástála eile.

Ós rud é go bhfuil a fhios seo ag gach duine cheana féin, agus go bhfuil sé tar éis tarlú cheana féin, is féidir leat é a scipeáil freisinMar a dúradh san alt thuas - Ar an gcéad dul síos, bot do Telegram - tá sé fós ina fheidhmchlár ag rith ar do thaobh agus ag déanamh iarratais chuig Telegram Bot API. Thairis sin, tá an API soiléir - faigheann an bot rochtain ar URL ar leith le paraiméadair, agus freagraíonn Telegram le réad JSON.

Fadhbanna gaolmhara: má thógann tú cód éigin ó réad JSON ar bhealach anaithnid éigin agus má sheolann tú é ar bhealach éigin lena fhorghníomhú (ní chun críche), déanfar an cód a fhorghníomhú duit.

Déantar cur síos ar an bpróiseas cruthaithe in dhá alt thuas, ach déanaim arís: i teileagram osclaíonn muid teagmhálacha, lorg @botfather, inis dó / newbot, cruthaigh bot Botfortest12344321, glaoigh air Mynext1234bot, agus faighimid teachtaireacht le eochair uathúil an foirm 1234544311:AbcDefNNNNNNNNNNNNNN

Tabhair aire don eochair agus ná tabhair leat é!

Ansin is féidir leat an bot a chumrú, mar shampla, toirmeasc a chur leis é a chur le grúpaí, ach sna chéad chéimeanna níl sé seo riachtanach.

Iarraimis “/mybot” ar BotFather agus coigeartóimid na socruithe mura dtaitníonn rud éigin linn.

Osclóidh muid na teagmhálaithe arís, aimsigh @Botfortest12344321 ann (tá sé éigeantach an cuardach a thosú le @), cliceáil “tosaigh” agus scríobh chuig an bot “/Glory to the robots.” Tá an / comhartha ag teastáil, ní gá comharthaí athfhriotail.
Ní fhreagróidh an bot, ar ndóigh, rud ar bith.

A ligean ar a sheiceáil go bhfuil an bot cruthaithe agus é a oscailt.

api.telegram.org/bot1234544311:AbcDefNNNNNNNNNNNNNNNN/getMe
áit a bhfuil 1234544311:AbcDefNNNNNNNNNNNNNN an eochair a fuarthas roimhe seo,
agus faigh líne mar
{ "ceart go leor":true, "toradh":{"" }}

Tá an chéad abairt rúnda (token) againn. Anois ní mór dúinn an dara uimhir rúnda a fháil amach - ID an chomhrá leis an bot. Tá gach comhrá, grúpa, etc. aonair agus tá a uimhir féin (uaireanta le lúide - do ghrúpaí oscailte). Chun an uimhir seo a fháil, ní mór dúinn an seoladh a iarraidh sa bhrabhsálaí (go deimhin, níl sé riachtanach sa bhrabhsálaí, ach le tuiscint níos fearr a fháil is féidir leat tosú leis) (áit arb é 1234544311:NNNNNNNNNN do chomhartha

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

agus faigh freagra mar

{ "ceart go leor": fíor, "toradh":[{ "update_id":...,... comhrá" :{ " id ":123456789

Teastaíonn chat_id uainn.

Déanaimis seiceáil gur féidir linn scríobh chuig an gcomhrá de láimh: cuir glaoch ar an seoladh ón mbrabhsálaí

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

Má fhaigheann tú teachtaireacht ó bot i do chomhrá, ceart go leor, bogann tú ar aghaidh go dtí an chéad chéim eile.

Ar an mbealach seo (tríd an mbrabhsálaí) is féidir leat a sheiceáil i gcónaí an bhfuil fadhbanna leis an nginiúint nasc, nó an bhfuil rud éigin i bhfolach áit éigin agus nach n-oibríonn sé.

Cad is gá duit a bheith ar eolas roimh leanúint ar aghaidh ag léamh

Tá roinnt cineálacha comhráite grúpa ag Telegram (oscailte, dúnta). Maidir leis na comhráite seo, tá cuid de na feidhmeanna (mar shampla, id) difriúil, rud a chruthaíonn roinnt fadhbanna uaireanta.

Glacaimid leis gurb é deireadh 2019 é, agus fiú laoch ár gcuid ama, an Man-Ceolfhoireann aitheanta (riarthóir, dlíodóir, speisialtóir slándála faisnéise, ríomhchláraitheoir agus go praiticiúil MVP) Evgeniy V. idirdhealú idir an athróg $i agus eagar, Tá máistreacht lúb, breathnú ar an chéad chúpla bliain eile máistreacht Chocolatey, agus ansin Próiseáil comhthreomhar le PowerShell и ForEach-Réad Comhthreomhar tiocfaidh sé.

1. Déanaimid smaoineamh ar cad a dhéanfaidh ár bot

Ní raibh aon smaointe agam, bhí orm smaoineamh. Tá bot-leabhar nótaí scríofa agam cheana féin. Ní raibh mé ag iarraidh bot a dhéanamh "a sheolann rud éigin áit éigin." Teastaíonn cárta creidmheasa uait chun nascadh le Azure, ach cad as a bhfaigheann an mac léinn é? Ba chóir a thabhairt faoi deara nach bhfuil gach rud chomh dona: tugann na príomh-scamaill tréimhse tástála de chineál éigin saor in aisce (ach fós tá uimhir chárta creidmheasa ag teastáil uait - agus is cosúil go gcuirfear dollar chun dochair uaidh. Ní cuimhin liom más rud é. tugadh ar ais é níos déanaí.)

Gan AI ML níl sé chomh suimiúil fíodóir bot-bocht-fhile a dhéanamh.

Chinn mé bot a dhéanamh a chuirfidh focail Bhéarla as an bhfoclóir i gcuimhne dom (nó nach bhfuil).
Chun fiddling leis an mbunachar sonraí a sheachaint, stórálfar an foclóir i gcomhad téacs agus déanfar é a nuashonrú de láimh.
Sa chás seo, is é an tasc ná bunghnéithe na hoibre a thaispeáint, agus gan táirge críochnaithe go páirteach ar a laghad a dhéanamh.

2. Ag iarraidh cad é agus conas don chéad uair

Cruthaímid fillteán C:poshtranslate
Gcéad dul síos, a ligean ar a fheiceáil cén cineál powershell atá againn, a ligean ar sheoladh ISE trí tosaithe-reáchtáil
powershell ise
nó faigh Powershell ISE i gcláir suiteáilte.
Tar éis é a sheoladh, osclófar an gnátheagarthóir aithnidiúil; mura bhfuil réimse téacs ann, is féidir leat cliceáil i gcónaí ar “Comhad - cruthaigh nua”.

Breathnaímid ar an leagan de powershell - scríobh sa réimse téacs:

get-host 

agus brúigh F5.

Tairgfidh Powershell sábháil - “Sábhálfar an script atá tú ar tí a rith.”, aontaímid, agus sábhálfaimid an comhad ó powershell leis an ainm in C: poshtranslate myfirstbotBT100.

Tar éis é a sheoladh, faighimid tábla sonraí sa fhuinneog téacs íochtair:

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

Tá 5.1 rud agam, is leor sin. Má tá sean Windows 7/8 agat, ní mór an beart é - cé go mbeidh gá PowerShell a nuashonrú go leagan 5 - m.sh. treoracha.

Cineál Get-Date sa líne ordaithe thíos, brúigh Iontráil, féach ar an am, téigh go dtí an fillteán fréimhe leis an ordú
cd
agus glan an scáileán leis an ordú cls (ní gá, ní gá duit rm a úsáid)

Anois, déanaimis seiceáil cad a oibríonn agus conas - a ligean ar scríobh ní fiú an cód, ach dhá líne, agus iarracht a dhéanamh a thuiscint cad a dhéanann siad. Déanaimis trácht ar an líne le get-host leis an tsiombail # agus cuir beagán leis.

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

(Is é an rud atá suimiúil ná go bhfuil dhá dhosaen rogha sa liosta anuas formáidithe cód ar Habré - ach níl Powershell ann. Tá Dos ann. Tá Perl ann.)

Agus déanaimis an cód a reáchtáil trí bhrú F5 nó ">" ón GUI.

Faighimid an t-aschur seo a leanas:

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

Breathnaímis anois ar an dá líne seo agus ar roinnt pointí suimiúla ionas nach bhfillfimid air seo amach anseo.

Murab ionann agus Pascal (agus ní hamháin), déanann PowerShell féin iarracht a dhéanamh amach cén cineál atá le sannadh d'athróg; tá níos mó sonraí faoi seo scríofa san alt Clár oideachais maidir le clóscríobh i dteangacha ríomhchlárúcháin
Mar sin, trí athróg $TimeNow a chruthú agus luach an dáta agus an ama reatha (Get-Date) a shannadh dó, ní gá dúinn a bheith buartha rómhór faoin gcineál sonraí a bheidh ann.

Fíor, d'fhéadfadh an t-aineolas seo ghortú níos déanaí, ach sin níos déanaí. Anseo thíos sa téacs beidh sampla.
A ligean ar a fheiceáil cad a fuair muid. Déanaimis é a rith (ar an líne ordaithe)

$TimeNow | Get-member

agus faigh leathanach de théacs dothuigthe

Sampla de théacs dothuigthe uimhir 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 fheiceann tú, cruthaíodh athróg de chineál TypeName: System.DateTime le sraith modhanna (de réir mar is féidir linn a dhéanamh leis an oibiacht athraitheach seo) agus airíonna.

A ligean ar glaoch $TimeNow.DayOfYear — faighimid uimhir an lae den bhliain.
A ligean ar glaoch $TimeNow.DayOfYear | Get-Member - gheobhaimid TypeName: System.Int32 agus grúpa modhanna.
A ligean ar glaoch $TimeNow.ToUniversalTime() - agus faigh an t-am in UTC

Dífhabhtóir

Uaireanta tarlaíonn sé go bhfuil sé riachtanach clár a fhorghníomhú suas go dtí líne áirithe agus staid an chláir a fheiceáil ag an nóiméad sin. Chun na críche sin, tá feidhm Debug ag ISE - scoránaigh pointe sos
Cuir brisphointe áit éigin sa lár, rith an dá líne seo agus féach cad é an chuma atá ar an sos.

3. An idirghníomhaíocht leis an bot Telegram a thuiscint

Ar ndóigh, scríobhadh fiú níos mó litríochta ar idirghníomhaíocht leis an bot, le gach getpush agus mar sin de, ach is féidir ceist na teoirice a mheas go roghnach.

Is gá inár gcás:

  • Foghlaim conas rud éigin a sheoladh i gcomhfhreagras
  • Foghlaim conas rud éigin a fháil ó chomhfhreagras

3.1 Foghlaim conas rud éigin a sheoladh i gcomhfhreagras agus fáil uaidh

Cód beag - cuid 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 i gCónaidhm na Rúise ag an bpointe seo a fháil againn an earráid Ní féidir ceangal leis an bhfreastalaí iargúlta.

Nó ní fhaighimid é - braitheann sé ar an oibreoir teileachumarsáide agus cibé an bhfuil an seachfhreastalaí cumraithe agus ag obair
Bhuel, níl fágtha ach seachfhreastalaí a chur leis. Tabhair faoi deara le do thoil go bhfuil úsáid a bhaint as seachfhreastalaí neamhchriptithe agus calaoiseach go ginearálta thar a bheith contúirteach do do shláinte.

Níl an tasc chun seachfhreastalaí oibre a aimsiú an-deacair - oibríonn an chuid is mó de na seachvótálaithe http foilsithe. Sílim gur oibrigh an cúigiú ceann dom.

Comhréir ag baint úsáide as seachfhreastalaí:

Invoke-WebRequest -Uri $URL4SEND -Proxy $MyProxy

Má fhaigheann tú teachtaireacht i do chomhrá le bot, ansin tá gach rud go breá, is féidir leat dul ar aghaidh. Mura bhfuil, lean ar aghaidh ag dífhabhtú.

Is féidir leat a fheiceáil cad a dhéanann do teaghrán $URL4SEND agus déan iarracht é a iarraidh sa bhrabhsálaí, mar seo:

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

3.2. D’fhoghlaimíomar conas “rud éigin” a scríobh sa chomhrá, anois déanaimis iarracht é a léamh

Cuirimis 4 líne eile leis agus féachfaimid cad atá istigh tríd | 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

Cuirtear an rud is suimiúla ar fáil dúinn

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

Feicfimid cad atá iontu:

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

Má oibríonn gach rud duit, gheobhaidh tú líne fhada mar:

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

Go fortunately, san alt a foilsíodh roimhe seo Telegram bot do riarthóir córais an líne seo (Sea, de réir $MyMessageGet.RawContent | is é System.String an ball a fháil), tá sé díchumtha cheana féin.

4. Próiseáil an méid a fhaigheann tú (tá a fhios againn cheana féin conas rud éigin a sheoladh)

Mar a scríobhadh cheana anseo, luíonn na rudaí is gá san ábhar. A ligean ar ghlacadh le breathnú níos dlúithe ar sé.

Ar dtús, scríobhfaimid cúpla frása eile chuig an bot ón gcomhéadan gréasáin nó ón bhfón

/message1
/message2
/message3

agus féach tríd an mbrabhsálaí ag an seoladh a cruthaíodh san athróg $URLGET.

Feicfimid rud éigin 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 

An rud atá ann? Roinnt réad casta as eagair rudaí ina bhfuil aitheantóir teachtaireachta ceann go ceann, aitheantóir comhrá, aitheantóir seolta agus go leor faisnéise eile.

Mar sin féin, ní gá dúinn a dhéanamh amach “cén cineál réad é seo” - tá cuid den obair déanta dúinn cheana féin. Féachaimis cad atá istigh:

teachtaireachtaí faighte nó cuid 4 a léamh

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. Cad ba cheart dúinn a dhéanamh faoi anois?

Sábhálamar an comhad mar thoradh air faoin ainm myfirstbotBT105 nó cibé rud is fearr leat, athraigh an teideal agus déan trácht ar an gcód scríofa cheana féin trí

<#start comment 105 end comment 105#>

Anois, ní mór dúinn cinneadh a dhéanamh nuair a fháil ar an foclóir (go maith, i gcás - ar diosca i gcomhad) agus conas a bheidh sé cuma.

Ar ndóigh, is féidir leat foclóir ollmhór a scríobh ceart i dtéacs na scripte, ach tá sé seo go hiomlán in aice leis an bpointe.
Mar sin feicimis cad is féidir le powershell oibriú leis de ghnáth.
Go ginearálta, is cuma leis cén comhad a n-oibreoidh sé leis, is cuma linne.
Tá rogha againn: txt (is féidir leat, ach cén fáth), csv, xml.
An féidir linn féachaint ar gach duine?
Cruthaimis rang MyVocabClassExample1 agus athróg $MyVocabExample1
Tugaim faoi deara go bhfuil an rang scríofa gan $

roinnt có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

Déanaimis iarracht é seo a scríobh isteach i gcomhaid ag baint úsáide as sampla.

Cód éigin #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 faighimid earráid ar an líne As-Comhad -FilePath $MyFilenameExample01 -InputObject -Append $MyVocabExample2.

Níl sé ag iarraidh a chur leis, ah-ah, cén náire.

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

A ligean ar a fheiceáil cad a tharlaíonn. Amharc téacs iontach - ach conas é a onnmhairiú ar ais? Ar cheart dom deighilteoirí téacs de chineál éigin a thabhairt isteach, amhail camóga?

Agus sa deireadh faigheann tú “comhad luachanna camóg-scartha (CSV) A STOP FAN.
#

$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 is furasta a fheiceáil, ní dhéantar idirdhealú ar leith ar MS de bharr a loighic; le haghaidh nós imeachta comhchosúil, i gcás amháin úsáidtear -FilePath, i gcás eile -Cosán.

Ina theannta sin, sa tríú comhad imithe an teanga Rúisis, sa cheathrú comhad d'éirigh sé amach ... bhuel, tharla rud éigin. #TYPE System.Object[] 00
# “Count”,, “Fad”, “FadFad”, “Rang”, “SyncRoot”, “IsReadOnly”, “IsFixedSize”,”IsSyncchronized”
#
Déanaimis é a athscríobh beagán:

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

Is cosúil gur chabhraigh sé, ach fós ní maith liom an fhormáid.

Ní maith liom ach go háirithe nach féidir liom línte ó rud a chur isteach i gcomhad go díreach.
Dála an scéil, ó thosaigh muid ag scríobh chuig comhaid, an féidir linn logáil tosaithe a choinneáil? Tá am againn mar athróg, is féidir linn ainm an chomhaid a shocrú.

Fíor, níl aon rud le scríobh fós, ach is féidir leat smaoineamh ar an mbealach is fearr chun na logaí a rothlú.
Déanaimis iarracht xml faoi láthair.

Roinnt 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

Tá go leor buntáistí ag baint le heaspórtáil go xml - inléiteacht, onnmhairiú an ruda ar fad, agus ní gá breisluach a dhéanamh.

Déanaimis iarracht Léigh comhad xml.

Léamh beag ó xml

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

Fillfimid ar an tasc. Scríobhamar comhad tástála, léigh é, tá an fhormáid stórála soiléir, más gá, is féidir leat eagarthóir comhad beag ar leithligh a scríobh chun línte a chur leis agus a scriosadh.

Lig dom i gcuimhne duit go raibh an tasc a dhéanamh bot oiliúna beag.

Formáid oibre: Cuirim an t-ordú “sampla” chuig an bot, seolann an bot focal agus tras-scríobh a roghnaíodh go randamach chugam, agus tar éis 10 soicind seolann sé aistriúchán agus nóta tráchta chugam. Tá a fhios againn conas orduithe a léamh, ba mhaith linn freisin a fháil amach conas seachfhreastalaí a roghnú agus a sheiceáil go huathoibríoch, agus cuntair teachtaireachtaí a athshocrú go dtí dearmad.

Déanaimis trácht ar gach rud a luadh cheana mar neamhriachtanach, déan trácht ar na samplaí nach bhfuil gá leo anois le txt agus csv, agus sábháil an comhad mar leagan B106

Ó sea. Seolfaimid rud éigin chuig an bot arís.

6. Seol ó fheidhmeanna agus níos mó

Sula ndéantar an fáiltiú a phróiseáil, ní mór duit feidhm a chruthú chun “rud éigin ar a laghad” a sheoladh seachas teachtaireacht tástála.

Ar ndóigh, sa sampla ní bheidh againn ach seoladh amháin agus próiseáil amháin, ach cad más gá dúinn an rud céanna a dhéanamh arís agus arís eile?

Tá sé níos éasca feidhm a scríobh. Mar sin, tá athróg cineál oibiachta againn $MyVocabExample4AsArray, léite ón gcomhad, i bhfoirm sraithe atá chomh mór le dhá eilimint.
Léimid.

Ag an am céanna, déileálfaimid leis an gclog; beidh sé de dhíth orainn níos déanaí (go deimhin, sa sampla seo ní bheidh sé ag teastáil uainn :)

Cód éigin #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 is féidir leat a fheiceáil go héasca, glaonn an fheidhm $MyToken agus $MyChatID, a bhí códaithe crua níos luaithe.

Ní gá é seo a dhéanamh, agus más rud é $MyToken do gach bot, athróidh $MyChatID ag brath ar an gcomhrá.

Mar sin féin, ós rud é gur sampla é seo, déanfaimid neamhaird de anois.

Ós rud é nach eagar é $MyVocabExample4AsArray, cé go bhfuil sé an-chosúil le ceann, mar sin ní féidir leat a ghlacadh díreach iarraidh a fhad.

Arís eile beidh orainn rud éigin a dhéanamh nach féidir a dhéanamh - paraisiúit ní de réir an chóid - é a ghlacadh agus a chomhaireamh

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

Randamach gné spéisiúil. Ligean le rá ba mhaith linn a fháil 0 nó 1 (ní mór dúinn ach dhá eilimint san eagar). Agus teorainneacha 0..1 á leagan síos againn, an bhfaighfimid “1”?
ní bhfaighidh - ní bhfaighidh muid é, tá sampla speisialta againn Sampla 2: Faigh slánuimhir randamach idir 0 agus 99 Faigh-Random - Uasmhéid 100
Mar sin, le haghaidh 0..1 ní mór dúinn an méid 0..2 a shocrú, leis an uimhir eilimint uasta = 1.

7. Próiseáil teachtaireachtaí ag teacht isteach agus fad scuaine uasta

Cár stop muid níos luaithe? tá an athróg faighte againn $MyMessageGet
agus $Content4Pars01 faighte uaidh, a bhfuil suim againn sna gnéithe den eagar torthaí Content4Pars01.

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

Seolfaimid an bot /message10, /message11, /message12, /focal agus arís /focal agus /hello.
Feicfimid cad a fuair muid:

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

Rachaimid trí gach rud a fhaightear agus seolfaimid freagra más /focal é an teachtaireacht
tugtar an cás tógála, rud a dtugann cuid acu dá mbeadh-eileif, ar a dtugtar i powershell tríd an lasc. Ag an am céanna, úsáideann an cód thíos an eochair -wildcard, atá go hiomlán gan ghá agus fiú díobhálach.

Cód éigin #7.1

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

Rithfimid an script cúpla uair. Gheobhaidh muid an focal céanna faoi dhó le haghaidh gach iarracht forghníomhaithe, go háirithe má rinne muid botún maidir le cur i bhfeidhm randamach.

Ach stop. Níor sheol muid /focal arís, mar sin cén fáth a bhfuil an teachtaireacht á próiseáil arís?

Tá fad teoranta ag an scuaine chun teachtaireachtaí a sheoladh chuig an bot (100 nó 200 teachtaireacht, sílim) agus ní mór é a ghlanadh de láimh.

Tá cur síos air seo ar ndóigh sna doiciméid, ach caithfidh tú é a léamh!

Sa chás seo, tá an paraiméadar ?chat_id, agus &timeout, &limit, &parse_mode=HTML agus &disable_web_page_preview=fíor ag teastáil uainn go fóill.

Doiciméadú le haghaidh Tá telegram api anseo
Deir sé i mbán agus i mBéarla:
Aitheantóir an chéad nuashonrú le tabhairt ar ais. Ní mór go mbeadh sé níos mó ná ceann amháin ná an ceann is airde i measc aitheantóirí nuashonruithe a fuarthas roimhe seo. De réir réamhshocraithe, nuashonruithe ag tosú leis an gceann is luaithe
neamhdhearbhaithe nuashonruithe ar ais. Meastar go bhfuil nuashonrú deimhnithe chomh luath agus a ghlaoitear getUpdates le fhritháireamh níos airde ná a nuashonrú_id. Is féidir an fhritháireamh diúltach a shonrú chun nuashonruithe a aisghabháil ag tosú ó -offset update ó dheireadh na scuaine nuashonruithe. Déanfar dearmad ar gach nuashonrú roimhe seo.

Breathnaímid ar:

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

Sea, agus athshocróimid é agus athscríobhfaimid an fheidhm beagán. Tá dhá rogha againn - an teachtaireacht iomlán a chur ar aghaidh chuig an bhfeidhm agus é a phróiseáil go hiomlán san fheidhm, nó ná tabhair ach ID na teachtaireachta agus athshocraigh í. Mar shampla, breathnaíonn an dara ceann níos simplí.

Roimhe seo, bhí cuma ar ár teaghrán ceisteanna “gach teachtaireacht”.

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

agus beidh cuma

$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 

Ní chuireann aon duine cosc ​​ort gach teachtaireacht a fháil ar dtús, iad a phróiseáil, agus go dtí go n-éireoidh le próiseáil iarratas neamhdhearbhaithe -> deimhnithe.

Cén fáth a bhfuil ciall le dearbhú a ghlaoch tar éis an phróiseáil go léir a bheith críochnaithe? Is féidir teip a dhéanamh i lár an fhorghníomhaithe, agus más rud é mar shampla comhrá saor in aisce, níl aon rud speisialta in easnamh ar theachtaireacht amháin, ansin má tá tuarastal nó idirbheart cárta duine éigin á phróiseáil agat, d'fhéadfadh an toradh a bheith níos measa.

Cúpla líne eile de chód

$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. In ionad conclúid

Feidhmeanna bunúsacha - teachtaireachtaí a léamh, scuaine a athshocrú, léamh ó chomhad agus scríobh go comhad a dhéanamh agus a thaispeáint.

Níl ach ceithre rud fágtha le déanamh:

  • an freagra ceart ar iarratas a sheoladh sa chomhrá
  • ag seoladh freagra chuig AON chomhrá ar cuireadh an bot leis
  • cód a fhorghníomhú i lúb
  • ag seoladh bot ó sceidealóir na fuinneoga.

Tá na tascanna seo go léir simplí agus is féidir iad a chur i gcrích go héasca trí na doiciméid a léamh faoi pharaiméadair mar
Set-ExecutionPolicy Neamhshrianta agus -ExecutionPolicy Seachbhóthar
timthriall na foirme

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

Go raibh maith agaibh go léir as léamh.

Foinse: will.com

Add a comment