Powershell භාවිතයෙන් 7-9 ශ්‍රේණිවල පාසල් ළමුන් සඳහා සරල විදුලි පණිවුඩ බොට් සඳහා සැකිල්ල

මිතුරෙකු සමඟ සංවාදයකදී, ඔවුන්ගේ පාසලේ 8-10 ශ්‍රේණිවල ළමයින්ට ක්‍රමලේඛනය කිසිසේත් උගන්වන්නේ නැති බව මම හදිසියේම දැන සිටියෙමි. Word, Excel සහ සියල්ල. Excel සඳහා ලාංඡනය, පැස්කල්, VBA පවා නැත.

මම පුදුමයට පත් වී අන්තර්ජාලය විවෘත කර කියවීමට පටන් ගතිමි -
විශේෂිත පාසලක එක් කර්තව්‍යයක් වන්නේ එහි සංවර්ධන මට්ටම සහ ජීවන රටාව තුළ තොරතුරු සමාජයේ කොන්දේසි සපුරාලන නව පරම්පරාවක අධ්‍යාපනය ප්‍රවර්ධනය කිරීමයි.
මෙම පා course මාලාව සිසුන්ට පැස්කල් ක්‍රමලේඛන භාෂාවේ මූලික නිර්මිතයන් පිළිබඳ ඔවුන්ගේ දැනුම ප්‍රායෝගිකව තහවුරු කර ගැනීමට ඉඩ සලසයි. (2017 සඳහා සමහර ව්‍යායාම ශාලාවක වැඩසටහනෙන්)

අවසානයේදී, මම පැය කිහිපයක් ගත කර “පාසල් ළමුන් සඳහා සරල බොට් එකක් සාදා ගන්නේ කෙසේද” පිළිබඳ උදාහරණයක් සටහන් කිරීමට තීරණය කළෙමි.

කප්පාදුවට පහළින් ඇත්තේ Powershell හි තවත් සරල bot එකක් ලියා එය webhook, සුදු IPs, කැපවූ සේවාදායකයන්, වලාකුළෙහි යොදවා ඇති අතථ්‍ය යන්ත්‍ර සහ යනාදිය නොමැතිව ක්‍රියා කරන්නේ කෙසේද යන්නයි - සාමාන්‍ය වින්ඩෝස් සහිත සාමාන්‍ය ගෘහස්ථ පරිගණකයක.

TLDR: ව්‍යාකරණ සහ සත්‍ය දෝෂ සහිත තවත් නීරස ලිපියක්, කියවීමට කිසිවක් නැත, හාස්‍යය නැත, පින්තූර නැත.

ලිපියේ අලුත් දෙයක් නැත, පෙර ලියා ඇති සෑම දෙයක්ම පාහේ දැනටමත් Habré හි ඇත, උදාහරණයක් ලෙස ලිපිවල උපදෙස්: Telegram හි bots නිර්මාණය කරන්නේ කෙසේද? и පද්ධති පරිපාලක සඳහා ටෙලිග්‍රාම් බොට්.
එපමණක් නොව, සෑම අවස්ථාවකදීම අධ්යාපනික සාහිත්යය වෙත යොමු නොකිරීමට ලිපිය හිතාමතාම අතිරික්ත වේ. පෙළෙහි Gang 4, PowerShell Deep Dives හෝ, AWS හොඳින් වාස්තුගත රාමුවේ 5 කුළුණු ගැන කිසිදු සඳහනක් නොමැත.

පෙරවදනක් වෙනුවට, ඔබට මඟ හැරිය හැක

මඟ හැරීමට නිදහස් වන්න2006 දී Microsoft විසින් එවකට Windows XP, Vista සහ Server 1.0 සඳහා PowerShell 2003 නිකුත් කරන ලදී. සමහර ආකාරවලින්, එය cmdbat scripts, vb scripts, Windows Script Host සහ JScript වැනි දේවල් ප්‍රතිස්ථාපනය විය.

ලූප, පන්ති, ක්‍රියාකාරීත්වය, MS GUI ඇමතුම් තිබියදීත්, තවමත් භාවිතා කරන Delphi (හෝ ඊට වඩා පැරණි දෙයක්) වෙනුවට, PowerShell ලාංඡන විකල්පයන්ගෙන් පසු ඊළඟ පියවර ලෙස පමණක් සලකා බැලිය හැකිය. Git ඒකාබද්ධ කිරීම සහ යනාදි.

Powershell භාවිතා කරනුයේ සාපේක්ෂව කලාතුරකින්; ඔබට එය හමුවිය හැක්කේ PowerShell Core, VMware vSphere PowerCLI, Azure PowerShell, MS Exchange, Desired State Configuration, ආකාරයෙන් පමණි. PowerShell වෙබ් ප්රවේශය සහ දුසිමක් හෝ ඊට වඩා කලාතුරකින් භාවිතා කරන වැඩසටහන් සහ කාර්යයන්. සමහරවිට ඔහු මුදා හැරීමත් සමඟ දෙවන සුළඟක් ලැබෙනු ඇත ඩබ්ලිව්එස්එල් 2, නමුත් එය හරියටම නොවේ.

Powershell හට විශාල වාසි තුනක් ඇත:

  1. එය සාපේක්ෂව සරල ය, ඒ පිළිබඳ සාහිත්‍ය හා උදාහරණ රාශියක් ඇත, සහ රුසියානු භාෂාවෙන් පවා, උදාහරණයක් ලෙස, Foreach පිළිබඳ ලිපියක් - පොතෙන් PowerShell ගැඹුරින් - වෙනස ගැන () සහ {}
  2. ඔහු සංස්කාරකවරයා සමඟ යයි අයිඑස්ඊ, වින්ඩෝස් සමඟ ඇතුළත් වේ. එහි යම් ආකාරයක නිදොස්කරණයක් පවා තිබේ.
  3. එයින් ඇමතීමට පහසුය චිත්රක අතුරු මුහුණතක් ගොඩනැගීම සඳහා සංරචක.

