Twitch Pokemon بازی می کند در سال 2014 در صحنه پخش زنده در آن زمان نوپا منتشر شد و به بینندگان Twitch اجازه داد تا از طریق دستورات چت ساده، فرمان شبیهساز Game Boy را که Pokemon Red را اجرا میکند، بر عهده بگیرند. از آن زمان، همین مفهوم در مورد هر چیزی که زیر نور خورشید است به کار رفته است. سایر بازیهای ویدیویی، نصب لینوکس و حتی تجارت در بورس نیویورک همگی از طریق چت توییچ بازیسازی شدهاند.
تو ای خواننده تشنه در این فکر هستی که چگونه می توانی برشی از این عمل خوشمزه را بدست آوری. نترسید، زیرا با کمی کد سرگردان، میتوانید به چت Twitch اجازه دهید تقریباً هر چیزی را در رایانه شما، روی یا اطراف آن کنترل کند.
این فقط IRC است
نکته جالب در مورد چت Twitch این است که بر روی vanilla IRC (Internet Relay Chat) اجرا می شود. این پروتکل برای همیشه وجود داشته است و کتابخانه ها برای آسان کردن رابط وجود دارند. درست مانند استریمر اصلی پشت پوکمون Twitch Plays، ما از پایتون استفاده خواهیم کرد زیرا برای آزمایشهای کوچک سرگرمکننده مانند این عالی است. با این گفته، هر زبانی خوب عمل می کند - فقط تکنیک های مشابه را در نحو مربوطه اعمال کنید.
SimpleTwitchCommander، همانطور که من آن را در Github نامگذاری کرده ام، آشنایی با برنامه نویسی پایه پایتون را فرض می کند. کد به شما امکان می دهد از دو طریق دستورات را از چت دریافت کنید. دستورات چت را میتوان جدولبندی کرد و فقط دستوری که بیشترین رای را دارد اجرا میشود، یا میتوان مستقیماً روی هر فرمانی عمل کرد. در واقع دریافت این کد برای کنترل ربات، بازی ویدیویی یا وایپر حیوان خانگی به عهده شماست. کاری که ما در اینجا انجام می دهیم این است که با چت توییچ ارتباط برقرار کنیم و دستورات را بیرون بکشیم تا بتوانید آن را وادار کنید هر کاری که دوست دارید انجام دهد. با این گفته، برای این مثال، ما کدی را برای تجزیه دستورات یک ربات چرخ دار ساده تنظیم کرده ایم. بیایید شیرجه بزنیم
کد راه رفتن
import socket from emoji import demojize from apscheduler.schedulers.background import BackgroundScheduler
اولین کاری که باید در کد ما انجام دهیم این است که کتابخانه های مورد نیاز خود را وارد کنیم. کتابخانهها عالی هستند، آنها هدایایی از برنامهنویسان با استعداد هستند که زندگی ما را آسانتر میکنند - یا حداقل ما امیدواریم که اینطور باشد. ما در این مورد از چهار کتابخانه استفاده میکنیم، اما شما میتوانید فقط با سه کتابخانه اول بسته به برنامهتان، از پس آن برآیید. اولین، و شاید مهم ترین، این است socket
کتابخانه، که تمام ارتباطات شبکه ما را مدیریت می کند. را emoji
کتابخانه ابزاری منظم برای حذف ایموجیها از پیامهای چت در اختیار ما قرار میدهد، زیرا ممکن است نامرتب شوند. APScheduler
برای سیستم رای گیری فرمان ما استفاده می شود، که به کاربران Twitch اجازه می دهد به جای اینکه به سادگی اجازه دهند هر دستور Twitch از طریق آن عبور کند، در مورد عملکرد مورد نظر خود رای دهند.
class TwitchControl:
این عبارت کلاس را برای برنامه ما تنظیم می کند.
def __init__(self): self.server = 'irc.chat.twitch.tv' self.port = 6667 self.nickname = 'yourtwitchusername' self.token = 'oauth:youroauthkeyhere' self.channel = '#yourtwitchchannel' self.sched = BackgroundScheduler() self.sock = socket.socket() self.sock.connect((self.server,self.port)) self.sock.send(f"PASS {self.token}n".encode('utf-8')) self.sock.send(f"NICK {self.nickname}n".encode('utf-8')) self.sock.send(f"JOIN {self.channel}n".encode('utf-8'))
__init__()
یک روال خاص پایتون است که زمانی که یک شی از یک کلاس ایجاد می شود، نامیده می شود. به زبان ساده، وقتی ما تماس می گیریم TwitchControl
، کد در __init__()
اول اجرا می شود در اینجا، ما متغیرهایی ایجاد می کنیم که آدرس سرور چت Twitch، پورت، و جزئیات ورود و کانال توییچ ما را ذخیره می کند. نشانه oauth این است که چگونه سرور Twitch می داند چه کسی به کانال چت متصل می شود، و شما می توانید خود را در اینجا ایجاد کنید.
self.voteDict = {"null": 0, "fwd" : 0, "rev" : 0, "left" : 0, "right" : 0}
سپس یک متغیر خاص به نام دیکشنری ایجاد می کنیم و نام آن را می گذاریم voteDict
. دیکشنری ها عالی هستند، زیرا به ما امکان می دهند داده ها را در جفت های کوچک و منظم ذخیره کنیم. در مورد ما، ما دستورات مورد نظر خود را داریم و هر کدام یک عدد در کنار خود دارند. این با تعداد رای هر فرمان در چت مطابقت دارد. برای شروع اینها را در 0 مقداردهی اولیه می کنیم.
self.sched.add_job(self.voteCount, 'interval', seconds=2) self.sched.start()
خطوط بالا راه اندازی شد APscheduler
برای اجرای یک تابع در فواصل منظم 2 ثانیه. این تابع با نام است voteCount
، و در هر بازه دو ثانیه بررسی می کند voteDict
برای دیدن اینکه کدام دستور بیشترین رای را در چت به دست آورده است و سپس برنده را اجرا می کند. ما برمی گردیم و شمارش رأی را در مدتی دیگر بررسی خواهیم کرد. در حال حاضر، بیایید به حلقه اصلی نگاه کنیم که پس از تنظیم اولیه همه چیز اجرا می شود.
def loop(self): while True: resp = self.sock.recv(2048).decode('utf-8') if resp.startswith('PING'): self.sock.send("PONGn".encode('utf-8')) elif len(resp) > 0: respClean = demojize(resp) print(respClean) msgComponents=respClean.split(" ",3) msgUser=msgComponents[0] #get username from message msgUser = msgUser[msgUser.find(':')+1: msgUser.find('!')] msgContent=msgComponents[3] #print message content
هنگامی که وارد حلقه while شدیم، باید داده ها را از سرور IRC دریافت کنیم. اگر دادهها "PING" هستند، طبق تمرین معمول IRC برای زنده نگه داشتن اتصال با "PONG" پاسخ میدهیم. در غیر این صورت، داده ها را با تابع demojize پاک می کنیم که هر شکلک موجود در پیام را با متن ساده جایگزین می کند. سپس از توابع رشته ای برای تقسیم پیام خام از سرور به اجزای آن استفاده می کنیم: نام کاربری که پیام را ارسال کرده و محتوای واقعی پیام. در این مرحله، میتوانیم مستقیماً یک دستور را جستجو کنیم، و اگر میخواهیم که مستقیماً پیامها را فعال کند، میتوانیم آن را در اینجا انجام دهیم.
if msgContent.find("LIGHTS") >=0: print("Turning Lights On!") #code to turn lights on here
از طرف دیگر، اگر میخواهیم دستورات را در چت جمعآوری کنیم و ببینیم کدام یک محبوبترین رای داده است، میتوانیم این کار را نیز انجام دهیم. هر بار که یکی از دستورات زیر شناسایی شد، فیلد مربوط به آن در voteDict
فرهنگ لغت 1 افزایش می یابد.
if msgContent.find("FWD") >=0: self.voteDict["fwd"] = self.voteDict["fwd"] +1 if msgContent.find("REV") >=0: self.voteDict["rev"] = self.voteDict["rev"] +1 if msgContent.find("LEFT") >=0: self.voteDict["left"] = self.voteDict["left"] +1 if msgContent.find("RIGHT") >=0: self.voteDict["right"] = self.voteDict["right"] +1
این تمام کاری است که حلقه اصلی ما انجام می دهد. این داده ها را از سرور IRC هنگام ورود دریافت می کند، آنها را پردازش می کند و تعداد آرا را از دستورات دریافتی افزایش می دهد. برای اینکه عملاً بر اساس آن آرا عمل کنیم، باید به سراغ ما برویم voteCount
تابع. با تشکر از APscheduler
روتینی که قبلاً تنظیم کردیم، این به طور خودکار هر دو ثانیه اجرا می شود.
def voteCount(self): #function responsible for checking votes and executing commands print('Counting votes and executing command') voteWinner = max(self.voteDict, key=self.voteDict.get) print("biggest vote:" + voteWinner) nullCheck=all(x==0 for x in self.voteDict.values()) if nullCheck: print('doing a nullo') elif voteWinner=="fwd": print('going Forward') #code to go forward here elif voteWinner=="rev": print('going Reverse') #code to go reverse here elif voteWinner=="left": print('going Left') #code to go left here elif voteWinner=="right": print('going Right') #code to go right here self.voteDict = {"null" : 0, "fwd" : 0, "rev" : 0, "left" : 0, "right" : 0}
voteCount یک تابع ساده است که از توابع دیکشنری داخلی پایتون برای تعیین دستوری که بیشترین رای را داشته است استفاده می کند. توجه داشته باشید که ما همچنین بررسی می کنیم که آیا همه رای ها برابر با صفر هستند - در این صورت، ما نباید هیچ کاری انجام دهیم، بنابراین کد nullCheck می شود. پس از مشخص شدن برنده، کد دستور مربوطه را می توان اجرا کرد.
چه چیزی را در Twitch آزاد خواهید کرد؟
کمی دیگ بخار بیشتری برای به هم زدن چیزها وجود دارد، اما اساساً، اینها بلوک هایی هستند که باعث می شوند همه چیز کار کند. اگر میخواهید در خانه کار کنید، چیز واقعی را از Github بگیرید. بدیهی است که از اینجا به بعد، شکل دادن کد به هدف خاص شما صرفاً یک موضوع سفارشی سازی است. اگر به دنبال کنترل یک ربات هستید، دستورات خود را برای سرووها یا موتورها در نقاط لازم قرار دهید، یا دستورالعمل ها را به صورت سریال به میکروکنترلر خود ارسال کنید که این وظایف را انجام می دهد. از طرف دیگر، اگر با یک بازی در یک شبیه ساز کار می کنید، کد پایتون را به سادگی از فشار دادن دکمه های مربوطه شبیه سازی کنید.
کد به هیچ وجه بهینه نیست. نوشتن این مقاله حدود دو برابر زمان نوشتن خود کد طول کشید. احتمالاً با استفاده از کدهای مدیریت رشته ایدهآلتر و دیگر ترفندهایی از این دست، دستاوردهای بزرگی حاصل میشود. کار بیشتر در جمع کردن همه اینها در یک کتابخانه مرتب به عنوان تمرینی برای خواننده باقی مانده است. امیدواریم این شما را به خوبی در راه داشتن سرگرمی جمعسپاری در توییچ قرار دهد! مثل همیشه هک مبارک.
- عمل
- کاربرد
- دور و بر
- مقاله
- بزرگترین
- بیت
- صدا
- بررسی
- چک
- رمز
- ارتباط
- محتوا
- ایجاد
- داده ها
- از Emoji
- تبادل
- ورزش
- پایان
- نام خانوادگی
- به جلو
- سرگرمی
- تابع
- بازی
- بازیها
- GIF
- GitHub
- بزرگ
- هک
- اینجا کلیک نمایید
- چگونه
- HTTPS
- بزرگ
- اینترنت
- IT
- پیوستن
- زبان
- کتابخانه
- لینوکس
- طولانی
- مدیریت
- محبوبترین
- مرتب
- شبکه
- نیویورک
- دیگر
- مردم
- گوگل
- محبوب
- برنامه
- برنامه نويسي
- کشیدن
- پــایتــون
- خام
- خواننده
- معکوس
- ربات
- ربات ها
- دویدن
- در حال اجرا
- تنظیم
- ساده
- So
- انشعاب
- آغاز شده
- بیانیه
- موجودی
- opbevare
- سیستم
- زمان
- رمز
- تجارت
- tv
- انقباض
- us
- کاربران
- تصویری
- بازی های ویدئویی
- رای
- رای گیری
- تماشا کردن
- WHO
- مهاجرت کاری
- نوشته
- X
- صفر