Buat Kode Kontrol Obrolan Twitch Anda Sendiri Untuk Robot — Atau Hanya Tentang Apa Pun!

Node Sumber: 805836

Twitch Memainkan Pokemon memasuki dunia streaming langsung yang baru muncul pada tahun 2014, memungkinkan pemirsa Twitch mengambil alih kendali emulator Game Boy yang menjalankan Pokemon Red melalui perintah obrolan sederhana. Sejak itu, konsep yang sama diterapkan pada segala sesuatu di bawah matahari. Video game lainnya, instalasi Linux, dan bahkan perdagangan di Bursa Efek New York semuanya telah dimainkan melalui obrolan Twitch.

TwitchPlaysPokemon memulai kegemaran dalam pengendalian crowdsourcing atas video game, robot, dan apa saja lainnya.

Anda, pembaca yang haus, bertanya-tanya bagaimana Anda bisa mendapatkan bagian dari aksi lezat ini. Jangan takut, karena dengan sedikit kode bobrok, Anda dapat membiarkan obrolan Twitch mengambil alih hampir semua hal di, di, atau di sekitar komputer Anda.

Itu hanya IRC

Hal hebat tentang obrolan Twitch adalah ia berjalan pada vanilla IRC (Internet Relay Chat). Protokol ini telah ada sejak lama, dan perpustakaan hadir untuk memudahkan antarmuka. Sama seperti streamer asli di balik Twitch Plays Pokemon, kami akan menggunakan Python karena ini bagus untuk eksperimen kecil yang menyenangkan seperti ini. Oleh karena itu, bahasa apa pun bisa digunakan — cukup terapkan teknik yang sama dalam sintaksis yang relevan.

Komandan Twitch Sederhana, seperti yang saya beri nama di Github, mengasumsikan keakraban dengan pemrograman dasar Python. Kode ini memungkinkan Anda mengambil perintah dari obrolan dengan dua cara. Perintah dari obrolan dapat ditabulasikan, dan hanya perintah dengan suara terbanyak yang dieksekusi, atau setiap perintah dapat ditindaklanjuti secara langsung. Sebenarnya mendapatkan kode ini untuk mengontrol robot, video game, atau ular peliharaan Anda terserah Anda. Apa yang kami lakukan di sini adalah berinteraksi dengan obrolan Twitch dan mengeluarkan perintah sehingga Anda dapat melakukan apa pun yang Anda suka. Oleh karena itu, untuk contoh ini, kami telah menyiapkan kode untuk mengurai perintah untuk robot beroda sederhana. Mari selami.

Berjalan Kode

 import socket from emoji import demojize from apscheduler.schedulers.background import BackgroundScheduler 
Dengan kode ini, Anda juga dapat menonton orang secara acak dari Internet mengarahkan robot Anda langsung ke semak-semak.

Hal pertama yang harus dilakukan dalam kode kita adalah mengimpor perpustakaan yang kita perlukan. Perpustakaan itu hebat, mereka adalah hadiah dari programmer berbakat yang membuat hidup kita lebih mudah — atau setidaknya kita berharap demikian. Kami menggunakan empat perpustakaan dalam kasus ini, tetapi Anda dapat menggunakan hanya tiga perpustakaan pertama tergantung pada aplikasi Anda. Yang pertama, dan mungkin yang paling penting, adalah socket perpustakaan, yang menangani semua komunikasi jaringan kami. Itu emoji Library memberi kita alat yang bagus untuk menghapus emoji dari pesan obrolan, karena bisa jadi berantakan. APScheduler digunakan untuk sistem pemungutan suara perintah kami, yang memungkinkan pengguna Twitch memberikan suara pada tindakan yang mereka inginkan, bukan sekadar membiarkan setiap perintah Twitch lewat.

class TwitchControl:

Pernyataan ini menyiapkan kelas untuk program kami.

 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__() adalah rutinitas Python khusus yang dipanggil ketika sebuah objek dibuat dari suatu kelas. Secara sederhana, saat kita menelepon TwitchControl, kode masuk __init__() berjalan terlebih dahulu. Di sini, kami membuat variabel yang menyimpan alamat server obrolan Twitch, port, dan login Twitch serta detail saluran kami. Token oauth adalah bagaimana server Twitch mengetahui siapa yang terhubung ke saluran obrolan, dan Anda dapat membuatnya sendiri di sini.

 self.voteDict = {"null": 0, "fwd" : 0, "rev" : 0, "left" : 0, "right" : 0} 

