public function getFriendsUsernames(TwitterBot $bot)
 {
     $response = $bot->getClient()->getFriends(['screen_name' => $bot->getUsername()]);
     return array_map(function ($friendData) {
         return $friendData->screen_name;
     }, $response->users);
 }
 public function behave(TwitterBot $bot)
 {
     $username = $bot->getUsername();
     $client = $bot->getClient();
     $request = [];
     $lastSeenTweetId = $client->getLastSeenTweetId();
     if ($lastSeenTweetId !== null) {
         $request['since_id'] = $lastSeenTweetId;
     }
     $lastSeenTweetId = null;
     $tweets = $client->getMentions($request);
     foreach ($tweets as $tweet) {
         $id = $tweet->id_str;
         $text = $tweet->text;
         if (strpos($text, '@' . $username) === 0) {
             $response = $this->getResponse($bot, $tweet);
             if ($response !== null) {
                 if (is_string($response)) {
                     $response = ['status' => $response];
                 }
                 $client->tweet($response);
             }
         }
         $lastSeenTweetId = $id;
     }
     if ($lastSeenTweetId !== null) {
         $client->setLastSeenTweetId($lastSeenTweetId);
     }
 }
 public function behave(TwitterBot $bot)
 {
     $client = $bot->getClient();
     $username = $bot->getUsername();
     $request = [];
     $lastSeenDmId = $client->getLastSeenDmId();
     if ($lastSeenDmId !== null) {
         $request['since_id'] = $lastSeenDmId;
     }
     $lastSeenDmId = null;
     $dms = $client->getDms($request);
     $dms = array_reverse($dms);
     foreach ($dms as $dm) {
         $response = $this->getResponse($bot, $dm);
         if ($response !== null) {
             if (is_array($response)) {
                 $dmRequest = $response;
             } else {
                 $dmRequest = ['text' => $response];
             }
             $dmRequest['user_id'] = $dm->sender->id_str;
             $client->dm($dmRequest);
         }
         $lastSeenDmId = $dm->id_str;
     }
     if ($lastSeenDmId !== null) {
         $client->setLastSeenDmId($lastSeenDmId);
     }
 }
    public function finish(TwitterBot $bot)
    {
        $db = Di::getDefault()->getDb();
        $sql = <<<'SQL'
SELECT
guesser,
score
FROM spymaster_game_guess
WHERE spymaster_game_id = :spymaster_game_id
ORDER BY score DESC
LIMIT 5
SQL;
        $params = ['spymaster_game_id' => $this->id];
        $result = $db->query($sql, $params);
        $filename = $this->generateGridImage(true);
        $mediaResponse = $bot->getClient()->uploadMedia(['media' => $filename]);
        $lines = [];
        $i = 1;
        while ($row = $result->fetch()) {
            $lines[] = $i++ . '. @' . $row['guesser'] . ': ' . ($row['score'] === null ? 'DIED' : $row['score']);
        }
        $text = implode("\n", $lines);
        $bot->getClient()->tweet(['status' => $text, 'in_reply_to_status_id' => $this->tweetId, 'media_ids' => [$mediaResponse->media_id_string]]);
        $sql = <<<'SQL'
UPDATE spymaster_game
SET finished = TRUE
WHERE id = :spymaster_game_id
SQL;
        $params = ['spymaster_game_id' => $this->id];
        $result = $db->query($sql, $params);
    }