示例#1
0
 /**
  * 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;
 }
示例#2
0
 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;
 }
示例#4
0
 /**
  * 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();
 }