0. සකස් කිරීම.

අපට අවශ්‍ය වනු ඇත:

  • Windows PC (මට Windows 10 ඇත)
  • අවම වශයෙන් යම් ආකාරයක අන්තර්ජාල ප්‍රවේශයක් (උදාහරණයක් ලෙස NAT හරහා)
  • විදුලි පණිවුඩ සඳහා සීමිත ප්‍රවේශයක් ඇති අය සඳහා - බ්‍රවුසරයේ ෆ්‍රීගේට් ස්ථාපනය කර වින්‍යාස කර ඇත, සමහර දුෂ්කර අවස්ථාවල දී, සිම්පල් ඩීඑන්එස් ක්‍රිප්ට් සමඟ
  • ඔබගේ දුරකථනයේ වැඩ කරන විදුලි පණිවුඩ සේවාලාභියෙකු සිටීම
  • මූලික කරුණු තේරුම් ගැනීම - විචල්‍යයක්, අරාවක්, ලූපයක් යනු කුමක්ද?

විවෘත කර කියවන ලිපි - උපදෙස්: Telegram හි bots නිර්මාණය කරන්නේ කෙසේද? и පද්ධති පරිපාලක සඳහා ටෙලිග්‍රාම් බොට්

1. අපි තවත් ටෙස්ට් බොට් එකක් නිර්මාණය කරමු.

සෑම කෙනෙකුම මෙය දැනටමත් දන්නා බැවින් සහ දැනටමත් සිදුවී ඇති බැවින්, ඔබට එය මඟ හැරිය හැකඉහත ලිපියේ දක්වා ඇති පරිදි - පළමුව, ටෙලිග්‍රාම් සඳහා බොට් එකක් - එය තවමත් ඔබගේ පැත්තේ ධාවනය වන යෙදුමක් වන අතර Telegram Bot API වෙත ඉල්ලීම් කරයි. එපමනක් නොව, API පැහැදිලිය - bot පරාමිති සහිත නිශ්චිත URL වෙත ප්‍රවේශ වන අතර, Telegram JSON වස්තුවක් සමඟ ප්‍රතිචාර දක්වයි.

ආශ්‍රිත ගැටළු: කිසියම් නොදන්නා ආකාරයකින් ඔබ JSON වස්තුවකින් යම් කේතයක් ගෙන එය ක්‍රියාත්මක කිරීම සඳහා යවන්නේ නම් (හිතාමතා නොවේ), කේතය ඔබ වෙනුවෙන් ක්‍රියාත්මක වේ.

නිර්මාණය කිරීමේ ක්‍රියාවලිය ඉහත ලිපි දෙකකින් විස්තර කර ඇත, නමුත් මම නැවත කියමි: විදුලි පණිවුඩයකින් අපි සම්බන්ධතා විවෘත කරමු, @botfather සොයන්න, ඔහුට /newbot කියන්න, Botfortest12344321 බොට් එකක් සාදන්න, එය Mynext1234bot අමතන්න, සහ එහි අද්විතීය යතුරක් සහිත පණිවිඩයක් ලබා ගන්න. පෝරමය 1234544311:AbcDefNNNNNNNNNNNNNN

යතුර ගැන සැලකිලිමත් වන්න, එය ලබා නොදෙන්න!

එවිට ඔබට බොට් වින්‍යාසගත කළ හැකිය, උදාහරණයක් ලෙස, එය කණ්ඩායම් වලට එකතු කිරීම තහනම් කරන්න, නමුත් පළමු පියවරේදී මෙය අවශ්‍ය නොවේ.

අපි BotFather ගෙන් “/mybot” විමසා අපි යම් දෙයකට අකමැති නම් සැකසීම් සීරුමාරු කරමු.

අපි නැවත සම්බන්ධතා විවෘත කරමු, එහි @Botfortest12344321 සොයා ගන්න (@ සමඟ සෙවීම ආරම්භ කිරීම අනිවාර්ය වේ), "ආරම්භය" ක්ලික් කර "/Glory to the robots" බොට් වෙත ලියන්න. / ලකුණ අවශ්‍ය වේ, උපුටා දැක්වීම් අවශ්‍ය නොවේ.
බොට්, ඇත්ත වශයෙන්ම, කිසිම දෙයකට පිළිතුරු නොදෙනු ඇත.

බොට් එක හදලද කියල බලල ඕපන් කරමු.

api.telegram.org/bot1234544311:AbcDefNNNNNNNNNNNNN/getMe
මෙහි 1234544311:AbcDefNNNNNNNNNNNNN යනු කලින් ලැබුණු යතුරයි,
සහ වැනි රේඛාවක් ලබා ගන්න
{"ok":true,"result":{""}}

අපට පළමු රහස් වාක්‍ය ඛණ්ඩය (ටෝකනය) ඇත. දැන් අපි දෙවන රහස් අංකය සොයා ගත යුතුයි - බොට් සමඟ කතාබස් හැඳුනුම්පත. එක් එක් කතාබස්, කණ්ඩායම, ආදිය තනි පුද්ගල වන අතර එහිම අංකයක් ඇත (සමහර විට අඩු සමග - විවෘත කණ්ඩායම් සඳහා). මෙම අංකය සොයා ගැනීම සඳහා, අපි බ්‍රවුසරයෙන් ඉල්ලා සිටිය යුතුය (ඇත්ත වශයෙන්ම, එය බ්‍රවුසරයේ කිසිසේත් අවශ්‍ය නොවේ, නමුත් වඩා හොඳ අවබෝධයක් සඳහා ඔබට එය සමඟ ආරම්භ කළ හැකිය) ලිපිනය (1234544311:NNNNNNNNNN යනු ඔබේ ටෝකනය වේ.

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

සහ වැනි ප්‍රතිචාරයක් ලබා ගන්න

{"ok":true,"result":[{"update_id":...,... චැට්":{"id":123456789

අපට chat_id අවශ්‍යයි.

අපි චැට් වෙත අතින් ලිවිය හැකිදැයි පරීක්ෂා කරමු: බ්‍රවුසරයෙන් ලිපිනය අමතන්න

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

ඔබට ඔබේ කතාබස් තුළ බොට් එකකින් පණිවිඩයක් ලැබුණහොත්, හරි, ඔබ ඊළඟ අදියර වෙත යන්න.

මේ ආකාරයෙන් (බ්‍රවුසරය හරහා) ඔබට සැමවිටම සබැඳි උත්පාදනය සමඟ ගැටළු තිබේද, නැතහොත් යමක් කොහේ හෝ සඟවා ඇත්නම් සහ ක්‍රියා නොකරන්නේද යන්න පරීක්ෂා කළ හැකිය.

දිගටම කියවීමට පෙර ඔබ දැනගත යුතු දේ

Telegram හි කණ්ඩායම් කතාබස් වර්ග කිහිපයක් ඇත (විවෘත, සංවෘත). මෙම කතාබස් සඳහා, සමහර කාර්යයන් (උදාහරණයක් ලෙස, id) වෙනස් වේ, සමහර විට සමහර ගැටළු ඇති කරයි.

එය 2019 අවසානය යැයි උපකල්පනය කරමු, සහ අපේ කාලයේ වීරයා වන සුප්‍රසිද්ධ Man-Orchestra (පරිපාලක, නීතිඥ, තොරතුරු ආරක්ෂණ විශේෂඥ, ක්‍රමලේඛක සහ ප්‍රායෝගිකව MVP) Evgeniy V. $i විචල්‍යය අරාවකින් වෙන්කර හඳුනා ගනී, ලූප් ප්‍රගුණ කර ඇත, ඉදිරි වසර කිහිපය තුළ චොකලට් ප්‍රගුණ කරනු ඇත, පසුව බලන්න PowerShell සමඟ සමාන්තර සැකසුම් и සෑම වස්තුවක්ම සමාන්තරව එය පැමිණෙනු ඇත.

1. අපි හිතනවා අපේ බොට් එක මොනවා කරයිද කියලා

මට කිසිම අදහසක් තිබුණේ නැහැ, මට හිතන්න තිබුණා. මම දැනටමත් බොට්-නෝට්බුක් එකක් ලියා ඇත. "යමක් කොහේ හරි යවන" බොට් එකක් සෑදීමට මට අවශ්‍ය නොවීය. Azure වෙත සම්බන්ධ වීමට ඔබට ක්‍රෙඩිට් කාඩ්පතක් අවශ්‍ය වේ, නමුත් ශිෂ්‍යයා එය ලබා ගන්නේ කොහෙන්ද? සෑම දෙයක්ම එතරම් නරක නොවන බව සටහන් කළ යුතුය: ප්‍රධාන වලාකුළු යම් ආකාරයක පරීක්ෂණ කාල සීමාවක් නොමිලේ ලබා දෙයි (නමුත් ඔබට තවමත් ක්‍රෙඩිට් කාඩ් අංකයක් අවශ්‍ය වේ - සහ එයින් ඩොලරයක් හර කරනු ඇති බව පෙනේ. මට මතක නැත. එය පසුව ආපසු ලබා දෙන ලදී.)

AI ML නොමැතිව බොට්-දුප්පත්-කවි-වියන්නෙකු සෑදීම එතරම් රසවත් නොවේ.

ශබ්දකෝෂයේ ඇති ඉංග්‍රීසි වචන මට (හෝ මට නොවේ) මතක් කර දෙන බොට් එකක් සෑදීමට මම තීරණය කළෙමි.
දත්ත සමුදාය සමඟ පටලැවීම වැළැක්වීම සඳහා, ශබ්දකෝෂය පෙළ ගොනුවක ගබඩා කර අතින් යාවත්කාලීන කරනු ලැබේ.
මෙම අවස්ථාවේ දී, කාර්යය වන්නේ කාර්යයේ මූලික කරුණු පෙන්වීමට සහ අවම වශයෙන් අර්ධ වශයෙන් නිමි භාණ්ඩයක් සෑදීමට නොවේ.

2. පළමු වරට කුමක් සහ කෙසේද යන්න උත්සාහ කිරීම

අපි C:poshtranslate ෆෝල්ඩරයක් සාදා ගනිමු
මුලින්ම අපි බලමු මොන වගේ powershell එකක්ද තියෙන්නේ කියලා, අපි start-run හරහා ISE දියත් කරමු
powershell is
හෝ ස්ථාපිත වැඩසටහන් වල Powershell ISE සොයා ගන්න.
දියත් කිරීමෙන් පසු, සුපුරුදු හුරුපුරුදු “යම් ආකාරයක සංස්කාරකයක්” විවෘත වනු ඇත; පෙළ ක්ෂේත්‍රයක් නොමැති නම්, ඔබට සැමවිටම “ගොනුව - නව සාදන්න” ක්ලික් කළ හැකිය.

Powershell හි අනුවාදය දෙස බලමු - පෙළ ක්ෂේත්රයේ ලියන්න:

get-host 

සහ F5 ඔබන්න.

Powershell සුරැකීමට ඉදිරිපත් වනු ඇත - "ඔබ ධාවනය කිරීමට සූදානම් වන ස්ක්‍රිප්ට් සුරකිනු ඇත.", අපි එකඟ වන අතර, C: poshtranslate හි නම සහිත ගොනුව powershell වෙතින් සුරකින්න. myfirstbotBT100.

දියත් කිරීමෙන් පසු, පහළ පෙළ කවුළුව තුළ අපට දත්ත වගුවක් ලැබේ:

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

මට 5.1 දෙයක් තියෙනවා, ඒ ඇති. ඔබ සතුව පැරණි Windows 7/8 තිබේ නම්, විශාල ගනුදෙනුවක් නැත - PowerShell 5 අනුවාදයට යාවත්කාලීන කිරීමට අවශ්‍ය වුවද - උදා. උපදෙස්.

පහත විධාන රේඛාවේ Get-Date ටයිප් කරන්න, Enter ඔබන්න, වේලාව බලන්න, විධානය සමඟ root ෆෝල්ඩරය වෙත යන්න.
cd
සහ cls විධානය සමඟ තිරය හිස් කරන්න (නැහැ, ඔබට rm භාවිතා කිරීමට අවශ්‍ය නැත)

දැන් අපි වැඩ කරන්නේ කුමක්ද සහ කෙසේද යන්න පරීක්ෂා කරමු - කේතය පවා නොව පේළි දෙකක් ලියන්න, ඔවුන් කරන්නේ කුමක්ද යන්න තේරුම් ගැනීමට උත්සාහ කරන්න. # සංකේතය සමඟ get-host සමඟ පේළිය අදහස් කර ටිකක් එකතු කරමු.

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

(සිත්ගන්නා දෙය නම් Habré හි කේත හැඩතල ගැන්වීමේ පතන ලැයිස්තුවේ විකල්ප දුසිම් දෙකක් ඇත - නමුත් Powershell එහි නොමැත. Dos තිබේ. Perl ඇත.)

තවද GUI වෙතින් F5 හෝ ">" එබීමෙන් කේතය ධාවනය කරමු.

අපි ප්රතිදානය ලබා ගනිමු:

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

දැන් අපි මෙම රේඛා දෙක සහ සමහර රසවත් කරුණු දෙස බලමු, එවිට අපි අනාගතයේදී මෙයට ආපසු නොයන්නෙමු.

Pascal මෙන් නොව (සහ පමණක් නොවේ), PowerShell විසින්ම විචල්‍යයකට පැවරිය යුතු වර්ගය තීරණය කිරීමට උත්සාහ කරයි; මේ පිළිබඳ වැඩි විස්තර ලිපියේ ලියා ඇත. ක්‍රමලේඛන භාෂා ටයිප් කිරීම පිළිබඳ අධ්‍යාපනික වැඩසටහන
එබැවින්, $TimeNow විචල්‍යයක් සාදා එයට වර්තමාන දිනය සහ වේලාවේ (Get-Date) අගය පැවරීමෙන්, එහි කුමන ආකාරයේ දත්තයක් තිබේද යන්න ගැන අපට ඕනෑවට වඩා කරදර විය යුතු නැත.

ඇත්ත, මෙම නොදැනුවත්කම පසුව රිදවිය හැකිය, නමුත් එය පසුව සඳහා වේ. පෙළෙහි පහත උදාහරණයක් වනු ඇත.
අපි බලමු මොනවද ලැබුනේ කියලා. අපි ක්‍රියාත්මක කරමු (විධාන රේඛාවේ)

$TimeNow | Get-member

සහ තේරුම්ගත නොහැකි පෙළ පිටුවක් ලබා ගන්න

තේරුම්ගත නොහැකි පෙළ අංක 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")...                                         

ඔබට පෙනෙන පරිදි, TypeName: System.DateTime වර්ගයේ විචල්‍යයක් නිර්මාණය කර ඇත්තේ ක්‍රම සමූහයක් (මෙම විචල්‍ය වස්තුවෙන් අපට කළ හැකි දේ යන අර්ථයෙන්) සහ ගුණාංග සමඟිනි.

අපි කතා කරමු $TimeNow.DayOfYear - අපට වසරේ දවසේ අංකය ලැබේ.
අපි කතා කරමු $TimeNow.DayOfYear | Get-Member - අපිට ලැබෙනවා TypeName: System.Int32 සහ ක්රම සමූහයක්.
අපි කතා කරමු $TimeNow.ToUniversalTime() - සහ UTC හි කාලය ලබා ගන්න

නිදොස්කරණය

සමහර විට එය යම් රේඛාවක් දක්වා වැඩසටහනක් ක්රියාත්මක කිරීම අවශ්ය වන අතර එම මොහොතේ වැඩසටහනේ තත්වය දැකීමට සිදු වේ. මේ සඳහා ISE හට Debug Function එකක් ඇත - toggle break point
මධ්‍යයේ කොතැනක හෝ බ්‍රේක්පොයින්ට් එකක් තබා, මෙම රේඛා දෙක ධාවනය කර විවේකය කෙබඳුදැයි බලන්න.

3. Telegram bot සමඟ අන්තර්ක්‍රියා අවබෝධ කර ගැනීම

ඇත්ත වශයෙන්ම, බොට් සමඟ අන්තර්ක්‍රියා මත ඊටත් වඩා සාහිත්‍ය ලියා ඇත, සියලු getpush සහ යනාදිය, නමුත් න්‍යායේ ගැටළුව විකල්ප වශයෙන් සලකා බැලිය හැකිය.

අපගේ නඩුවේදී එය අවශ්ය වේ:

  • ලිපි හුවමාරුවෙන් යමක් යැවීමට ඉගෙන ගන්න
  • ලිපි හුවමාරුවෙන් යමක් ලබා ගැනීමට ඉගෙන ගන්න

3.1 ලිපි හුවමාරුවෙන් යමක් යැවීමට සහ එයින් ලබා ගැනීමට ඉගෙන ගැනීම

කුඩා කේතයක් - 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

සහ රුසියානු සමූහාණ්ඩුවේ මෙම අවස්ථාවේදී අපට දෝෂයක් ලැබේ දුරස්ථ සේවාදායකයට සම්බන්ධ වීමට නොහැක.

නැතහොත් අපට එය නොලැබේ - ටෙලිකොම් ක්‍රියාකරු සහ ප්‍රොක්සි වින්‍යාස කර ක්‍රියා කරන්නේද යන්න මත රඳා පවතී
හොඳයි, ඉතිරිව ඇත්තේ ප්‍රොක්සියක් එකතු කිරීම පමණි. සංකේතනය නොකළ සහ සාමාන්‍යයෙන් වංචනික ප්‍රොක්සියක් භාවිතා කිරීම ඔබේ සෞඛ්‍යයට අතිශයින්ම භයානක බව කරුණාවෙන් සලකන්න.

වැඩ කරන ප්‍රොක්සියක් සොයා ගැනීමේ කාර්යය ඉතා අපහසු නොවේ - බොහෝ ප්‍රකාශිත http ප්‍රොක්සි ක්‍රියා කරයි. මම හිතන්නේ පස්වෙනි එක මට වැඩ කළා.

ප්‍රොක්සි භාවිතා කරන වාක්‍ය ඛණ්ඩ:

Invoke-WebRequest -Uri $URL4SEND -Proxy $MyProxy

ඔබට බොට් එකක් සමඟ ඔබේ කතාබහේදී පණිවිඩයක් ලැබුනේ නම්, සියල්ල හොඳයි, ඔබට ඉදිරියට යා හැක. එසේ නොවේ නම්, දෝෂහරණය දිගටම කරගෙන යන්න.

ඔබට ඔබගේ $URL4SEND තන්තුව හැරෙන්නේ කුමක් දැයි බැලීමට සහ බ්‍රවුසරයේ එය ඉල්ලීමට උත්සාහ කරන්න, මේ වගේ:

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

3.2 චැට් එකේ "යමක්" ලියන්නේ කෙසේදැයි අපි ඉගෙන ගත්තෙමු, දැන් අපි එය කියවීමට උත්සාහ කරමු

අපි තව ලයින් 4ක් එකතු කරලා බලමු | හරහා ඇතුලේ තියෙන්නේ මොනවද කියලා සාමාජිකත්වය ලබා ගන්න

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

වඩාත්ම සිත්ගන්නා කරුණ අපට ලබා දී ඇත

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

ඒවායේ ඇති දේ බලමු:

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

සෑම දෙයක්ම ඔබ වෙනුවෙන් වැඩ කරන්නේ නම්, ඔබට දිගු රේඛාවක් ලැබෙනු ඇත:

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

වාසනාවකට මෙන්, පද්ධති පරිපාලක සඳහා කලින් ප්‍රකාශයට පත් කරන ලද ටෙලිග්‍රාම් බොට් ලිපියේ මෙම රේඛාව (ඔව්, $MyMessageGet.RawContent | අනුව get-member යනු System.String වේ), දැනටමත් විසුරුවා හැර ඇත.

4. ඔබට ලැබෙන දේ ක්‍රියාවට නංවන්න (අපි දැනටමත් යමක් යවන්නේ කෙසේදැයි දනිමු)

දැනටමත් ලියා ඇති පරිදි මෙහි, වඩාත්ම අවශ්‍ය දේවල් අන්තර්ගතය තුළ පවතී. අපි එය සමීපව බලමු.

පළමුව, අපි වෙබ් අතුරු මුහුණතෙන් හෝ දුරකථනයෙන් බොට් වෙත තවත් වාක්‍ය ඛණ්ඩ කිහිපයක් ලියන්නෙමු

/message1
/message2
/message3

සහ $URLGET විචල්‍යයේ පිහිටුවා ඇති ලිපිනය බ්‍රවුසරය හරහා බලන්න.

අපි එවැනි දෙයක් දකිමු:

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

එය කුමක්ද? අන්තයේ සිට අවසානය දක්වා පණිවිඩ හඳුනාගැනීමක්, කතාබස් හඳුනාගැනීමක්, යැවීමේ හැඳුනුම්කාරකයක් සහ වෙනත් බොහෝ තොරතුරු අඩංගු වස්තු අරාවලින් සමහර සංකීර්ණ වස්තුවකි.

කෙසේ වෙතත්, “මෙය කුමන ආකාරයේ වස්තුවක්ද” යන්න අපට සොයා ගැනීමට අවශ්‍ය නැත - කාර්යයේ කොටසක් දැනටමත් අප වෙනුවෙන් කර ඇත. ඇතුළත ඇති දේ බලමු:

ලැබුණු පණිවිඩ කියවීම හෝ 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. අපි දැන් ඒ ගැන කුමක් කළ යුතුද?

ප්‍රතිඵලයක් ලෙස ලැබෙන ගොනුව myfirstbotBT105 නමින් හෝ ඔබ වඩාත් කැමති ඕනෑම දෙයක් යටතේ සුරකිමු, මාතෘකාව වෙනස් කර දැනටමත් ලියා ඇති සියලුම කේතය හරහා අදහස් දක්වන්න

<#start comment 105 end comment 105#>

දැන් අපි ශබ්ද කෝෂය ලබා ගන්නේ කොහෙන්ද (හොඳයි, කොහේද - ගොනුවක තැටියේ) සහ එය පෙනෙන්නේ කෙසේද යන්න තීරණය කළ යුතුය.

ඇත්ත වශයෙන්ම, ඔබට ස්ක්‍රිප්ටයේ පෙළෙහි විශාල ශබ්දකෝෂයක් ලිවිය හැකිය, නමුත් මෙය සම්පූර්ණයෙන්ම කාරණයට පටහැනි ය.
ඉතින් අපි බලමු powershell එකට සාමාන්‍යයෙන් වැඩ කරන්න පුළුවන් මොනවද කියලා.
පොදුවේ, ඔහු වැඩ කිරීමට කුමන ගොනුවක්ද යන්න ගැන ඔහු සැලකිල්ලක් නොදක්වයි, එය අපට වැදගත් නොවේ.
අපට තේරීමක් තිබේ: txt (ඔබට පුළුවන්, නමුත් ඇයි), csv, xml.
හැමෝම බලන්න පුලුවන්ද අපි හැමෝම බලමු.
අපි MyVocabClassExample1 පන්තියක් සහ $MyVocabExample1 විචල්‍යයක් නිර්මාණය කරමු
පන්තිය $ නොමැතිව ලියා ඇති බව මම සටහන් කරමි

සමහර කේතය #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

භාවිතා කර මෙය ගොනු වලට ලිවීමට උත්සාහ කරමු නියැදිය.

සමහර කේතය #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

- සහ අපට Out-File -FilePath $MyFilenameExample01 -InputObject -Append $MyVocabExample2 යන රේඛාවේ දෝෂයක් ලැබේ.

ඔහු එකතු කිරීමට අවශ්ය නැත, අහ්-ආහ්, මොනතරම් ලැජ්ජාවක්ද?

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

බලමු මොකද වෙන්නේ කියලා. විශිෂ්ට පෙළ දසුන - නමුත් එය ආපසු අපනයනය කරන්නේ කෙසේද? මම කොමා වැනි පෙළ බෙදුම්කාරක කිහිපයක් හඳුන්වා දිය යුතුද?

අවසානයේදී ඔබට "කොමාවෙන් වෙන් කළ අගයන් (CSV) ගොනුවක් A නවතින්න.
#

$MyFilenameExample03 = $ScriptDir + "Example03.csv"
$MyFilenameExample04 = $ScriptDir + "Example04.csv"
Export-Csv  -Path $MyFilenameExample03 -InputObject $MyVocabExample1 
Export-Csv  -Path $MyFilenameExample03 -InputObject $MyVocabExample2 -Append 
Export-Csv  -Path $MyFilenameExample04 -InputObject $MyVocabExample3AsArray 

දැකීමට පහසු වන පරිදි, MS එහි තර්කනය මගින් විශේෂයෙන් වෙන්කර හඳුනා නොගනී; සමාන ක්රියා පටිපාටියක් සඳහා, එක් අවස්ථාවක -FilePath භාවිතා කරයි, තවත් අවස්ථාවක -Path.

ඊට අමතරව, තුන්වන ගොනුවේ රුසියානු භාෂාව අතුරුදහන් විය, සිව්වන ගොනුවේ එය හැරී ගියේය ... හොඳයි, යමක් සිදු විය. #TYPE System.Object[] 00
# “ගණන්”,”දිග”,”දිගු දිග”,”ශ්‍රේණිය”,”SyncRoot”,”Readonly”,”IsFixedSize”,”Synchronized”
#
අපි එය ටිකක් නැවත ලියමු:

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

එය උදව් කර ඇති බව පෙනේ, නමුත් මම තවමත් ආකෘතියට කැමති නැත.

මම විශේෂයෙන් කැමති නැහැ වස්තුවකින් රේඛා කෙලින්ම ගොනුවකට දාන්න බැහැ.
මාර්ගය වන විට, අපි ගොනු වලට ලිවීමට පටන් ගත් බැවින්, අපට ආරම්භක ලොගයක් තබා ගැනීම ආරම්භ කළ හැකිද? අපට විචල්‍යයක් ලෙස කාලය තිබේ, අපට ගොනු නාමය සැකසිය හැකිය.

ඇත්ත, තවම ලිවීමට කිසිවක් නැත, නමුත් ලොග් කරකවන්නේ කෙසේද යන්න ගැන ඔබට සිතා බැලිය හැකිය.
අපි දැන් xml උත්සාහ කරමු.

සමහර 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

xml වෙත අපනයනය කිරීමෙන් බොහෝ වාසි ඇත - කියවීමේ හැකියාව, සම්පූර්ණ වස්තුව අපනයනය කිරීම සහ ඉහළ නැංවීමක් සිදු කිරීමට අවශ්‍ය නොවේ.

අපි උත්සාහ කරමු xml ගොනුව කියවන්න.

xml වලින් ටිකක් කියවීම

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

අපි නැවතත් කාර්යයට යමු. අපි පරීක්ෂණ ගොනුවක් ලිව්වා, එය කියවන්න, ගබඩා ආකෘතිය පැහැදිලිය, අවශ්ය නම්, ඔබට රේඛා එකතු කිරීමට සහ මකා දැමීමට වෙනම කුඩා ගොනු සංස්කාරකයක් ලිවිය හැකිය.

කාර්යය වූයේ කුඩා පුහුණු බොට් එකක් සෑදීම බව මම ඔබට මතක් කරමි.

වැඩ ආකෘතිය: මම "උදාහරණ" විධානය බොට් වෙත යවමි, බොට් මට අහඹු ලෙස තෝරාගත් වචනයක් සහ පිටපත් කිරීමක් එවන අතර තත්පර 10 කට පසු මට පරිවර්තනයක් සහ අදහසක් එවයි. අපි විධාන කියවන ආකාරය දනිමු, ප්‍රොක්සි ස්වයංක්‍රීයව තෝරන සහ පරීක්ෂා කරන ආකාරය සහ පණිවිඩ කවුන්ටර අමතක කිරීමට නැවත සකසන්නේ කෙසේදැයි ඉගෙන ගැනීමටද අපි කැමැත්තෙමු.

අපි කලින් අදහස් දැක්වූ සියල්ල අනවශ්‍ය ලෙස සටහන් කරමු, දැන් අනවශ්‍ය උදාහරණ txt සහ csv සමඟ අදහස් දක්වන්න, සහ ගොනුව B106 අනුවාදය ලෙස සුරකින්න.

අපොයි ඔව්. ආයෙත් බොට් එකට මොනවා හරි යවමු.

6. කාර්යයන් සහ තවත් දේවලින් යැවීම

පිළිගැනීම සැකසීමට පෙර, ඔබ විසින් පරීක්ෂණ පණිවිඩයක් හැර "අවම වශයෙන් යමක්" යැවීම සඳහා කාර්යයක් නිර්මාණය කළ යුතුය.

ඇත්ත වශයෙන්ම, උදාහරණයේදී අපට ඇත්තේ එක් යැවීමක් සහ එක් සැකසීමක් පමණි, නමුත් අපට එකම දේ කිහිප වතාවක් කිරීමට අවශ්‍ය නම් කුමක් කළ යුතුද?

කාර්යයක් ලිවීම වඩාත් පහසු වේ. එබැවින්, අපට $MyVocabExample4AsArray වර්ගයේ වස්තුවක විචල්‍යයක් ඇත, ගොනුවෙන් කියවන ලද, මූලද්‍රව්‍ය දෙකක අරාවක ආකාරයෙන්.
අපි යමු කියවන්න.

ඒ සමඟම, අපි ඔරලෝසුව සමඟ කටයුතු කරන්නෙමු; අපට එය පසුව අවශ්‍ය වනු ඇත (ඇත්ත වශයෙන්ම, මෙම උදාහරණයේදී අපට එය අවශ්‍ය නොවනු ඇත :)

සමහර කේතය #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
}

ඔබට පහසුවෙන් දැකිය හැකි පරිදි, ශ්‍රිතය $MyToken සහ $MyChatID ලෙස හඳුන්වනු ලබන අතර, ඒවා කලින් දෘඪ-කේතගත කර ඇත.

මෙය කිරීමට අවශ්‍ය නොවන අතර, $MyToken සෑම bot සඳහාම එකක් නම්, $MyChatID කතාබහ අනුව වෙනස් වේ.

කෙසේ වෙතත්, මෙය උදාහරණයක් බැවින්, අපි එය දැනට නොසලකා හරිමු.

$MyVocabExample4AsArray අරාවක් නොවන බැවින්, එය එකකට බෙහෙවින් සමාන වුවද, එසේ නම් ඔබට එය නිකම්ම ගත නොහැක එහි දිග ඉල්ලන්න.

ආයෙත් පාරක් කරන්න වෙන්නේ බැරි දෙයක් - පැරෂුට් කෝඩ් එක අනුව නෙවෙයි - අරන් ගණන් කරන්න

සමහර කේතය #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)
# Угадайте сами, какой пример легче читается посторонними людьми.

අහඹු සිත්ගන්නා ලක්ෂණය. අපි හිතමු අපිට 0 හෝ 1 ලැබීමට අවශ්‍යයි (අරාවේ ඇත්තේ මූලද්‍රව්‍ය දෙකක් පමණි). මායිම් 0..1 සකසන විට, අපට "1" ලැබේද?
නැත - අපට එය නොලැබෙනු ඇත, අපට විශේෂ උදාහරණයක් ඇත උදාහරණ 2: 0 සහ 99 අතර අහඹු පූර්ණ සංඛ්‍යාවක් ලබා ගන්න - සසම්භාවී - උපරිම 100
එබැවින්, 0..1 සඳහා අපි උපරිම මූලද්රව්ය අංකය = 0 සමඟ, 2..1 ප්රමාණය සැකසිය යුතුය.

7. එන පණිවිඩ සැකසීම සහ උපරිම පෝලිම් දිග

අපි කලින් නැවතුනේ කොහේද? අපට $MyMessageGet ලැබුණු විචල්‍යය තිබේ
සහ එයින් ලබාගත් $Content4Pars01, එයින් අපි Content4Pars01.result array හි මූලද්‍රව්‍ය ගැන උනන්දු වෙමු

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

අපි bot /message10, /message11, /message12, /word සහ නැවතත් /word සහ /hello යවමු.
අපට ලැබුණු දේ බලමු:

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

ලැබුණු සියල්ල හරහා ගොස් පණිවිඩය / වචනය නම් ප්‍රතිචාරයක් යවමු
සමහර අය if-elseif ලෙස විස්තර කරන, ගොඩනැගීමේ අවස්ථාව පවර්ෂෙල් ලෙස හැඳින්වේ ස්විචය හරහා. ඒ සමගම, පහත කේතය සම්පූර්ණයෙන්ම අනවශ්ය සහ පවා හානිකර වන -wildcard යතුර භාවිතා කරයි.

සමහර කේතය #7.1

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

අපි ස්ක්‍රිප්ට් එක දෙතුන් පාරක් දුවමු. සෑම ක්‍රියාත්මක කිරීමේ උත්සාහයක් සඳහාම අපට එකම වචනය දෙවරක් ලැබෙනු ඇත, විශේෂයෙන් අහඹු ලෙස ක්‍රියාත්මක කිරීමේදී අප වැරැද්දක් කළේ නම්.

නමුත් නවත්වන්න. අපි නැවත/වචනය යැව්වේ නැත, එසේනම් පණිවිඩය නැවත සකසන්නේ ඇයි?

බොට් වෙත පණිවිඩ යැවීම සඳහා පෝලිමේ සීමිත දිගක් ඇත (පණිවිඩ 100 හෝ 200, මම හිතන්නේ) සහ අතින් ඉවත් කළ යුතුය.

මෙය ඇත්ත වශයෙන්ම ලේඛනවල විස්තර කර ඇත, නමුත් ඔබ එය කියවිය යුතුය!

මෙම අවස්ථාවේදී, අපට ?chat_id පරාමිතිය අවශ්‍ය වන අතර, &කාලය ඉක්මවීම, &සීමාව, &parse_mode=HTML සහ &disable_web_page_preview=true තවමත් අවශ්‍ය නොවේ.

සඳහා ලියකියවිලි telegram api මෙහි ඇත
එය සුදු සහ ඉංග්‍රීසි භාෂාවෙන් මෙසේ කියයි.
ආපසු ලබා දිය යුතු පළමු යාවත්කාලීනයේ හඳුනාගැනීම. කලින් ලැබුණු යාවත්කාලීන හඳුනාගැනීම් අතරින් ඉහළම අගයට වඩා එකකින් වැඩි විය යුතුය. පෙරනිමියෙන්, යාවත්කාලීනයන් ඉක්මනින්ම ආරම්භ වේ
තහවුරු කර නොමැත යාවත්කාලීන ආපසු ලබා දෙනු ලැබේ. සමඟ getUpdates ඇමතූ විගස යාවත්කාලීන කිරීමක් තහවුරු යැයි සැලකේ සන්සන්දනය කිරීමකි ඉහළ එහි update_id වලට වඩා. යාවත්කාලීන පෝලිමේ අවසානයේ සිට -offset යාවත්කාලීනයෙන් ආරම්භ වන යාවත්කාලීන ලබා ගැනීමට සෘණ ඕෆ්සෙට් නියම කළ හැක. පෙර යාවත්කාලීන සියල්ල අමතක වනු ඇත.

අපි බලමු:

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

ඔව්, අපි එය නැවත සකස් කර කාර්යය ටිකක් නැවත ලියන්නෙමු. අපට විකල්ප දෙකක් තිබේ - සම්පූර්ණ පණිවිඩය ශ්‍රිතයට යවා එය සම්පුර්ණයෙන්ම ශ්‍රිතය තුළ සකසන්න, නැතහොත් පණිවිඩ හැඳුනුම්පත පමණක් ලබා දී එය නැවත සකසන්න. උදාහරණයක් ලෙස, දෙවැන්න සරල බව පෙනේ.

මින් පෙර, අපගේ "සියලු පණිවිඩ" විමසුම් තන්තුව මෙබඳු විය

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

සහ එය පෙනෙනු ඇත

$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 

කිසිවෙකු ඔබට මුලින්ම සියලුම පණිවිඩ ලැබීම, ඒවා සැකසීම, සහ සාර්ථක සැකසුම් ඉල්ලීමෙන් පසුව පමණක් තහවුරු නොකළ -> තහවුරු කිරීම තහනම් නොකරයි.

සියලුම සැකසුම් අවසන් වූ පසු තහවුරු කිරීම ඇමතීම අර්ථවත් වන්නේ ඇයි? ක්‍රියාත්මක කිරීම මධ්‍යයේ අසාර්ථක වීමක් සිදුවිය හැකි අතර, නොමිලේ චැට්බෝට් එකක උදාහරණයක් ලෙස, තනි පණිවිඩයක් මග හැරීම විශේෂ දෙයක් නොවේ නම්, ඔබ යමෙකුගේ වැටුප් හෝ කාඩ්පත් ගනුදෙනුවක් සකසන්නේ නම්, ප්‍රති result ලය වඩාත් නරක විය හැකිය.

තවත් කේත පේළි කිහිපයක්

$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. නිගමනයක් වෙනුවට

මූලික කාර්යයන් - පණිවිඩ කියවීම, පෝලිම් නැවත සැකසීම, ගොනුවෙන් කියවීම සහ ගොනුවට ලිවීම සිදු කර පෙන්වනු ලැබේ.

කිරීමට ඉතිරිව ඇත්තේ කරුණු හතරක් පමණි:

  • කතාබස් වල ඉල්ලීමකට නිවැරදි පිළිතුර යැවීම
  • බොට් එක එකතු කරන ලද ඕනෑම කතාබහකට ප්‍රතිචාරයක් යැවීම
  • ලූපයක් තුළ කේතය ක්රියාත්මක කිරීම
  • වින්ඩෝස් උපලේඛකයෙන් බොට් එකක් දියත් කිරීම.

මෙම සියලු කාර්යයන් සරල වන අතර වැනි පරාමිතීන් පිළිබඳ ලියකියවිලි කියවීමෙන් පහසුවෙන් ඉටු කළ හැකිය
Set-ExecutionPolicy සීමා රහිත සහ -ExecutionPolicy Bypass
පෝරමයේ චක්රය

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

කියවූ සැමට ස්තුතියි.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න