Powershell استعمال ڪندي گريڊ 7-9 ۾ اسڪول جي ٻارن لاءِ سادي ٽيليگرام بوٽ لاءِ ٽيمپليٽ
هڪ دوست سان ڳالهه ٻولهه دوران اوچتو مون کي معلوم ٿيو ته سندن اسڪول ۾ 8 کان 10 گريڊ جي ٻارن کي پروگرامنگ نه سيکاري ويندي آهي. لفظ، ايڪسل ۽ سڀ ڪجهه. نه لوگو، نه پاسڪل، نه به VBA ايڪسل لاءِ.
مون کي ڏاڍي حيرت ٿي، انٽرنيٽ کوليو ۽ پڙهڻ شروع ڪيم- هڪ خاص اسڪول جي ڪمن مان هڪ هڪ نئين نسل جي تعليم کي فروغ ڏيڻ آهي جيڪو معلومات جي سماج جي حالتن کي پنهنجي ترقي ۽ زندگي جي سطح تي پورو ڪري ٿو.
اهو ڪورس شاگردن کي عملي طور تي پاسڪال پروگرامنگ ٻولي جي بنيادي تعميرات جي ڄاڻ کي مضبوط ڪرڻ جي اجازت ڏيندو. (2017 لاءِ ڪجهه جمنازيم جي پروگرام مان)
آخر ۾، مون فيصلو ڪيو ته ڪجھ ڪلاڪ خرچ ڪيان ۽ هڪ مثال ٺاهيو ”اسڪول جي ٻارن لاءِ سادو بوٽ ڪيئن ٺاهيو“.
هيٺ ڏنل ڪٽ اهو آهي ته پاور شيل ۾ هڪ ٻيو سادو بوٽ ڪيئن لکجي ۽ ان کي ويب هِڪ، سفيد IPs، وقف ڪيل سرورز، ڪلائوڊ ۾ ڊيپلائي ڪيل ورچوئل مشينن وغيره کان سواءِ ڪم ڪجي - باقاعده ونڊوز سان گڏ گهر جي پي سي تي.
TLDR: گراماتي ۽ حقيقتن جي غلطين سان گڏ هڪ ٻيو بورنگ مضمون، پڙهڻ لاءِ ڪجهه به ناهي، نه مزاح، نه تصويرون.
مضمون ۾ ڪا به نئين ڳالهه نه آهي، تقريبن هر شيءِ اڳ ۾ ئي لکيل آهي Habré تي، مثال طور مضمونن ۾ ھدايتون: ٽيليگرام ۾ بوٽس ڪيئن ٺاھيو и سسٽم ايڊمنسٽريٽر لاءِ ٽيليگرام بوٽ.
ان کان علاوه، مضمون عمدي طور تي بيڪار آهي ته جيئن هر وقت تعليمي ادب جو حوالو نه ڏنو وڃي. متن ۾ Gang 4، PowerShell Deep Dives يا، چئو، The 5 Pillars of the AWS Well-architected Framework جو ڪوبه حوالو نه آهي.
اڳڪٿي جي بدران، توهان ڇڏي سگهو ٿا
ڇڏڻ لاءِ آزاد محسوس ڪريو2006 ۾، Microsoft ان وقت جي ونڊوز XP، Vista، ۽ سرور 1.0 لاءِ PowerShell 2003 جاري ڪيو. ڪجھ طريقن سان، ان کي تبديل ڪيو جيئن شيون cmdbat اسڪرپٽ، vb اسڪرپٽ، ونڊوز اسڪرپٽ ميزبان ۽ JScript.
هينئر به، پاور شيل کي صرف لوگو آپشنز کان پوءِ ايندڙ قدم سمجهي سگهجي ٿو، ان جي بدران شايد اڃا استعمال ٿيل Delphi (يا ڪا پراڻي شيءِ)، لوپ، ڪلاسز، فنڪشن، ڪال MS GUI جي موجودگي جي باوجود، گيٽ انضمام ۽ پوء تي.
پاور شيل نسبتاً گهٽ استعمال ٿيندو آهي؛ توهان ان کي صرف پاور شيل ڪور، VMware vSphere PowerCLI، Azure PowerShell، MS Exchange، Desired State Configuration جي صورت ۾ ملن ٿا. PowerShell ويب رسائي ۽ هڪ درجن يا ان کان وڌيڪ گهٽ استعمال ٿيل پروگرام ۽ افعال. ٿي سگهي ٿو ته هن کي ڇڏڻ سان هڪ ٻيو واء حاصل ڪندو WSL2، پر اهو بلڪل نه آهي.
پاور شيل جا ٽي وڏا فائدا پڻ آهن:
اهو نسبتا سادو آهي، ان بابت تمام گهڻو ادب ۽ مثال آهي، ۽ جيتوڻيڪ روسي ۾، مثال طور، هڪ مضمون Foreach بابت - ڪتاب مان پاور شيل کوٽائي ۾ - فرق بابت () ۽ {}
هو ايڊيٽر سان گڏ وڃي ٿو آئي اي، ونڊوز سان شامل. اتي به ڪجهه قسم جو ڊيبگر آهي.
جيئن ته هرڪو اهو ڄاڻي ٿو، ۽ اڳ ۾ ئي ٿي چڪو آهي، توهان پڻ ان کي ڇڏي سگهو ٿاجيئن مٿي ڏنل مضمون ۾ چيو ويو آهي - سڀ کان پهريان، ٽيليگرام لاء هڪ بوٽ - اهو اڃا تائين هڪ ايپليڪيشن آهي جيڪو توهان جي پاسي تي هلندو آهي ۽ ٽيليگرام بوٽ API ڏانهن درخواستون ڪري رهيو آهي. ان کان علاوه، API واضح آهي - بوٽ هڪ مخصوص URL کي پيرا ميٽرز سان رسائي ٿو، ۽ ٽيليگرام JSON اعتراض سان جواب ڏئي ٿو.
لاڳاپيل مسئلا: جيڪڏهن ڪنهن اڻڄاتل طريقي سان توهان JSON اعتراض کان ڪجهه ڪوڊ وٺو ۽ ڪنهن طرح ان کي عمل لاءِ موڪليو (مقصد تي نه)، ڪوڊ توهان لاءِ عمل ڪيو ويندو.
ٺاھڻ جي عمل کي مٿي ٻن مضمونن ۾ بيان ڪيو ويو آھي، پر مان ورجائي ٿو: ھڪ ٽيليگرام ۾ اسان رابطا کوليندا آھيون، @botfather کي ڳوليندا آھيون، کيس ٻڌايو /newbot، ھڪڙو Botfortest12344321 ٺاھيو، ان کي Mynext1234bot سڏين، ۽ ھڪڙو پيغام وصول ڪيو ھڪڙي منفرد چيڪ سان. فارم 1234544311:AbcDefNNNNNNNNNNNNNN
ڪنجي جو خيال رکجو ۽ ان کي نه ڏيو!
پوءِ توھان بوٽ کي ترتيب ڏئي سگھوٿا، مثال طور، ان کي گروپن ۾ شامل ڪرڻ کان منع ڪريو، پر پھرين مرحلن ۾ اھو ضروري نه آھي.
اچو ته BotFather کان پڇون “/mybot” لاءِ ۽ سيٽنگون ترتيب ڏيو جيڪڏهن اسان کي ڪجهه پسند نه آهي.
اچو ته رابطا ٻيهر کوليون، ڳوليو @Botfortest12344321 اتي (اهو لازمي آهي ته ڳولا کي شروع ڪرڻ @ سان)، ڪلڪ ڪريو “شروع ڪريو” ۽ bot ڏانهن لکو “/Glory to the robots.” / نشان جي ضرورت آهي، حوالن جي ضرورت ناهي.
بوٽ، يقينا، ڪجھ به جواب نه ڏيندو.
اچو ته چيڪ ڪريو ته بوٽ ٺاهيو ويو آهي ۽ ان کي کوليو.
اچو ته سمجهون ته اهو 2019 جي آخر ۾ آهي، ۽ اسان جي وقت جو هيرو پڻ، مشهور انسان-آرڪسٽرا (منتظم، وڪيل، معلوماتي سيڪيورٽي ماهر، پروگرامر ۽ عملي طور تي MVP) Evgeniy V. $i متغير کي هڪ صف کان ڌار ڪري ٿو، لوپ ۾ مهارت حاصل ڪئي آهي، ڏسو ايندڙ ٻن سالن ۾ چاڪليٽي ۾ مهارت حاصل ڪندو، ۽ پوءِ PowerShell سان متوازي پروسيسنگ и ForEach-Object Parallel اهو ايندو.
1. اسان سوچيو ته اسان جو بوٽ ڇا ڪندو
مون وٽ ڪو به خيال نه هو، مون کي سوچڻو هو. مون اڳ ۾ ئي هڪ بوٽ نوٽ بڪ لکيو آهي. مان هڪ بوٽ ٺاهڻ نه چاهيندو هو "جيڪو ڪجهه موڪليندو آهي." Azure سان ڳنڍڻ لاءِ توهان کي ڪريڊٽ ڪارڊ جي ضرورت آهي، پر شاگرد اهو ڪٿان حاصل ڪري؟ اها ڳالهه نوٽ ڪرڻ گهرجي ته هر شيء ايترو خراب ناهي: مکيه بادل ڪجهه قسم جي آزمائشي مدت مفت ۾ ڏين ٿا (پر توهان کي اڃا به ڪريڊٽ ڪارڊ نمبر جي ضرورت آهي - ۽ اهو لڳي ٿو ته هڪ ڊالر ان مان ڊيبٽ ڪيو ويندو. مون کي ياد ناهي ته جيڪڏهن بعد ۾ واپس ڪيو ويو.)
AI ML کان سواءِ اهو ايترو دلچسپ ناهي ته بوٽ-غريب-شاعر-ويور ٺاهڻ.
مون فيصلو ڪيو ته هڪ بوٽ ٺاهيو جيڪو مون کي ياد ڏياريندو (يا مون کي نه) ڊڪشنري مان انگريزي لفظن جي.
ڊيٽابيس سان ڀڄڻ کان بچڻ لاءِ، ڊڪشنري کي ٽيڪسٽ فائل ۾ محفوظ ڪيو ويندو ۽ دستي طور تي اپڊيٽ ڪيو ويندو.
انهي حالت ۾، ڪم جو ڪم بنيادي طور تي ظاهر ڪرڻ آهي، ۽ گهٽ ۾ گهٽ هڪ جزوي طور تي ختم ٿيل پيداوار نه آهي.
2. ڪوشش ڪري رهيا آهيو ته پهريون ڀيرو ڇا ۽ ڪيئن
اچو ته هڪ فولڊر C:poshtranslate ٺاهي
پهرين، اچو ته ڏسون ته اسان وٽ ڪهڙي قسم جو پاور شيل آهي، اچو ته ISE لانچ ڪريون Start-run ذريعي
powershell ise
يا انسٽال ٿيل پروگرامن ۾ پاور شيل ISE ڳولھيو.
لانچ کان پوء، عام طور تي واقف "ڪجهه قسم جو ايڊيٽر" کلي ويندو؛ جيڪڏهن ڪو ٽيڪسٽ فيلڊ نه آهي، ته توهان هميشه "فائل - نئون ٺاهيو" تي ڪلڪ ڪري سگهو ٿا.
اچو ته پاور شيل جو ورجن ڏسو - ٽيڪسٽ فيلڊ ۾ لکو:
get-host
۽ F5 کي دٻايو.
پاور شيل محفوظ ڪرڻ جي آڇ ڪندو - ”جنهن اسڪرپٽ کي توهان هلائڻ وارا آهيو، محفوظ ٿي ويندي. myfirstbotBT100.
ھيٺ ڏنل ڪمانڊ لائن ۾ Get-Date ٽائپ ڪريو، Enter کي دٻايو، وقت ڏسو، ڪمانڊ سان روٽ فولڊر ڏانھن وڃو
cd
۽ cls حڪم سان اسڪرين کي صاف ڪريو (نه، توهان کي rm استعمال ڪرڻ جي ضرورت ناهي)
هاڻي اچو ته چيڪ ڪريون ته ڇا ڪم ڪري ٿو ۽ ڪيئن - اچو ته ڪوڊ نه لکون، پر ٻه لائينون، ۽ سمجهڻ جي ڪوشش ڪريو ته اهي ڇا ڪندا آهن. اچو ته تبصرو ڪريون لڪير کي get-host سان # علامت سان ۽ ٿورو شامل ڪريو.
# Пример шаблона бота
# get-host
<# это пример многострочного комментария #>
$TimeNow = Get-Date
$TimeNow
Saturday, December 8, 2019 21:00:50 PM (или что-то типа)
هاڻي اچو ته انهن ٻن لائينن ۽ ڪجهه دلچسپ نقطن تي نظر وجهون ته جيئن مستقبل ۾ ان طرف واپس نه وڃون.
پاسڪل (۽ نه رڳو) جي برعڪس، پاور شيل پاڻ اهو طئي ڪرڻ جي ڪوشش ڪري ٿو ته ڪهڙي قسم کي متغير کي تفويض ڪرڻو آهي؛ ان بابت وڌيڪ تفصيل مضمون ۾ لکيل آهن پروگرامنگ ٻولين ۾ ٽائپنگ تي تعليمي پروگرام
تنهن ڪري، هڪ $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 هڪ ڊيبگ فنڪشن آهي - ٽوگل برڪ پوائنٽ
وچ ۾ ڪنهن جاءِ تي هڪ بريڪ پوائنٽ رکو، انهن ٻن لائينن کي هلايو ۽ ڏسو ته وقفو ڪيئن ٿو لڳي.
3. ٽيليگرام بوٽ سان رابطي کي سمجھڻ
يقينن، اڃا به وڌيڪ ادب bot سان رابطي تي لکيو ويو آهي، تمام getpush ۽ انهي سان گڏ، پر نظريي جي مسئلي کي اختياري سمجهي سگهجي ٿو.
اسان جي صورت ۾ ضروري آهي:
خط و ڪتابت ۾ ڪجهه موڪلڻ سکو
خط و ڪتابت مان ڪجهه حاصل ڪرڻ سکيو
3.1 خط و ڪتابت ۾ ڪا شيءِ موڪلڻ ۽ ان مان وصول ڪرڻ سکڻ
۽ روسي فيڊريشن ۾ هن نقطي تي اسان کي غلطي ملي ٿي ريموٽ سرور سان ڳنڍڻ جي قابل ناهي.
يا اسان ان کي حاصل نه ڪندا آهيون - ٽيلي ڪام آپريٽر تي منحصر آهي ۽ ڇا پراکسي ترتيب ڏنل آهي ۽ ڪم ڪري رهيو آهي
خير، باقي رهي ٿو هڪ پراکسي شامل ڪرڻ. مهرباني ڪري نوٽ ڪريو ته هڪ غير انڪرپٽ ٿيل ۽ عام طور تي دوکي وارو پراکسي استعمال ڪرڻ توهان جي صحت لاءِ انتهائي خطرناڪ آهي.
ڪم ڪندڙ پراکسي ڳولڻ جو ڪم تمام ڏکيو نه آهي - اڪثر شايع ٿيل http پراکسي ڪم ڪن ٿا. مان سمجهان ٿو ته پنجون مون لاء ڪم ڪيو.
پراکسي استعمال ڪندي نحو:
Invoke-WebRequest -Uri $URL4SEND -Proxy $MyProxy
جيڪڏهن توهان هڪ بوٽ سان توهان جي چيٽ ۾ هڪ پيغام وصول ڪيو، پوء سڀ ڪجهه ٺيڪ آهي، توهان اڳتي وڌائي سگهو ٿا. جيڪڏهن نه، ڊيبگنگ جاري رکو.
توهان ڏسي سگهو ٿا ته توهان جي $URL4SEND اسٽرنگ ڇا ۾ بدلجي ٿي ۽ برائوزر ۾ ان جي درخواست ڪرڻ جي ڪوشش ڪريو، جهڙوڪ:
Write-Host "ParsedHtml"
$MyMessageGet.ParsedHtml # тут интересное
Write-Host "RawContent"
$MyMessageGet.RawContent # и тут интересное, но еще к тому же и читаемое.
Write-Host "Content"
$MyMessageGet.Content
هي ڇا آهي؟ ڪجھ پيچيده شيون شيون جي صفن مان جن ۾ آخر کان آخر تائين پيغام جي سڃاڻپ ڪندڙ، چيٽ جي سڃاڻپ ڪندڙ، موڪلڻ جي سڃاڻپ ڪندڙ ۽ ٻيون گھڻيون معلومات شامل آھن.
بهرحال، اسان کي اهو ڄاڻڻ جي ضرورت ناهي ته "هي ڪهڙي قسم جو اعتراض آهي" - ڪم جو حصو اڳ ۾ ئي اسان لاء ڪيو ويو آهي. اچو ته ڏسون اندر ڇا آهي:
وصول ٿيل پيغام پڙهڻ يا حصو 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 جي نالي سان محفوظ ڪريون يا جيڪو به توهان کي پسند اچي، عنوان تبديل ڪريو ۽ تبصرو ڪريو سڀ اڳ ۾ لکيل ڪوڊ ذريعي
يقينا، توهان لکت جي متن ۾ هڪ وڏي لغت لکي سگهو ٿا، پر اهو مڪمل طور تي نقطي جي ڀرسان آهي.
سو اچو ته ڏسون ته ڪهڙي پاور شيل ڪم ڪري سگهي ٿي عام طور تي.
عام طور تي، هن کي پرواه ناهي ته ڪهڙي فائل سان ڪم ڪيو وڃي، اهو اسان لاء ڪو مسئلو ناهي.
اسان وٽ هڪ اختيار آهي: 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
اچو ته ان کي استعمال ڪندي فائلن ۾ لکڻ جي ڪوشش ڪريون نموني.
$MyFilenameExample06 = $ScriptDir + "Example06.xml"
$MyVocabExample4AsArray = Import-Clixml -Path $MyFilenameExample06
# $MyVocabExample4AsArray
# $MyVocabExample4AsArray[0]
# и немного о совершенно неочевидных нюансах. Powershell время от времени ведет себя не так, как вроде бы как бы стоило бы ожидать бы.
# например у меня эти два вывода отличаются
# Write-Output $MyVocabExample4AsArray
# write-host $MyVocabExample4AsArray
اچو ته ڪم ڏانهن واپس وڃو. اسان هڪ ٽيسٽ فائل لکيو، ان کي پڙهو، اسٽوريج فارميٽ صاف آهي، جيڪڏهن ضروري هجي ته، توهان لائنن کي شامل ڪرڻ ۽ ختم ڪرڻ لاء هڪ الڳ ننڍڙو فائيل ايڊيٽر لکي سگهو ٿا.
ائين ڪرڻ جي ڪا ضرورت ناهي، ۽ جيڪڏهن $MyToken هر بوٽ لاءِ هڪ آهي، ته پوءِ $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 جي وچ ۾ بي ترتيب انٽيجر حاصل ڪريو Get-Random -Maximum 100
تنهن ڪري، 0..1 لاءِ اسان کي سائيز 0..2 مقرر ڪرڻ جي ضرورت آهي، وڌ ۾ وڌ عنصر نمبر = 1 سان.
7. ايندڙ پيغامن جي پروسيسنگ ۽ وڌ ۾ وڌ قطار جي ڊيگهه
اسان اڳي ڪٿي بيٺا هئاسين؟ اسان وٽ حاصل ڪيل متغير $MyMessageGet آهي
۽ ان مان حاصل ڪيل $Content4Pars01، جنهن مان اسان کي دلچسپي آهي Content4Pars01.result صف جي عناصرن ۾
اچو ته حاصل ڪيل هر شي ذريعي وڃو ۽ هڪ جواب موڪليو جيڪڏهن پيغام / لفظ هو
تعمير جو ڪيس، جيڪو ڪجهه بيان ڪري ٿو if-elseif، سڏيو ويندو آهي پاور شيل ۾ سوئچ ذريعي. ساڳئي وقت، هيٺ ڏنل ڪوڊ استعمال ڪري ٿو -وائلڊ ڪارڊ ڪي، جيڪو مڪمل طور تي غير ضروري ۽ نقصانڪار آهي.
ڪجھ ڪوڊ #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 پيٽرول، ۽ &timeout، &limit، &parse_mode=HTML ۽ &disable_web_page_preview=true اڃا ضرورت ناھي.
لاء دستاويز telegram api هتي آهي اهو اڇو ۽ انگريزي ۾ چوي ٿو: پهرين اپڊيٽ جي سڃاڻپ ڪندڙ کي واپس ڪيو وڃي. اڳ ۾ مليل تازه ڪارين جي سڃاڻپ ڪندڙ جي وچ ۾ سڀ کان وڌيڪ هڪ کان وڌيڪ هجڻ گهرجي. ڊفالٽ طور، تازه ڪاريون سڀ کان پهريان کان شروع ٿينديون بغير تصديق ٿيل اپڊيٽ واپس ڪيا ويا آهن. هڪ اپڊيٽ جي تصديق ڪئي ويندي آهي جيئن ئي getUpdates سڏيو ويندو آهي هڪ سان اوٽ اعلي ان جي update_id کان. ناڪاري آفسيٽ بيان ڪري سگھجي ٿو تازه ڪاريون حاصل ڪرڻ لاءِ -آفيس اپڊيٽ کان شروع ٿيندڙ تازه ڪارين جي قطار جي آخر کان. سڀ پويون تازه ڪاريون وساري وينديون.
ها، ۽ اسان ان کي ري سيٽ ڪنداسين ۽ فنڪشن کي ٿورڙو ٻيهر لکنداسين. اسان وٽ ٻه آپشن آهن - مڪمل پيغام کي فنڪشن ڏانهن منتقل ڪريو ۽ ان کي مڪمل طور تي فنڪشن ۾ پروسيس ڪريو، يا صرف پيغام جي ID ڏيو ۽ ان کي ري سيٽ ڪريو. مثال طور، ٻيو سادو ڏسڻ ۾ اچي ٿو.
اڳي، اسان جي "سڀني نياپا" سوال اسٽرنگ وانگر نظر اچن ٿا
ڪو به توهان کي منع نٿو ڪري ته سڀ کان پهريان سڀئي پيغام وصول ڪريو، انهن تي عمل ڪريو، ۽ صرف ڪامياب پروسيسنگ جي درخواست کان پوء غير تصديق ٿيل -> تصديق ٿيل.
سڀ پروسيسنگ مڪمل ٿيڻ کان پوءِ تصديق کي ڪال ڪرڻ جو مطلب ڇو آهي؟ عمل جي وچ ۾ هڪ ناڪامي ممڪن آهي، ۽ جيڪڏهن هڪ مفت چيٽ بٽ جي مثال لاء، هڪ واحد پيغام غائب ڪجهه خاص ناهي، پوء جيڪڏهن توهان ڪنهن جي تنخواه يا ڪارڊ ٽرانزيڪشن تي عمل ڪري رهيا آهيو، نتيجو خراب ٿي سگهي ٿو.
ڪوڊ جون ڪجهه وڌيڪ لائينون
$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