Selanjutnya, kita membuat variabel khusus yang disebut kamus, dan memberinya nama voteDict. Kamus sangat bagus, karena memungkinkan kita menyimpan data dalam pasangan-pasangan kecil yang rapi. Dalam kasus kami, kami memiliki perintah yang kami inginkan, dan masing-masing perintah memiliki nomor di sebelahnya. Ini akan sesuai dengan jumlah suara untuk setiap perintah dalam obrolan. Kami menginisialisasi ini pada 0 untuk memulai.

 self.sched.add_job(self.voteCount, 'interval', seconds=2) self.sched.start() 

Baris di atas sudah diatur APscheduler untuk menjalankan fungsi secara berkala 2 detik. Fungsi itu sesuai dengan namanya voteCount, dan pada setiap interval dua detik ia memeriksa voteDict untuk melihat perintah mana yang mendapat suara terbanyak dalam obrolan, lalu mengeksekusi pemenangnya. Kami akan kembali dan melihat voteCount sebentar lagi. Untuk saat ini, mari kita lihat loop utama yang berjalan setelah semuanya diinisialisasi.

 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 

Setelah kita masuk ke loop while, kita perlu menerima data dari server IRC. Jika datanya adalah “PING”, kami merespons dengan “PONG” sesuai praktik IRC pada umumnya untuk menjaga koneksi tetap hidup. Jika tidak, kami membersihkan data dengan fungsi demojize, yang menggantikan emoji apa pun dalam pesan dengan teks biasa. Kemudian kita menggunakan fungsi string untuk membagi pesan mentah dari server menjadi komponen-komponennya: nama pengguna yang mengirim pesan, dan isi pesan sebenarnya. Pada titik ini, kita dapat mencari perintah secara langsung, dan jika kita ingin perintah tersebut langsung memicu pesan, kita dapat melakukannya di sini.

 if msgContent.find("LIGHTS") >=0: print("Turning Lights On!") #code to turn lights on here 

Alternatifnya, jika kita ingin mengumpulkan perintah dalam obrolan dan melihat mana yang terpilih sebagai yang paling populer, kita juga bisa melakukannya. Setiap kali salah satu dari perintah berikut terdeteksi, bidang yang sesuai di voteDict kamus bertambah 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 

Hanya itu yang dilakukan loop utama kami. Ia menerima data dari server IRC saat data tersebut masuk, memprosesnya, dan menambah jumlah suara dari perintah yang masuk. Untuk benar-benar menindaklanjuti suara tersebut, kita perlu melakukan tindakan kita sendiri voteCount fungsi. Terima kasih kepada APscheduler rutin yang kita atur sebelumnya, ini otomatis berjalan setiap dua detik.

 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 adalah fungsi sederhana, yang menggunakan fungsi kamus bawaan Python untuk menentukan perintah yang memiliki suara terbanyak. Perhatikan bahwa kita juga memeriksa untuk melihat apakah semua suara sama dengan nol — dalam hal ini, kita tidak boleh melakukan apa pun, maka kode nullCheck. Setelah pemenang ditentukan, kode untuk perintah yang relevan dapat dijalankan.

Apa yang Akan Anda Keluarkan di Twitch?

Masih ada lagi cara untuk merangkai segala sesuatunya, tetapi pada dasarnya, ini adalah blok yang membuat semuanya berfungsi. Dapatkan yang asli dari Github jika Anda ingin bermain-main di rumah. Jelas, dari sini, yang penting hanyalah penyesuaian untuk membentuk kode sesuai tujuan khusus Anda. Jika Anda ingin mengendalikan robot, letakkan perintah untuk servo atau motor di tempat yang diperlukan, atau kirimkan instruksi melalui serial ke mikrokontroler yang menangani tugas tersebut. Alternatifnya, jika Anda bekerja dengan game di emulator, mintalah kode Python untuk meniru penekanan tombol yang relevan.

Kode ini sama sekali tidak dioptimalkan; menulis artikel ini memakan waktu sekitar dua kali lebih lama dari menulis kode itu sendiri. Kemungkinan ada keuntungan besar yang bisa diperoleh dengan menggunakan kode manajemen string yang lebih ideal dan penyesuaian lainnya. Pekerjaan lebih lanjut dalam membungkus semua ini di perpustakaan yang rapi diserahkan sebagai latihan bagi pembaca. Semoga ini membantu Anda bersenang-senang melalui crowdsourcing di Twitch! Seperti biasa, selamat meretas.

Sumber: https://hackaday.com/2021/04/08/code-your-own-twitch-chat-controls-for-robots-or-just-about-anything-else/

Stempel Waktu:

Lebih dari Hack Sehari