diff --git a/src/Toadling.php b/src/Toadling.php index 5f9bbc9..ad517ac 100644 --- a/src/Toadling.php +++ b/src/Toadling.php @@ -3,6 +3,8 @@ namespace Omnicron\Toadling; use \Discord\Discord; +use \Discord\Parts\Channel\Message; +use \Discord\Parts\Guild\Role; use \Discord\Parts\User\Member; use \Discord\WebSockets\Intents; use \Discord\WebSockets\Event; @@ -10,6 +12,8 @@ use \Discord\WebSockets\Event; class Toadling { + public const COMMAND_NAME = 'toadling'; + protected Discord $discord; public function __construct() { @@ -23,13 +27,14 @@ class Toadling public function initialize(Discord $discord) { $discord->on(Event::GUILD_MEMBER_ADD, [$this, 'moveMemberToNotToad']); + $discord->on(Event::MESSAGE_CREATE, [$this, 'setRoleColor']); } public function moveMemberToNotToad(Member $member, Discord $discord) { if('902654364685074522' !== $member->guild_id) { return false; } - $notToadRole = $member->guild->roles->find(function ($role) { + $notToadRole = $member->guild->roles->find(function (Role $role) { return '902655062982148106' === $role->id; }); if(null === $notToadRole) { @@ -39,6 +44,40 @@ class Toadling return true; } + public function setRoleColor(Message $message, Discord $discord) { + if('902654364685074522' !== $message->guild_id) { + return false; + } + preg_match_all('/[^\s]+/', $message->content, $messageWords); + if($messageWords[0] !== '!'.self::COMMAND_NAME) { + return false; + } + if($messageWords[1] !== 'color') { + return false; + } + $color = strtoupper($messageWords[2]); + if(preg_match('/^#[0-9A-F]{6}$/', $color) !== 1) { + return false; + } + $colorRole = $message->guild->roles->find(function (Role $role) use ($color) { + return $role->name === $color; + }); + $colorInt = intval(substr($color, 1), 16); + if(null !== $colorRole) { + $message->member->addRole($colorRole); + $message->delete(); + return true; + } + $message->guild->createRole([ + 'name' => $color, + 'color' => $colorInt, + ])->done(function (Role $colorRole) use ($message) { + $message->member->addRole($colorRole); + $message->delete(); + }); + return true; + } + public function run() { $this->discord->run(); }