/** * Returns the formatted data. * * @param array $data * @param Discord $discord * @return Message */ public function getData($data, $discord) { $guildPart = new Guild(['id' => $data->id, 'name' => $data->name, 'icon' => $data->icon, 'region' => $data->region, 'owner_id' => $data->owner_id, 'roles' => $data->roles, 'joined_at' => $data->joined_at, 'afk_channel_id' => $data->afk_channel_id, 'afk_timeout' => $data->afk_timeout, 'large' => $data->large, 'features' => $data->features, 'splash' => $data->splash, 'emojis' => $data->emojis], true); $channels = new Collection(); foreach ($data->channels as $channel) { $channelPart = new Channel(['id' => $channel->id, 'name' => $channel->name, 'type' => $channel->type, 'topic' => $channel->topic, 'guild_id' => $data->id, 'position' => $channel->position, 'last_message_id' => $channel->last_message_id, 'permission_overwrites' => $channel->permission_overwrites], true); $channels->push($channelPart); } $guildPart->setCache('channels', $channels); // guild members $members = new Collection(); foreach ($data->members as $member) { $memberPart = new Member(['user' => $member->user, 'roles' => $member->roles, 'mute' => $member->mute, 'deaf' => $member->deaf, 'joined_at' => $member->joined_at, 'guild_id' => $data->id, 'status' => 'offline', 'game' => null], true); // check for presences foreach ($data->presences as $presence) { if ($presence->user->id == $member->user->id) { $memberPart->status = $presence->status; $memberPart->game = $presence->game; } } $members->push($memberPart); } $guildPart->setCache('members', $members); return $guildPart; }
public function data($msgData, $botData) { $channelData = Channel::find($msgData["channel_id"]); if ($channelData->is_private == true) { $channelData->setAttribute("name", $msgData->author->username); } $msgData = (object) array("isBotOwner" => false, "user" => $msgData, "message" => (object) array("lastSeen" => $this->db->queryField("SELECT lastSeen FROM usersSeen WHERE id = :id", "lastSeen", array(":id" => $msgData->author->id)), "lastSpoke" => $this->db->queryField("SELECT lastSpoke FROM usersSeen WHERE id = :id", "lastSpoke", array(":id" => $msgData->author->id)), "timestamp" => $msgData->timestamp->toDateTimeString(), "id" => $msgData->author->id, "message" => $msgData->content, "channelID" => $msgData->channel_id, "from" => $msgData->author->username, "fromID" => $msgData->author->id, "fromDiscriminator" => $msgData->author->discriminator, "fromAvatar" => $msgData->author->avatar), "channel" => $channelData, "guild" => $channelData->is_private ? (object) array("name" => "private conversation") : Guild::find($channelData->guild_id), "botData" => $botData); return $msgData; }
/** * */ protected function fetchDatabaseServer() { $cls = $this->container->getParameter('server_class'); /** @var Server $server */ $server = $this->getRepository($cls)->findOneBy(['identifier' => $this->clientServer->getAttribute('id')]); if (empty($server)) { $server = $this->createDatabaseServer(); } return $server; }
/** * Runs the WebSocket client. * * @return void */ public function run() { $this->wsfactory->__invoke($this->gateway)->then(function (WebSocketInstance $ws) { $this->ws = $ws; $ws->on('message', function ($data, $ws) { $this->emit('raw', [$data, $this->discord]); $data = json_decode($data); if (!is_null($handler = $this->handlers->getHandler($data->t))) { $handler = new $handler(); $handlerData = $handler->getData($data->d, $this->discord); $newDiscord = $handler->updateDiscordInstance($handlerData, $this->discord); $this->emit($data->t, [$handlerData, $this->discord, $newDiscord]); $this->discord = $newDiscord; } if ($data->t == Event::READY) { $tts = $data->d->heartbeat_interval / 1000; $this->loop->addPeriodicTimer($tts, function () use($ws) { $this->send(['op' => 1, 'd' => microtime(true) * 1000]); }); $content = $data->d; // set user settings obtain guild data etc. // user client settings $this->discord->user_settings = $content->user_settings; // guilds $guilds = new Collection(); foreach ($content->guilds as $guild) { $guildPart = new Guild(['id' => $guild->id, 'name' => $guild->name, 'icon' => $guild->icon, 'region' => $guild->region, 'owner_id' => $guild->owner_id, 'roles' => $guild->roles, 'joined_at' => $guild->joined_at, 'afk_channel_id' => $guild->afk_channel_id, 'afk_timeout' => $guild->afk_timeout, 'large' => $guild->large, 'features' => $guild->features, 'splash' => $guild->splash, 'emojis' => $guild->emojis], true); $channels = new Collection(); foreach ($guild->channels as $channel) { $channelPart = new Channel(['id' => $channel->id, 'name' => $channel->name, 'type' => $channel->type, 'topic' => $channel->topic, 'guild_id' => $guild->id, 'position' => $channel->position, 'last_message_id' => $channel->last_message_id, 'permission_overwrites' => $channel->permission_overwrites], true); $channels->push($channelPart); } $guildPart->setCache('channels', $channels); // preload $guildPart->getBansAttribute(); // guild members $members = new Collection(); foreach ($guild->members as $member) { $memberPart = new Member(['user' => $member->user, 'roles' => $member->roles, 'mute' => $member->mute, 'deaf' => $member->deaf, 'joined_at' => $member->joined_at, 'guild_id' => $guild->id, 'status' => 'offline', 'game' => null], true); // check for presences foreach ($guild->presences as $presence) { if ($presence->user->id == $member->user->id) { $memberPart->status = $presence->status; $memberPart->game = $presence->game; } } $members->push($memberPart); } $guildPart->setCache('members', $members); $guilds->push($guildPart); } $this->discord->setCache('guilds', $guilds); // after we do everything, emit ready $this->emit('ready', [$this->discord]); } }); $ws->on('close', function ($ws) { $this->emit('close', [$ws, $this->discord]); }); $ws->on('error', function ($error, $ws) { $this->emit('error', [$error, $ws, $this->discord]); }); if (!$this->sentLoginFrame) { $this->sendLoginFrame(); $this->sentLoginFrame = true; $this->emit('sent-login-frame', [$ws, $this->discord]); } }, function ($e) { $this->emit('connectfail', [$e]); $this->loop->stop(); }); $this->loop->run(); }