MiniCliを使用してPHPでツイスト/IRCのchatbotを作成する
あなたの何人かが知っているかもしれないように、私はしていましたlive coding on Twitch 今から数ヶ月間、私は多くの実験を行うことができ、私の設定でさまざまな設定を試してみました.
Twitchは私がまだ慣れている機能と詳細の負荷で楽しいプラットフォームです.私がビデオに含まれるために私のストリームに組み込まれたかった1つのものはライブチャットでした、しかし、既製の解決のために捜した後に、私はLinuxのためのOBSが他のプラットホームで利用できるすべての特徴を持っていないと理解しました.それはもちろん、私がそれを成し遂げるのを妨げませんでした!私はいつも道を見つける.)
このガイドでは、どのように私はPHPで使用してtwitch chatbot実装を共有しますMinicli , PHPの依存関係のないフレームワーク.私は、私が私のライブストリームセットアップにそれを取り入れた方法も共有します.
この実装はTwitch Guide for Chatbots .
あなたがむしろrepoをクローン化して、それを試してみたいならばgithub repository or download the 0.1.0 release .
TwitchはすべてのチャットのIRCサーバーを使用します.あなたのストリームチャットは、実際にあなたのtwitchのユーザー名の同じ名前のチャンネルです.chatbotはtwitchのIRCサーバに接続し、認証し、ストリームチャネルに参加します.そこから、他のユーザーによって送信されたメッセージを読むことができますし、端末に印刷したり、より高度なことを行う.
フォローアップするには、 作曲家は新しいミニカープロジェクトを作成する 小言
Minicliに基づいた新しいプロジェクトをブートするには、作曲家を使用します.
あなたは名前を変更できます
これにより、コマンドオートローディングがMiniCliでどのように動作するかというアイデアが得られます.
新しいコマンドを作成します
OAuthトークンはauthenticate TwitchのIRCサーバーでは、あなたのストリームチャットへのアクセスを与える.
すぐにあなたのアカウントのトークンを取得するにはTwitch Chat OAuth Password Generator (twitchによって提供されます).
OAuthトークンを取得したら、
TwitchのIRCサーバに接続するには、ソケットを使用します.ソケットでの作業は、特定のポートにある削除サーバへの接続を確立することを除いて、ファイルの操作に非常に似ています.これらは私たちが使用する方法です.
socket_create : メソッド呼び出しで提供されたアドレスとポートを使用して新しいソケットを作成します.
socket_read : ソケットから読み込みます.
socket_write : ソケットに書き込みます.
socket_last_error : ソケットから最後のエラーを取得します.
socket_close : ソケットを閉じます. 次のクラスは、ソケットを介してtwitch ircサーバに接続し、与えられたNickとOAuthパスワードで認証し、ストリームチャネルに参加するメソッドを提供します.サーバからのメッセージを読み書きできます.
我々は、現在使用します
終了するには、ヒットする必要があります
すべての情報を必要としないので、次のステップで出力前にメッセージを解析し始める.
あなたがしばらくの間それを開いておくならば、あなたが通知するもう一つのものは、サーバーが定期的にあなたを送るということです
メッセージの解析は重要です. 誰がメッセージを送ったかを知っていてください. 特定の文字列を認識し、必要に応じてメッセージを扱います チャットに送信された新しいメッセージによって生成された出力を見てみましょう.
これは更新されたコントローラーです.
これが私の端末( zshで)を見ているのです.
ここから、メッセージの解析を改善することができますので、チャットコマンドを実装し、リストを無視し、頻繁に視聴者の認識.
今あなたの端末上で実行しているチャットを持っている場合は、オーバーレイを作成するには、OBSのスタジオ上のウィンドウソースを使用することができます.
私は通常、ストリームの背景と私は、チャットウィンドウとおそらくウェブカメラのように修正される要素のシーンを作成することです.端末のウィンドウや端末のテーマやフォントサイズなどのサイズを調整する必要があります.
私は、チャットウィンドウのカスタムプロファイルを作成することですので、私は完全に透明な背景とカスタムフォントを持つことができます.
このチュートリアルを楽しんでいただければ幸いです
Twitchは私がまだ慣れている機能と詳細の負荷で楽しいプラットフォームです.私がビデオに含まれるために私のストリームに組み込まれたかった1つのものはライブチャットでした、しかし、既製の解決のために捜した後に、私はLinuxのためのOBSが他のプラットホームで利用できるすべての特徴を持っていないと理解しました.それはもちろん、私がそれを成し遂げるのを妨げませんでした!私はいつも道を見つける.)
このガイドでは、どのように私はPHPで使用してtwitch chatbot実装を共有しますMinicli , PHPの依存関係のないフレームワーク.私は、私が私のライブストリームセットアップにそれを取り入れた方法も共有します.
この実装はTwitch Guide for Chatbots .
あなたがむしろrepoをクローン化して、それを試してみたいならばgithub repository or download the 0.1.0 release .
Twitchのストリームチャットについて
TwitchはすべてのチャットのIRCサーバーを使用します.あなたのストリームチャットは、実際にあなたのtwitchのユーザー名の同じ名前のチャンネルです.chatbotはtwitchのIRCサーバに接続し、認証し、ストリームチャネルに参加します.そこから、他のユーザーによって送信されたメッセージを読むことができますし、端末に印刷したり、より高度なことを行う.
必要条件
フォローアップするには、
php-cli
, 7.2以上ステップ1 :アプリケーションの起動
Minicliに基づいた新しいプロジェクトをブートするには、作曲家を使用します.
composer create-project --prefer-dist minicli/application
では、新しく作成したディレクトリにアクセスします.cd minichat
あなたが中を見るならばminichat
ディレクトリ、あなたが見つけるものは、ここにあります:app composer.json composer.lock LICENSE minicli README.md vendor
重要なディレクトリとファイルapp
: カスタムアプリケーションファイルはここにあります.これはコマンドフォルダがデフォルトでどこにあるかです.minicli
: minicliスクリプトはコマンドラインからコールされる実行可能ファイルです.これはアプリケーションがブートストラップされる場所です.minicli
あなたが望むもののためのスクリプト.これは通常、アプリケーションの名前ですので、名前を変更しますminichat
:mv minicli minichat
を実行するhelp
コマンドが期待通りに動作していることを確認します../minichat help
次のように出力してください.Available Commands
help
└──table
└──test
アプリケーションは3つのデモコマンドが付属しています.これは各コマンドコントローラを見つけることができます.help
: app/Command/Help/DefaultController.php
help table
: app/Command/Help/TableController.php
help test
: app/Command/Help/TestController.php
新しいコマンドを作成します
twitch
. まず、ディレクトリを作成しますTwitch
内部app/Command
:mkdir app/Command/Twitch
新しいファイルを開くDefaultController.php
このフォルダの中.次のブートストラップコンテンツを配置します.<?php
#label app/Command/Twitch/DefaultController.php
namespace App\Command\Twitch;
use Minicli\Command\CommandController;
class DefaultController extends CommandController
{
public function handle()
{
$this->getPrinter()->info("Starting Minichat...");
}
}
ファイルを保存した後、次のコマンドを実行できます../minichat twitch
これにより、handle
コマンドコントローラクラス内のメソッド.ステップ2:Twitch OAuthキーを得る
OAuthトークンはauthenticate TwitchのIRCサーバーでは、あなたのストリームチャットへのアクセスを与える.
すぐにあなたのアカウントのトークンを取得するにはTwitch Chat OAuth Password Generator (twitchによって提供されます).
OAuthトークンを取得したら、
minichat
アプリケーションフォルダのルートに配置されたスクリプトで、あとでコマンドコントローラからアクセスする2つの設定項目があります.twitch_user
and twitch_oauth
:#!/usr/bin/php
<?php
if (php_sapi_name() !== 'cli') {
exit;
}
require __DIR__ . '/vendor/autoload.php';
use Minicli\App;
$app = new App([
'app_path' => __DIR__ . '/app/Command',
#Twitch
'twitch_user' => 'YOUR_TWITCH_USERNAME',
'twitch_oauth' => 'YOUR_TWITCH_OAUTH_TOKEN'
]);
$app->setSignature("Minichat for Twitch.\n./minichat twitch");
$app->runCommand($argv);
場所にこれらの資格情報を使用すると、サーバーに接続するに移動することができます.ステップ3 :ソケットを使ってサーバに接続する
TwitchのIRCサーバに接続するには、ソケットを使用します.ソケットでの作業は、特定のポートにある削除サーバへの接続を確立することを除いて、ファイルの操作に非常に似ています.これらは私たちが使用する方法です.
socket_create : メソッド呼び出しで提供されたアドレスとポートを使用して新しいソケットを作成します.
socket_read : ソケットから読み込みます.
socket_write : ソケットに書き込みます.
socket_last_error : ソケットから最後のエラーを取得します.
socket_close : ソケットを閉じます.
<?php
#app/TwitchChatClient.php
namespace App;
class TwitchChatClient
{
protected $socket;
protected $nick;
protected $oauth;
static $host = "irc.chat.twitch.tv";
static $port = "6667";
public function __construct($nick, $oauth)
{
$this->nick = $nick;
$this->oauth = $oauth;
}
public function connect()
{
$this->socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (socket_connect($this->socket, self::$host, self::$port) === FALSE) {
return null;
}
$this->authenticate();
$this->setNick();
$this->joinChannel($this->nick);
}
public function authenticate()
{
$this->send(sprintf("PASS %s", $this->oauth));
}
public function setNick()
{
$this->send(sprintf("NICK %s", $this->nick));
}
public function joinChannel($channel)
{
$this->send(sprintf("JOIN #%s", $channel));
}
public function getLastError()
{
return socket_last_error($this->socket);
}
public function isConnected()
{
return !is_null($this->socket);
}
public function read($size = 256)
{
if (!$this->isConnected()) {
return null;
}
return socket_read($this->socket, $size);
}
public function send($message)
{
if (!$this->isConnected()) {
return null;
}
return socket_write($this->socket, $message . "\n");
}
public function close()
{
socket_close($this->socket);
}
}
このクラスをファイル名TwitchChatClient.php
インサイドapp
フォルダ.我々は、現在使用します
TwitchChatClient
を処理するコントローラのクラスtwitch
コマンド<?php
# app/Command/Twitch/DefaultController.php
namespace App\Command\Twitch;
use App\TwitchChatClient;
use Minicli\Command\CommandController;
class DefaultController extends CommandController
{
public function handle()
{
$this->getPrinter()->info("Starting Minichat...");
$app = $this->getApp();
#obtains twitch credentials from app config
$twitch_user = $app->config->twitch_user;
$twitch_oauth = $app->config->twitch_oauth;
if (!$twitch_user OR !$twitch_oauth) {
$this->getPrinter()->error("Missing 'twitch_user' and/or 'twitch_oauth' config settings.");
return;
}
$client = new TwitchChatClient($twitch_user, $twitch_oauth);
$client->connect();
if (!$client->isConnected()) {
$this->getPrinter()->error("It was not possible to connect.");
return;
}
$this->getPrinter()->info("Connected.\n");
while (true) {
$content = $client->read(512);
$this->getPrinter()->out($content . "\n", "dim");
sleep(5);
}
}
}
あなたが走るときtwitch
コマンドを再度、あなたのチャットと印刷メッセージに接続することができるはずです../minichat twitch
次のように出力します.Starting Minichat...
Connected.
:tmi.twitch.tv 001 erikaheidi :Welcome, GLHF!
:tmi.twitch.tv 002 erikaheidi :Your host is tmi.twitch.tv
:tmi.twitch.tv 003 erikaheidi :This server is rather new
:tmi.twitch.tv 004 erikaheidi :-
:tmi.twitch.tv 375 erikaheidi :-
:tmi.twitch.tv 372 erikaheidi :You are in a maze of twisty passages, all alike.
:tmi.twitch.tv 376 erikaheidi :>
:[email protected] JOIN #erikaheidi
:erikaheidi.tmi.twitch.tv 353 erikaheidi = #erikaheidi :erikaheidi
:erikaheidi.tmi.twitch.tv 366 erikaheidi #erikaheidi :End of /NAMES list
さて、あなたのストリームマネージャをTwitch ( Creatorのダッシュボードの内部)にアクセスし、チャットウィンドウでメッセージを送信するなら、以下のようなメッセージを受け取ります.終了するには、ヒットする必要があります
CTRL+C
.すべての情報を必要としないので、次のステップで出力前にメッセージを解析し始める.
あなたがしばらくの間それを開いておくならば、あなたが通知するもう一つのものは、サーバーが定期的にあなたを送るということです
PING
メッセージを送信し、接続を維持するにはPONG
. 次のステップでも実装します.ステップ4 :構文解析メッセージ
メッセージの解析は重要です.
:[email protected] PRIVMSG #erikaheidi :testing minichat
つの重要なこと:我々は、文字列を探すなら、' ping 'のようなサーバからでないメッセージを認識することができますPRIVMSG
テキストで.また、特殊文字を使用できます:
and !
それをフィルタリングして、ニック+メッセージを得るストリングで.これは更新されたコントローラーです.
<?php
#app/Command/Twitch/DefaultController.php
namespace App\Command\Twitch;
use App\TwitchChatClient;
use Minicli\Command\CommandController;
class DefaultController extends CommandController
{
public function handle()
{
$this->getPrinter()->info("Starting Minichat...");
$app = $this->getApp();
$twitch_user = $app->config->twitch_user;
$twitch_oauth = $app->config->twitch_oauth;
if (!$twitch_user OR !$twitch_oauth) {
$this->getPrinter()->error("Missing 'twitch_user' and/or 'twitch_oauth' config settings.");
return;
}
$client = new TwitchChatClient($twitch_user, $twitch_oauth);
$client->connect();
if (!$client->isConnected()) {
$this->getPrinter()->error("It was not possible to connect.");
return;
}
$this->getPrinter()->info("Connected.\n");
while (true) {
$content = $client->read(512);
//is it a ping?
if (strstr($content, 'PING')) {
$client->send('PONG :tmi.twitch.tv');
continue;
}
//is it an actual msg?
if (strstr($content, 'PRIVMSG')) {
$this->printMessage($content);
continue;
}
sleep(5);
}
}
public function printMessage($raw_message)
{
$parts = explode(":", $raw_message, 3);
$nick_parts = explode("!", $parts[1]);
$nick = $nick_parts[0];
$message = $parts[2];
$style_nick = "info";
if ($nick === $this->getApp()->config->twitch_user) {
$style_nick = "info_alt";
}
$this->getPrinter()->out($nick, $style_nick);
$this->getPrinter()->out(': ');
$this->getPrinter()->out($message);
$this->getPrinter()->newline();
}
}
コントローラを更新した後、./minichat twitch
コマンドは再び、あなただけの実際のチャットメッセージ、きれいにフォーマット表示されます.さえずりのストリームマネージャに戻って、チャットでいくつかのメッセージを送信することを忘れないでください.これが私の端末( zshで)を見ているのです.
ここから、メッセージの解析を改善することができますので、チャットコマンドを実装し、リストを無視し、頻繁に視聴者の認識.
ステップ5 : OBSオーバーレイの作成
今あなたの端末上で実行しているチャットを持っている場合は、オーバーレイを作成するには、OBSのスタジオ上のウィンドウソースを使用することができます.
私は通常、ストリームの背景と私は、チャットウィンドウとおそらくウェブカメラのように修正される要素のシーンを作成することです.端末のウィンドウや端末のテーマやフォントサイズなどのサイズを調整する必要があります.
私は、チャットウィンドウのカスタムプロファイルを作成することですので、私は完全に透明な背景とカスタムフォントを持つことができます.
このチュートリアルを楽しんでいただければ幸いです
Reference
この問題について(MiniCliを使用してPHPでツイスト/IRCのchatbotを作成する), 我々は、より多くの情報をここで見つけました https://dev.to/erikaheidi/creating-a-twitch-irc-chatbot-in-php-with-minicli-45moテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol