├── .github ├── FUNDING.yml ├── dependabot.yml └── workflows │ └── php.yml ├── .gitignore ├── LICENSE ├── README.md ├── composer.json ├── example.php ├── phpunit.xml ├── src ├── Entities │ ├── Achievement.php │ ├── Badge.php │ ├── Entity.php │ ├── Group.php │ ├── Habbo.php │ ├── Photo.php │ ├── Profile.php │ └── Room.php ├── Exceptions │ ├── HabboNotFoundException.php │ ├── MaintenanceException.php │ └── UserInvalidException.php ├── HabboAPI.php ├── HabboParser.php └── HabboParserInterface.php └── tests ├── Entities ├── AchievementTest.php ├── BadgeTest.php ├── GroupTest.php ├── HabboSandboxTest.php ├── HabboTest.php ├── PhotoTest.php ├── ProfileTest.php └── RoomTest.php ├── HabboParserTest.php └── data ├── com_group.json ├── com_group_members.json ├── com_koeientemmer_getachievements.json ├── com_koeientemmer_gethabbo.json ├── com_koeientemmer_getphotos.json ├── com_koeientemmer_getprofile.json ├── com_public_photos.json ├── hotel_maintenance.html ├── sandbox_johno_gethabbo.json └── sandbox_johno_getprofile.json /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | patreon: gerbendev -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "github-actions" 4 | directory: "/" 5 | schedule: 6 | interval: "weekly" -------------------------------------------------------------------------------- /.github/workflows/php.yml: -------------------------------------------------------------------------------- 1 | name: PHP Test 2 | 3 | on: 4 | push: 5 | branches: [ master ] 6 | pull_request: 7 | branches: [ master ] 8 | 9 | jobs: 10 | run: 11 | runs-on: ${{ matrix.operating-system }} 12 | strategy: 13 | matrix: 14 | operating-system: [ 'ubuntu-latest' ] 15 | php-versions: [ '8.1', '8.3', '8.4'] 16 | phpunit-versions: [ 'latest' ] 17 | name: PHP ${{ matrix.php-versions }} Test on ${{ matrix.operating-system }} 18 | steps: 19 | - name: Checkout 20 | uses: actions/checkout@v4 21 | - name: Install PHP 22 | uses: shivammathur/setup-php@v2 23 | with: 24 | php-version: ${{ matrix.php-versions }} 25 | extensions: json, curl 26 | tools: phpunit:${{ matrix.phpunit-versions }} 27 | - name: Install dependencies 28 | run: | 29 | composer install --prefer-dist --no-interaction 30 | - name: Execute tests 31 | run: vendor/bin/phpunit -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /vendor/ 2 | /composer.lock 3 | /.idea 4 | /.phpunit.result.cache -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Gerben Jacobs 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Build status](https://github.com/gerbenjacobs/HabboAPI/actions/workflows/php.yml/badge.svg)](https://github.com/gerbenjacobs/HabboAPI/actions/workflows/php.yml) 2 | [![Latest Stable Version](https://poser.pugx.org/gerbenjacobs/habbo-api/v/stable.svg)](https://packagist.org/packages/gerbenjacobs/habbo-api) 3 | # HabboAPI 4 | This PHP wrapper library is used to collect data from the _undocumented_ Habbo API. 5 | The project requires PHP 8.1 or higher and uses the Composer autoloader and PSR-4 standard. 6 | 7 | Older versions for PHP 7.4 are available at [Packagist](https://packagist.org/packages/gerbenjacobs/habbo-api). 8 | 9 | See the `example.php` file on how you could use this library. 10 | 11 | ## How to use it 12 | 1. Add [the Composer package](https://packagist.org/packages/gerbenjacobs/habbo-api) to your project by running `composer require gerbenjacobs/habbo-api` 13 | 2. On the page you want to use it add `include 'vendor/autoload.php'` 14 | 3. Create a HabboParser and construct it with the Habbo domain extension "com", "com.br", "de" etc. 15 | 4. Create a HabboAPI instance and inject the HabboParser in the constructor 16 | 17 | ## Usage 18 | ```php 19 | getHabbo('koeientemmer')->getId(); 33 | 34 | // Collect all the profile info 35 | $profile = $habboApi->getProfile($koeientemmer); 36 | ``` 37 | 38 | ## Changelog 39 | - December 22th, 2024 v6.1.0 - Add support for PHP 8.4, loosened versioning for `nesbot/carbon` 40 | - April 30th, 2023 v6.0.0 - Fully support PHP 8.1 and up 41 | - December 29th, 2020 v5.0.0 - Add support for PHP 8 and drop support below PHP 7.3 42 | - December 18th, 2020 v4.1.0 - Adds "sandbox" as hotel, includes new values for `Habbo` entity; online, lastAccessTime, currentLevel, currentLevelCompleted, totalExperience, starGemCount 43 | - March 30th, 2020 v4.0.0 - Use Carbon 2.0 and drop support for PHP below 7.1.8 44 | - June 11th, 2018 v3.0.1 - Removed unused cookie logic 45 | - May 25th, 2018 - v3.0.0 - Removed official support for PHP 5.4, updated dependencies, fixed warnings for PHP 7.1 46 | - November 9th, 2017 - v2.4.0 - Added `getGroupId()` to Room entities, but only if that data exists 47 | - February 1st, 2017 - v2.3.0 - Added `getAchievements()` to API, returns a list of a Habbos achievements including current level and score 48 | - April 4th, 2016 - v2.2.0 - Added better exception handling, you can now catch `MaintenanceException`, `HabboNotFoundException` and `UserInvalidException` 49 | - March 17th, 2016 - v2.1.1 - Add/fix support for `id` and `uniqueId` in Room objects 50 | - February 25th, 2016 - v2.1.0 - Added getGroup and group member functionality 51 | - February 10th, 2016 - v2.0.2 - Changed cookie for JS detection 52 | - December 26th, 2015 - v2.0.1 - Fix for the cookie needed for Photos 53 | - December 10th, 2015 - v2.0.0 - Added Photos to API and implemented a Profile entity [(Release notes)](https://github.com/gerbenjacobs/HabboAPI/releases/tag/v2.0.0) 54 | - December 4th, 2015 - v1.0.7 - Adds new attributes to Room entity 55 | - November 30th, 2015 - v1.0.6 - Small fixes to Room entity and better exception handling. 56 | - October 27th, 2015 - v1.0.5 - Allow parseHabbo() to use either Habboname or HHID. Also adds some stability to the Group entity 57 | - October 25th, 2015 - v1.0.3 - Throws exception if Habbo API replies with error and removed the `HabboAPI` directory for idiomatic packagist standards. 58 | - October 12th, 2015 - v1.0.2 - Removed server IP, upgraded PHPUnit and tests, expanded on example.php 59 | - March 30th, 2015 - v1.0.1 - Added hasProfile and more stable example.php 60 | - March 28th, 2015 - v1.0.0 - Created first tagged release, includes Travis CI and Packagist integration. 61 | 62 | ## Developer Installation 63 | 1. Clone the project 64 | 2. Run `composer install` 65 | 3. Verify the installation by running `vendor/bin/phpunit` or opening the `example.php` page on a PHP server 66 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gerbenjacobs/habbo-api", 3 | "description": "A PHP wrapper for the (undocumented) Habbo Hotel API", 4 | "keywords": [ 5 | "habbo", 6 | "api", 7 | "wrapper", 8 | "habbowidgets" 9 | ], 10 | "license": "MIT", 11 | "authors": [ 12 | { 13 | "name": "Gerben Jacobs", 14 | "email": "gerben@habbies.nl", 15 | "homepage": "https://www.habbowidgets.com", 16 | "role": "Developer" 17 | } 18 | ], 19 | "require": { 20 | "php": ">=8.1", 21 | "nesbot/carbon": ">=2.6", 22 | "ext-json": "*", 23 | "ext-curl": "*" 24 | }, 25 | "autoload": { 26 | "psr-4": { 27 | "HabboAPI\\": "src/" 28 | } 29 | }, 30 | "require-dev": { 31 | "phpunit/phpunit": "^10.5" 32 | }, 33 | "scripts": { 34 | "test": "vendor/bin/phpunit" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /example.php: -------------------------------------------------------------------------------- 1 | getHabbo('Macklebee'); 18 | 19 | // Get extra information about one of their groups 20 | // Note: This is actually a hardcoded group ID to showcase the parseGroup() endpoint 21 | $group = $habboApi->getGroup("g-hhus-0419705237d0e8c004195c365810e7a7"); 22 | } catch (Exception $e) { 23 | echo ' 24 |

Oops. Can not find this Habbo!

25 |

Try to catch this exception gracefully in your application!

26 |

[' . $e->getCode() . '] ' . $e->getMessage() . '

27 |
28 | ' . nl2br($e->getTraceAsString()) . ' 29 | '; 30 | exit(); 31 | } 32 | 33 | if ($myHabbo->hasProfile()) { 34 | // Collect all the profile info 35 | $myProfile = $habboApi->getProfile($myHabbo->getId()); 36 | } else { 37 | // This Habbo has a closed home, only show their Habbo object 38 | $myProfile = new Profile(); 39 | $myProfile->setHabbo($myHabbo); 40 | } 41 | 42 | // Get all their photos 43 | $myPhotos = $habboApi->getPhotos($myHabbo->getId()); 44 | 45 | // Export as HTML 46 | $html = [ 47 | 'habbo' => '', 48 | 'worn_badges' => '', 49 | 'friends' => '', 50 | 'groups' => '', 51 | 'rooms' => '', 52 | 'badges' => '', 53 | 'photos' => '' 54 | ]; 55 | 56 | 57 | // Some markup for the Habbo part 58 | 59 | $habbo = $myProfile->getHabbo(); 60 | $onlineText = $habbo->isOnline() ? "yes" : "no"; 61 | $lastAccess = ($habbo->getLastAccessTime()) ? $habbo->getLastAccessTime()->toFormattedDateString() : "N/A"; 62 | $html['habbo'] .= '' . $habbo->getHabboName() . ''; 64 | $html['habbo'] .= '

' . $habbo->getHabboName() . '

'; 65 | $html['habbo'] .= '

' . $habbo->getMotto() . '
' . $habbo->getMemberSince()->toFormattedDateString() . '

'; 66 | $html['habbo'] .= '

StarGem count: ' . $habbo->getStarGemCount() . '
Total Experience: ' . $habbo->getTotalExperience() . '
Current Level: ' . $habbo->getCurrentLevel() . '

'; 67 | $html['habbo'] .= '

Online: ' . $onlineText . '
Last seen: ' . $lastAccess . '

'; 68 | 69 | if ($habbo->getProfileVisible()) { 70 | $html['habbo'] .= '

View home »

'; 71 | } 72 | 73 | if ($badges = $habbo->getSelectedBadges()) { 74 | foreach ($badges as $badge) { 75 | /** @var Badge $badge */ 76 | $html['worn_badges'] .= ' 77 |
78 |
79 | 80 | ' . $badge->getName() . ' 81 | 82 |
83 |
84 |

' . $badge->getName() . '

85 | ' . $badge->getDescription() . ' 86 |
87 |
88 | '; 89 | } 90 | } 91 | 92 | if ($myHabbo->hasProfile()) { 93 | // Show all the other sections as an unordered list 94 | foreach (array("friends", "groups", "rooms", "badges") as $section) { 95 | $html[$section] .= ''; 101 | } 102 | } 103 | 104 | // Generate the photos 105 | if ($myPhotos) { 106 | foreach ($myPhotos as $myPhoto) { 107 | $html['photos'] .= ' 108 |
109 | 110 | ' . $myPhoto->getId() . ' 111 | 112 |
Taken on ' . $myPhoto->getTakenOn()->toFormattedDateString() . ' by ' . $myPhoto->getCreatorName() . '
113 |
114 | '; 115 | } 116 | } 117 | ?> 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | HabboAPI 126 | 127 | 128 | 138 | 139 | 140 | 141 | 145 | 146 | 147 | 148 | 149 |
150 | 151 |
152 |

HabboAPI

153 | 154 |

A PHP wrapper library for the undocumented API of Habbo

155 | 156 |

Learn more

157 |
158 | 159 |
160 |
161 | 162 |
163 |
164 | 165 |
166 |
167 | 168 |
169 | 170 |
171 | 172 |
173 | 174 | hasProfile()) : ?> 175 |
176 |
177 |
178 |
179 |
180 | 181 |
182 |
183 | 184 |
185 |
186 |
187 |
188 |
189 |
190 | 191 |
192 |
193 | 194 |
195 |
196 | 197 |
198 |
199 |
200 | 201 | 202 |

203 |   204 |   205 | getName(); ?> 206 |

207 | 208 |

[getType(); ?>] - getDescription(); ?>

209 |

210 | Go to room 211 |

212 | 213 | getMembers(); 214 | if (count($members) > 0) : ?> 215 |

This group has getMembers()); ?> members. 216 | Here are 10 random ones:

217 | 218 |
    219 | 221 |
  • getHabboName(); ?>
  • 222 | 223 |
224 | 225 |
226 |
227 | 228 |
229 |
230 | 231 |
232 | 233 | 234 | 235 | 236 | 237 | -------------------------------------------------------------------------------- /phpunit.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ./tests 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /src/Entities/Achievement.php: -------------------------------------------------------------------------------- 1 | id = $data['achievement']['id']; 29 | $this->name = $data['achievement']['name']; 30 | $this->category = $data['achievement']['category']; 31 | if (isset($data['achievement']['state'])) { 32 | $this->state = $data['achievement']['state']; 33 | } 34 | 35 | if (isset($data['achievement']['creationTime'])) { 36 | $this->creationTime = Carbon::parse($data['achievement']['creationTime']); 37 | } 38 | 39 | // add user state if available 40 | if (isset($data['level'])) { 41 | $this->level = $data['level']; 42 | } 43 | if (isset($data['score'])) { 44 | $this->score = $data['score']; 45 | } 46 | } 47 | 48 | public function __toString() 49 | { 50 | return $this->getName(); 51 | } 52 | 53 | 54 | public function getId(): int|string 55 | { 56 | return $this->id; 57 | } 58 | 59 | public function getName(): string 60 | { 61 | return $this->name; 62 | } 63 | 64 | public function getCategory(): string 65 | { 66 | return $this->category; 67 | } 68 | 69 | public function getLevel(): int 70 | { 71 | return $this->level; 72 | } 73 | 74 | 75 | public function getScore(): int 76 | { 77 | return $this->score; 78 | } 79 | 80 | 81 | public function getState(): string 82 | { 83 | return $this->state; 84 | } 85 | 86 | public function setState(string $state): void 87 | { 88 | $this->state = $state; 89 | } 90 | 91 | public function getCreationTime(): \DateTimeInterface 92 | { 93 | return $this->creationTime; 94 | } 95 | 96 | public function setCreationTime(\DateTimeInterface $creationTime): void 97 | { 98 | $this->creationTime = $creationTime; 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /src/Entities/Badge.php: -------------------------------------------------------------------------------- 1 | setBadgeIndex($data['badgeIndex']); 28 | } 29 | $this->setCode($data['code']); 30 | $this->setName($data['name']); 31 | $this->setDescription($data['description']); 32 | } 33 | 34 | public function __toString() 35 | { 36 | return '[' . $this->getCode() . '] ' . $this->getName(); 37 | } 38 | 39 | public function getCode(): string 40 | { 41 | return $this->code; 42 | } 43 | 44 | protected function setCode(string $code): void 45 | { 46 | $this->code = $code; 47 | } 48 | 49 | public function getName(): string 50 | { 51 | return $this->name; 52 | } 53 | 54 | protected function setName(string $name): void 55 | { 56 | $this->name = $name; 57 | } 58 | 59 | public function getBadgeIndex(): int 60 | { 61 | return $this->badgeIndex; 62 | } 63 | 64 | protected function setBadgeIndex(int $badgeIndex): void 65 | { 66 | $this->badgeIndex = $badgeIndex; 67 | } 68 | 69 | public function getDescription(): string 70 | { 71 | return $this->description; 72 | } 73 | 74 | protected function setDescription(string $description): void 75 | { 76 | $this->description = $description; 77 | } 78 | 79 | public function getId(): string 80 | { 81 | return $this->getCode(); 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /src/Entities/Entity.php: -------------------------------------------------------------------------------- 1 | setId($data['id']); 28 | $this->setName($data['name']); 29 | $this->setDescription($data['description']); 30 | $this->setType($data['type']); 31 | if (isset($data['primaryColour'])) { 32 | $this->setPrimaryColour($data['primaryColour']); 33 | } 34 | if (isset($data['secondaryColour'])) { 35 | $this->setSecondaryColour($data['secondaryColour']); 36 | } 37 | if (isset($data['badgeCode'])) { 38 | $this->setBadgeCode($data['badgeCode']); 39 | } 40 | if (isset($data['roomId'])) { 41 | $this->setRoomId($data['roomId']); 42 | } 43 | if (isset($data['isAdmin'])) { 44 | $this->setIsAdmin($data['isAdmin']); 45 | } 46 | } 47 | 48 | public function __toString() 49 | { 50 | return $this->getName(); 51 | } 52 | 53 | public function getName(): string 54 | { 55 | return $this->name; 56 | } 57 | 58 | protected function setName(string $name): void 59 | { 60 | $this->name = $name; 61 | } 62 | 63 | public function getBadgeCode(): string 64 | { 65 | return $this->badgeCode; 66 | } 67 | 68 | protected function setBadgeCode(string $badgeCode): void 69 | { 70 | $this->badgeCode = $badgeCode; 71 | } 72 | 73 | public function getDescription(): string 74 | { 75 | return $this->description; 76 | } 77 | 78 | 79 | protected function setDescription(string $description): void 80 | { 81 | $this->description = $description; 82 | } 83 | 84 | public function getId(): ?string 85 | { 86 | return $this->id; 87 | } 88 | 89 | protected function setId(string $id): void 90 | { 91 | $this->id = $id; 92 | } 93 | 94 | public function getIsAdmin(): ?bool 95 | { 96 | return $this->isAdmin; 97 | } 98 | 99 | protected function setIsAdmin(bool $isAdmin): void 100 | { 101 | $this->isAdmin = $isAdmin; 102 | } 103 | 104 | public function getPrimaryColour(): ?string 105 | { 106 | return $this->primaryColour; 107 | } 108 | 109 | protected function setPrimaryColour(string $primaryColour): void 110 | { 111 | $this->primaryColour = $primaryColour; 112 | } 113 | 114 | public function getRoomId(): ?string 115 | { 116 | return $this->roomId; 117 | } 118 | 119 | protected function setRoomId(string $roomId): void 120 | { 121 | $this->roomId = $roomId; 122 | } 123 | 124 | public function getSecondaryColour(): ?string 125 | { 126 | return $this->secondaryColour; 127 | } 128 | 129 | protected function setSecondaryColour(string $secondaryColour): void 130 | { 131 | $this->secondaryColour = $secondaryColour; 132 | } 133 | 134 | public function getType(): string 135 | { 136 | return $this->type; 137 | } 138 | 139 | protected function setType(string $type): void 140 | { 141 | $this->type = $type; 142 | } 143 | 144 | public function getMembers(): array|null 145 | { 146 | return $this->members; 147 | } 148 | 149 | public function setMembers(array $members): void 150 | { 151 | $this->members = $members; 152 | } 153 | 154 | /* Cleaner methods */ 155 | public function isAdmin(): bool 156 | { 157 | return $this->getIsAdmin(); 158 | } 159 | 160 | public function getPrimaryColor(): ?string 161 | { 162 | return $this->getPrimaryColour(); 163 | } 164 | 165 | public function getSecondaryColor(): ?string 166 | { 167 | return $this->getSecondaryColour(); 168 | } 169 | } 170 | -------------------------------------------------------------------------------- /src/Entities/Habbo.php: -------------------------------------------------------------------------------- 1 | setId($data['uniqueId']); 36 | $this->setHabboName($data['name']); 37 | $this->setMotto($data['motto']); 38 | if (isset($data['figureString'])) { 39 | $this->setFigureString($data['figureString']); 40 | } elseif (isset($data['habboFigure'])) { 41 | $this->setFigureString($data['habboFigure']); 42 | } 43 | 44 | // These could be missing.. 45 | if (isset($data['memberSince'])) { 46 | $this->setMemberSince($data['memberSince']); 47 | } 48 | 49 | if (isset($data['profileVisible'])) { 50 | $this->setProfileVisible($data['profileVisible']); 51 | } 52 | 53 | if (isset($data['selectedBadges'])) { 54 | foreach ($data['selectedBadges'] as $badge) { 55 | $selectedBadge = new Badge(); 56 | $selectedBadge->parse($badge); 57 | $this->addSelectedBadge($selectedBadge); 58 | } 59 | } 60 | 61 | // New sandbox 2020 additions 62 | if (isset($data['online'])) { 63 | $this->setOnline($data['online']); 64 | } 65 | if (isset($data['lastAccessTime'])) { 66 | $this->setLastAccessTime($data['lastAccessTime']); 67 | } 68 | if (isset($data['currentLevel'])) { 69 | $this->setCurrentLevel($data['currentLevel']); 70 | } 71 | if (isset($data['currentLevelCompletePercent'])) { 72 | $this->setCurrentLevelCompleted($data['currentLevelCompletePercent']); 73 | } 74 | if (isset($data['totalExperience'])) { 75 | $this->setTotalExperience($data['totalExperience']); 76 | } 77 | if (isset($data['starGemCount'])) { 78 | $this->setStarGemCount($data['starGemCount']); 79 | } 80 | } 81 | 82 | protected function setHabboName(string $habboName): void 83 | { 84 | $this->habboName = $habboName; 85 | } 86 | 87 | protected function setMotto(string $motto): void 88 | { 89 | $this->motto = $motto; 90 | } 91 | 92 | protected function setFigureString(string $figureString): void 93 | { 94 | $this->figureString = $figureString; 95 | } 96 | 97 | protected function setProfileVisible(bool $profileVisible): void 98 | { 99 | $this->profileVisible = $profileVisible; 100 | } 101 | 102 | protected function addSelectedBadge(Badge $selectedBadge): void 103 | { 104 | $this->selectedBadges[] = $selectedBadge; 105 | } 106 | 107 | public function setLastAccessTime(string $lastAccessTime): void 108 | { 109 | $this->lastAccessTime = Carbon::parse($lastAccessTime); 110 | } 111 | 112 | public function setCurrentLevelCompleted(int $currentLevelCompleted): void 113 | { 114 | $this->currentLevelCompleted = $currentLevelCompleted; 115 | } 116 | 117 | public function setTotalExperience(int $totalExperience): void 118 | { 119 | $this->totalExperience = $totalExperience; 120 | } 121 | 122 | public function setStarGemCount(int $starGemCount): void 123 | { 124 | $this->starGemCount = $starGemCount; 125 | } 126 | 127 | public function __toString() 128 | { 129 | return $this->getHabboName(); 130 | } 131 | 132 | public function getHabboName(): string 133 | { 134 | return $this->habboName; 135 | } 136 | 137 | public function getFigureString(): string 138 | { 139 | return $this->figureString; 140 | } 141 | 142 | public function getId(): string 143 | { 144 | return $this->id; 145 | } 146 | 147 | protected function setId(string $id): void 148 | { 149 | $this->id = $id; 150 | } 151 | 152 | public function getMemberSince(): ?DateTimeInterface 153 | { 154 | return $this->memberSince; 155 | } 156 | 157 | protected function setMemberSince(string $memberSince): void 158 | { 159 | $this->memberSince = Carbon::parse($memberSince); 160 | } 161 | 162 | public function getMotto(): string 163 | { 164 | return $this->motto; 165 | } 166 | 167 | public function getSelectedBadges(): array 168 | { 169 | return $this->selectedBadges; 170 | } 171 | 172 | /** 173 | * Cleaner method for returning profile visibility 174 | */ 175 | public function hasProfile(): bool 176 | { 177 | return $this->getProfileVisible(); 178 | } 179 | 180 | public function getProfileVisible(): bool 181 | { 182 | return $this->profileVisible; 183 | } 184 | 185 | public function getLastAccessTime(): ?DateTimeInterface 186 | { 187 | return $this->lastAccessTime; 188 | } 189 | 190 | public function getCurrentLevel(): int 191 | { 192 | return $this->currentLevel; 193 | } 194 | 195 | public function setCurrentLevel(int $currentLevel): void 196 | { 197 | $this->currentLevel = $currentLevel; 198 | } 199 | 200 | public function getCurrentLevelCompleted(): int 201 | { 202 | return $this->currentLevelCompleted; 203 | } 204 | 205 | public function getTotalExperience(): int 206 | { 207 | return $this->totalExperience; 208 | } 209 | 210 | public function getStarGemCount(): int 211 | { 212 | return $this->starGemCount; 213 | } 214 | 215 | public function getOnline(): bool 216 | { 217 | return $this->online; 218 | } 219 | 220 | /** 221 | * Helper function for readability 222 | */ 223 | public function isOnline(): bool 224 | { 225 | return $this->online; 226 | } 227 | 228 | public function setOnline(bool $online): void 229 | { 230 | $this->online = $online; 231 | } 232 | 233 | /** 234 | * Count elements of an object 235 | * @link http://php.net/manual/en/countable.count.php 236 | * @return int The custom count as an integer. 237 | *

238 | *

239 | * The return value is cast to an integer. 240 | * @since 5.1.0 241 | */ 242 | public function count(): int 243 | { 244 | return 1; 245 | } 246 | } 247 | -------------------------------------------------------------------------------- /src/Entities/Photo.php: -------------------------------------------------------------------------------- 1 | setId($data['id']); 22 | $this->setPreviewUrl($data['previewUrl']); 23 | $this->setTags($data['tags']); 24 | $this->setType($data['type']); 25 | $this->setUrl($data['url']); 26 | $this->setTakenOn($data['time']); 27 | $this->setCreatorUniqueId($data['creator_uniqueId']); 28 | $this->setCreatorName($data['creator_name']); 29 | $this->setCreatorId($data['creator_id']); 30 | $this->setRoomId($data['room_id']); 31 | $this->setLikes($data['likes']); 32 | } 33 | 34 | public function setPreviewUrl(string $previewUrl): void 35 | { 36 | $this->previewUrl = $previewUrl; 37 | } 38 | 39 | public function setType(string $type): void 40 | { 41 | $this->type = $type; 42 | } 43 | 44 | public function setUrl(string $url): void 45 | { 46 | $this->url = $url; 47 | } 48 | 49 | public function setCreatorUniqueId(string $creatorUniqueId): void 50 | { 51 | $this->creatorUniqueId = $creatorUniqueId; 52 | } 53 | 54 | public function setCreatorName(string $creatorName): void 55 | { 56 | $this->creatorName = $creatorName; 57 | } 58 | 59 | public function setRoomId(int $roomId): void 60 | { 61 | $this->roomId = $roomId; 62 | } 63 | 64 | public function setLikes($likes): void 65 | { 66 | $this->likes = $likes; 67 | } 68 | 69 | public function __toString() 70 | { 71 | return $this->getUrl(); 72 | } 73 | 74 | public function getUrl(): string 75 | { 76 | return $this->url; 77 | } 78 | 79 | public function getId(): string 80 | { 81 | return $this->id; 82 | } 83 | 84 | public function setId(string $id): void 85 | { 86 | $this->id = $id; 87 | } 88 | 89 | public function getPreviewUrl(): string 90 | { 91 | return $this->previewUrl; 92 | } 93 | 94 | public function getTags(): array 95 | { 96 | return $this->tags; 97 | } 98 | 99 | public function setTags(array $tags): void 100 | { 101 | $this->tags = $tags; 102 | } 103 | 104 | public function getCreatorUniqueId(): string 105 | { 106 | return $this->creatorUniqueId; 107 | } 108 | 109 | public function getCreatorName(): string 110 | { 111 | return $this->creatorName; 112 | } 113 | 114 | public function getCreatorId(): int 115 | { 116 | return $this->creatorId; 117 | } 118 | 119 | public function setCreatorId(int $creatorId): void 120 | { 121 | $this->creatorId = $creatorId; 122 | } 123 | 124 | public function getType(): string 125 | { 126 | return $this->type; 127 | } 128 | 129 | public function getTakenOn(): \DateTimeInterface 130 | { 131 | return $this->takenOn; 132 | } 133 | 134 | /** 135 | * @param int $takenOn Takes in a timestamp with milliseconds 136 | */ 137 | public function setTakenOn(int $takenOn): void 138 | { 139 | // takenOn is a microtime() format 140 | $timestamp = floor($takenOn / 1e3); 141 | $this->takenOn = Carbon::createFromTimestamp($timestamp); 142 | } 143 | 144 | public function getRoomId(): int 145 | { 146 | return $this->roomId; 147 | } 148 | 149 | public function getLikes(): array 150 | { 151 | return $this->likes; 152 | } 153 | } 154 | -------------------------------------------------------------------------------- /src/Entities/Profile.php: -------------------------------------------------------------------------------- 1 | getHabbo()->getHabboName(); 35 | } 36 | 37 | /** 38 | * @return Habbo 39 | */ 40 | public function getHabbo(): Habbo 41 | { 42 | return $this->habbo; 43 | } 44 | 45 | /** 46 | * @param Habbo $habbo 47 | */ 48 | public function setHabbo(Habbo $habbo): void 49 | { 50 | $this->habbo = $habbo; 51 | } 52 | 53 | /** 54 | * @return string 55 | */ 56 | public function getId(): string 57 | { 58 | return $this->getHabbo()->getId(); 59 | } 60 | 61 | /** 62 | * @return Habbo[] 63 | */ 64 | public function getFriends(): array 65 | { 66 | return $this->friends; 67 | } 68 | 69 | /** 70 | * @param Habbo $friend 71 | */ 72 | public function addFriend(Habbo $friend): void 73 | { 74 | $this->friends[] = $friend; 75 | } 76 | 77 | /** 78 | * @return Group[] 79 | */ 80 | public function getGroups(): array 81 | { 82 | return $this->groups; 83 | } 84 | 85 | /** 86 | * @param Group $group 87 | */ 88 | public function addGroup(Group $group): void 89 | { 90 | $this->groups[] = $group; 91 | } 92 | 93 | /** 94 | * @return Room[] 95 | */ 96 | public function getRooms(): array 97 | { 98 | return $this->rooms; 99 | } 100 | 101 | /** 102 | * @param Room $room 103 | */ 104 | public function addRoom(Room $room): void 105 | { 106 | $this->rooms[] = $room; 107 | } 108 | 109 | /** 110 | * @return Badge[] 111 | */ 112 | public function getBadges(): array 113 | { 114 | return $this->badges; 115 | } 116 | 117 | /** 118 | * @param Badge $badge 119 | */ 120 | public function addBadge(Badge $badge): void 121 | { 122 | $this->badges[] = $badge; 123 | } 124 | 125 | /** 126 | * getCounts is a small helper function to give you 127 | * an array of each entity in the profile and its count 128 | * @return array 129 | */ 130 | public function getCounts(): array 131 | { 132 | return array( 133 | 'habbo' => self::safeCount($this->habbo), 134 | 'badges' => self::safeCount($this->badges), 135 | 'friends' => self::safeCount($this->friends), 136 | 'groups' => self::safeCount($this->groups), 137 | 'rooms' => self::safeCount($this->rooms), 138 | ); 139 | } 140 | 141 | private function safeCount($value): int 142 | { 143 | return is_countable($value) ? count($value) : 0; 144 | } 145 | } 146 | 147 | -------------------------------------------------------------------------------- /src/Entities/Room.php: -------------------------------------------------------------------------------- 1 | setId($data['id']); 34 | $this->setUniqueId($data['uniqueId']); 35 | $this->setName($data['name']); 36 | if (isset($data['description'])) { 37 | $this->setDescription($data['description']); 38 | } 39 | $this->setMaximumVisitors($data['maximumVisitors']); 40 | $this->setTags($data['tags']); 41 | $this->setShowOwnerName($data['showOwnerName']); 42 | $this->setOwnerName($data['ownerName']); 43 | $this->setOwnerUniqueId($data['ownerUniqueId']); 44 | $this->setCategories($data['categories']); 45 | $this->setThumbnailUrl($data['thumbnailUrl']); 46 | $this->setImageUrl($data['imageUrl']); 47 | $this->setRating($data['rating']); 48 | 49 | if (isset($data['creationTime'])) { 50 | $this->setCreationTime($data['creationTime']); 51 | } 52 | 53 | if (isset($data['habboGroupId'])) { 54 | $this->setGroupId($data['habboGroupId']); 55 | } 56 | } 57 | 58 | protected function setName(string $name): void 59 | { 60 | $this->name = $name; 61 | } 62 | 63 | protected function setDescription(string $description): void 64 | { 65 | $this->description = $description; 66 | } 67 | 68 | public function setMaximumVisitors(int $maximumVisitors): void 69 | { 70 | $this->maximumVisitors = $maximumVisitors; 71 | } 72 | 73 | public function setOwnerName(string $ownerName): void 74 | { 75 | $this->ownerName = $ownerName; 76 | } 77 | 78 | protected function setOwnerUniqueId(string $ownerUniqueId): void 79 | { 80 | $this->ownerUniqueId = $ownerUniqueId; 81 | } 82 | 83 | 84 | public function setCategories(array $categories): void 85 | { 86 | $this->categories = $categories; 87 | } 88 | 89 | public function setThumbnailUrl(string $thumbnailUrl): void 90 | { 91 | $this->thumbnailUrl = $thumbnailUrl; 92 | } 93 | 94 | public function setImageUrl(string $imageUrl): void 95 | { 96 | $this->imageUrl = $imageUrl; 97 | } 98 | 99 | public function setRating(int $rating): void 100 | { 101 | $this->rating = $rating; 102 | } 103 | 104 | public function setGroupId(string $habboGroupId): void 105 | { 106 | $this->habboGroupId = $habboGroupId; 107 | } 108 | 109 | public function __toString() 110 | { 111 | return $this->getName(); 112 | } 113 | 114 | public function getName(): string 115 | { 116 | return $this->name; 117 | } 118 | 119 | public function getDescription(): string 120 | { 121 | return $this->description; 122 | } 123 | 124 | public function getId(): string 125 | { 126 | return $this->uniqueId; 127 | } 128 | 129 | 130 | protected function setId(int $id): void 131 | { 132 | $this->id = $id; 133 | } 134 | 135 | public function getOldId(): int 136 | { 137 | return $this->id; 138 | } 139 | 140 | public function getOwnerUniqueId(): string 141 | { 142 | return $this->ownerUniqueId; 143 | } 144 | 145 | 146 | public function getTags(): array 147 | { 148 | return $this->tags; 149 | } 150 | 151 | 152 | public function setTags(array $tags): void 153 | { 154 | $this->tags = $tags; 155 | } 156 | 157 | public function getCategories(): array 158 | { 159 | return $this->categories; 160 | } 161 | 162 | public function getThumbnailUrl(): string 163 | { 164 | return $this->thumbnailUrl; 165 | } 166 | 167 | 168 | public function getCreationTime(): ?DateTimeInterface 169 | { 170 | return $this->creationTime; 171 | } 172 | 173 | public function setCreationTime(string $creationTime): void 174 | { 175 | $this->creationTime = Carbon::parse($creationTime); 176 | } 177 | 178 | public function getMaximumVisitors(): int 179 | { 180 | return $this->maximumVisitors; 181 | } 182 | 183 | public function getShowOwnerName(): bool 184 | { 185 | return $this->showOwnerName; 186 | } 187 | 188 | public function setShowOwnerName(bool $showOwnerName): void 189 | { 190 | $this->showOwnerName = $showOwnerName; 191 | } 192 | 193 | public function getOwnerName(): string 194 | { 195 | return $this->ownerName; 196 | } 197 | 198 | public function getImageUrl(): string 199 | { 200 | return $this->imageUrl; 201 | } 202 | 203 | public function getRating(): int 204 | { 205 | return $this->rating; 206 | } 207 | 208 | public function getUniqueId(): string 209 | { 210 | return $this->uniqueId; 211 | } 212 | 213 | public function setUniqueId(string $uniqueId): void 214 | { 215 | $this->uniqueId = $uniqueId; 216 | } 217 | 218 | public function getGroupId(): string 219 | { 220 | return $this->habboGroupId; 221 | } 222 | } 223 | -------------------------------------------------------------------------------- /src/Exceptions/HabboNotFoundException.php: -------------------------------------------------------------------------------- 1 | code}]: {$this->message}\n"; 17 | } 18 | } -------------------------------------------------------------------------------- /src/Exceptions/MaintenanceException.php: -------------------------------------------------------------------------------- 1 | code}]: {$this->message}\n"; 17 | } 18 | } -------------------------------------------------------------------------------- /src/Exceptions/UserInvalidException.php: -------------------------------------------------------------------------------- 1 | code}]: {$this->message}\n"; 17 | } 18 | } -------------------------------------------------------------------------------- /src/HabboAPI.php: -------------------------------------------------------------------------------- 1 | parser = $parser; 37 | } 38 | 39 | /** Based on a username, get a simplified Habbo object 40 | * 41 | * @param string $identifier 42 | * @param bool $useUniqueId 43 | * @return Habbo 44 | */ 45 | public function getHabbo(string $identifier, bool $useUniqueId = false): Habbo 46 | { 47 | return $this->parser->parseHabbo($identifier, $useUniqueId); 48 | } 49 | 50 | /** Based on a unique ID, get a full Habbo profile object 51 | * 52 | * @param string $id The unique ID Habbo uses for their api. Starts with "hh-" (i.e. "hhus-") 53 | * @return Profile 54 | */ 55 | public function getProfile(string $id): Profile 56 | { 57 | return $this->parser->parseProfile($id); 58 | } 59 | 60 | /** getPhotos returns all 200 public photos or all the users photos if an id is given 61 | * 62 | * @param string|null $id The unique ID Habbo uses for their api. Starts with "hh-" (i.e. "hhus-") 63 | * @return Photo[] Array of Photo objects 64 | */ 65 | public function getPhotos(?string $id = null): array 66 | { 67 | return $this->parser->parsePhotos($id); 68 | } 69 | 70 | /** getGroup will collect the group info and, if available, the members of said group 71 | * 72 | * @param $group_id 73 | * @return Group 74 | * @throws Exception 75 | */ 76 | public function getGroup($group_id): Group 77 | { 78 | return $this->parser->parseGroup($group_id); 79 | } 80 | 81 | /** getAchievements returns a Habbo's achievements 82 | * @param string $id The unique ID Habbo uses for their api. Starts with "hh-" (i.e. "hhus-") 83 | * @return Achievement[] 84 | */ 85 | public function getAchievements(string $id): array 86 | { 87 | return $this->parser->parseAchievements($id); 88 | } 89 | } -------------------------------------------------------------------------------- /src/HabboParser.php: -------------------------------------------------------------------------------- 1 | api_base = 'https://' . $subdomain . '.habbo.' . $hotel; 50 | } 51 | 52 | 53 | /** 54 | * Parses the Habbo user endpoint 55 | * 56 | * @param $identifier 57 | * @param bool $useUniqueId 58 | * @return Habbo 59 | * @throws Exception 60 | */ 61 | public function parseHabbo($identifier, bool $useUniqueId = false): Habbo 62 | { 63 | if ($useUniqueId) { 64 | $url = '/api/public/users/' . $identifier; 65 | } else { 66 | $url = '/api/public/users?name=' . $identifier; 67 | } 68 | 69 | list($data) = $this->_callUrl($this->api_base . $url); 70 | 71 | $habbo = new Habbo(); 72 | $habbo->parse($data); 73 | return $habbo; 74 | } 75 | 76 | /** 77 | * Parses the Habbo Profile endpoints 78 | * 79 | * Return a Profile object including a Habbo entity and 4 arrays with Group, Friend, Room, Badge entities 80 | * 81 | * @param string $id 82 | * @return Profile 83 | * @throws Exception 84 | */ 85 | public function parseProfile($id): Profile 86 | { 87 | // Collect JSON 88 | list($data) = $this->_callUrl($this->api_base . '/api/public/users/' . $id . '/profile', true); 89 | 90 | // Create Profile entity 91 | $profile = new Profile(); 92 | 93 | // Habbo 94 | $habbo = new Habbo(); 95 | $habbo->parse($data['user']); 96 | $profile->setHabbo($habbo); 97 | 98 | // Friends 99 | foreach ($data['friends'] as $friend) { 100 | $temp_friend = new Habbo(); 101 | $temp_friend->parse($friend); 102 | $profile->addFriend($temp_friend); 103 | } 104 | 105 | // Groups 106 | foreach ($data['groups'] as $group) { 107 | $temp_group = new Group(); 108 | $temp_group->parse($group); 109 | $profile->addGroup($temp_group); 110 | } 111 | 112 | // Rooms 113 | foreach ($data['rooms'] as $room) { 114 | $temp_room = new Room(); 115 | $temp_room->parse($room); 116 | $profile->addRoom($temp_room); 117 | } 118 | 119 | // Badges 120 | foreach ($data['badges'] as $badge) { 121 | $temp_badge = new Badge(); 122 | $temp_badge->parse($badge); 123 | $profile->addBadge($temp_badge); 124 | } 125 | 126 | // Return the Profile 127 | return $profile; 128 | } 129 | 130 | /** 131 | * parsePhotos will collect the public photos for an HHID 132 | * If no $id is given, it will grab the latest photos of the entire hotel 133 | * 134 | * @param string|null $id 135 | * @return Photo[] 136 | * @throws Exception 137 | */ 138 | public function parsePhotos(?string $id = null): array 139 | { 140 | $url = (isset($id)) ? '/extradata/public/users/' . $id . '/photos' : '/extradata/public/photos'; 141 | list($data) = $this->_callUrl($this->api_base . $url); 142 | 143 | $photos = array(); 144 | 145 | if ($data) { 146 | foreach ($data as $photo_data) { 147 | $temp_photo = new Photo(); 148 | $temp_photo->parse($photo_data); 149 | $photos[] = $temp_photo; 150 | unset($temp_photo); 151 | } 152 | } 153 | 154 | return $photos; 155 | } 156 | 157 | /** 158 | * parseGroup will return a Group object based on a group ID. 159 | * It will also contain the members, as an array of Habbo objects. 160 | * 161 | * @param $group_id 162 | * @return Group 163 | * @throws Exception 164 | */ 165 | public function parseGroup($group_id): Group 166 | { 167 | list($data) = $this->_callUrl($this->api_base . '/api/public/groups/' . $group_id, true); 168 | 169 | $group = new Group(); 170 | $group->parse($data); 171 | 172 | try { 173 | list($member_data) = $this->_callUrl($this->api_base . '/api/public/groups/' . $group_id . '/members', true); 174 | } catch (Exception $e) { 175 | // Can't collect member data 176 | $member_data = false; 177 | } 178 | 179 | if ($member_data) { 180 | /** @var Habbo[] $members */ 181 | $members = array(); 182 | foreach ($member_data as $member) { 183 | $temp_habbo = new Habbo(); 184 | $temp_habbo->parse($member); 185 | $members[] = $temp_habbo; 186 | } 187 | $group->setMembers($members); 188 | } 189 | 190 | return $group; 191 | } 192 | 193 | /** parseAchievements will return a list of achievements belonging to a Habbo 194 | * 195 | * @param $id 196 | * @return Achievement[] 197 | * @throws Exception 198 | */ 199 | public function parseAchievements($id): array 200 | { 201 | $achievements = array(); 202 | 203 | list($data) = $this->_callUrl($this->api_base . '/api/public/achievements/' . $id, true); 204 | 205 | if ($data) { 206 | foreach ($data as $ach) { 207 | $tmp_ach = new Achievement(); 208 | $tmp_ach->parse($ach); 209 | $achievements[] = $tmp_ach; 210 | unset($tmp_ach); 211 | } 212 | } 213 | 214 | return $achievements; 215 | } 216 | 217 | /** 218 | * CURL call based on $url 219 | * 220 | * Please note that we ignore SSL verification, if this is important to you, implement a more secure Parser 221 | * 222 | * @param string $url The URL to call 223 | * @param bool $as_json Return raw or as json; default is json 224 | * @return array 225 | * @throws Exception 226 | */ 227 | protected function _callUrl(string $url, bool $as_json = true): array 228 | { 229 | $ch = curl_init(); 230 | curl_setopt($ch, CURLOPT_URL, $url); 231 | curl_setopt($ch, CURLOPT_USERAGENT, 'github.com/gerbenjacobs/habbo-api v' . HabboAPI::VERSION); 232 | curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 233 | curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 234 | curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 235 | curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 236 | $data = curl_exec($ch); 237 | $info = curl_getinfo($ch); 238 | curl_close($ch); 239 | 240 | // Fetch response 241 | $response = ($as_json) ? json_decode($data, true) : $data; 242 | 243 | // If something went wrong.. 244 | if ($info['http_code'] != 200) { 245 | self::throwHabboAPIException($data); 246 | } 247 | return array($response, $info); 248 | } 249 | 250 | /** deciphers data returned from Habbo and tries to throw the correct exception 251 | * 252 | * @param $data 253 | * @throws Exception 254 | * @throws HabboNotFoundException 255 | * @throws MaintenanceException 256 | * @throws UserInvalidException 257 | */ 258 | public static function throwHabboAPIException($data) 259 | { 260 | // Do we find 'maintenance' anywhere? 261 | if (str_contains($data, 'maintenance')) { 262 | throw new MaintenanceException("Hotel API is down for maintenance"); 263 | } 264 | 265 | // Check if data is JSON 266 | if ($data[0] == "{") { // Quick 'hack' to see if this could be JSON 267 | $json = json_decode($data, true); 268 | if (isset($json['errors'])) { 269 | if ($json['errors'][0]['msg'] == "user.invalid_name") { 270 | throw new UserInvalidException("The name you supplied appears to be invalid"); 271 | } 272 | $defaultMessage = $json['errors'][0]['msg']; 273 | } else if (isset($json['error'])) { 274 | if (str_contains($json['error'], 'not-found')) { 275 | throw new HabboNotFoundException("We can not find the Habbo you're looking for"); 276 | } 277 | $defaultMessage = $json['error']; 278 | } else { 279 | $defaultMessage = $json; 280 | } 281 | } else { 282 | $defaultMessage = "An unknown HTML page was returned"; 283 | } 284 | 285 | throw new Exception("Unknown HabboAPI exception occurred: " . $defaultMessage); 286 | } 287 | } -------------------------------------------------------------------------------- /src/HabboParserInterface.php: -------------------------------------------------------------------------------- 1 | achievement = new Achievement(); 23 | $this->achievement->parse(self::$data[0]); 24 | 25 | $this->achievement2 = new Achievement(); 26 | $this->achievement2->parse(self::$data[1]); 27 | 28 | } 29 | 30 | public function testEntityType() 31 | { 32 | $this->assertInstanceOf('HabboAPI\Entities\Achievement', $this->achievement); 33 | } 34 | 35 | public function testGetters() 36 | { 37 | // First achievement 38 | $this->assertEquals(3, $this->achievement->getId()); 39 | $this->assertEquals("EmailVerification", $this->achievement->getName()); 40 | $this->assertEquals("identity", $this->achievement->getCategory()); 41 | 42 | $this->assertEquals(0, $this->achievement->getScore()); 43 | $this->assertEquals(1, $this->achievement->getLevel()); 44 | 45 | // Second achievement 46 | $this->assertEquals(4, $this->achievement2->getId()); 47 | $this->assertEquals("Login", $this->achievement2->getName()); 48 | $this->assertEquals("identity", $this->achievement2->getCategory()); 49 | 50 | $this->assertEquals(2, $this->achievement2->getScore()); 51 | $this->assertEquals(1, $this->achievement2->getLevel()); 52 | } 53 | 54 | public function testAllForExceptions() 55 | { 56 | // All achievements.. 57 | foreach (self::$data as $data) { 58 | $entity = new Achievement(); 59 | $entity->parse($data); 60 | 61 | // Make sure it doesn't throw errors 62 | $this->assertInstanceOf('HabboAPI\Entities\Achievement', $entity); 63 | } 64 | } 65 | 66 | } 67 | -------------------------------------------------------------------------------- /tests/Entities/BadgeTest.php: -------------------------------------------------------------------------------- 1 | badge = new Badge(); 22 | $this->badge->parse(self::$data['badges'][0]); 23 | } 24 | 25 | public function testEntityType() 26 | { 27 | $this->assertInstanceOf('HabboAPI\Entities\Badge', $this->badge); 28 | } 29 | 30 | public function testGetCode() 31 | { 32 | $this->assertEquals('THI41', $this->badge->getCode()); 33 | } 34 | 35 | public function testGetName() 36 | { 37 | $this->assertEquals('...will go on!!!', $this->badge->getName()); 38 | } 39 | 40 | public function testGetDescription() 41 | { 42 | $this->assertEquals('Winner of broken hearts 2/2', $this->badge->getDescription()); 43 | } 44 | 45 | public function testAllForExceptions() 46 | { 47 | foreach (self::$data['badges'] as $data) { 48 | $entity = new Badge(); 49 | $entity->parse($data); 50 | 51 | // Make sure it doesn't throw errors 52 | $this->assertInstanceOf('HabboAPI\Entities\Badge', $entity); 53 | } 54 | } 55 | 56 | } 57 | -------------------------------------------------------------------------------- /tests/Entities/GroupTest.php: -------------------------------------------------------------------------------- 1 | entity = new Group(); 22 | $this->entity->parse(self::$data['groups'][0]); 23 | } 24 | 25 | public function testEntityType() 26 | { 27 | $this->assertInstanceOf('HabboAPI\Entities\Group', $this->entity); 28 | } 29 | 30 | public function testGetId() 31 | { 32 | $this->assertEquals('g-hhus-1332dcd15645042afc396f726351721d', $this->entity->getId()); 33 | } 34 | 35 | public function testGetName() 36 | { 37 | $this->assertEquals('Ditch the Label', $this->entity->getName()); 38 | } 39 | 40 | public function testGetDescription() 41 | { 42 | $this->assertEquals('The official Ditch the Label anti-bullying public group. Join now and support our cause! Find out more at www.DitchtheLabel.org', $this->entity->getDescription()); 43 | } 44 | 45 | public function testGetType() 46 | { 47 | $this->assertEquals('NORMAL', $this->entity->getType()); 48 | } 49 | 50 | public function testGetRoomId() 51 | { 52 | $this->assertEquals('r-hhus-a08de337a9dc601102b0139194164f78', $this->entity->getRoomId()); 53 | } 54 | 55 | public function testGetBadgeCode() 56 | { 57 | $this->assertEquals('b13114s19134a55aa7427bc0a3f0c083e94232fb3475', $this->entity->getBadgeCode()); 58 | } 59 | 60 | public function testGetPrimaryColour() 61 | { 62 | $this->assertEquals('242424', $this->entity->getPrimaryColour()); 63 | } 64 | 65 | public function testIncompleteGroup() 66 | { 67 | $incomplete = array( 68 | 'id' => 'g-hhtr-8fe11690ee3f3b36705dd3f6ecb3dde3', 69 | 'name' => 'Crowleys Koffie Clan', 70 | 'description' => 'Iedereen een kopje koffie?', 71 | 'type' => 'NORMAL' 72 | ); 73 | $this->entity = new Group(); 74 | $this->entity->parse($incomplete); 75 | 76 | // Is valid entity? 77 | $this->assertInstanceOf('HabboAPI\Entities\Group', $this->entity); 78 | 79 | $this->assertEquals('Iedereen een kopje koffie?', $this->entity->getDescription()); 80 | $this->assertNull($this->entity->getPrimaryColor()); 81 | } 82 | 83 | /** 84 | * Explicitly checks the helper method with EN_US locale 85 | */ 86 | public function testGetSecondaryColor() 87 | { 88 | $this->assertEquals('ffffff', $this->entity->getSecondaryColor()); 89 | } 90 | 91 | public function testIsAdmin() 92 | { 93 | $this->assertFalse($this->entity->getIsAdmin()); 94 | } 95 | 96 | public function testAllForExceptions() 97 | { 98 | foreach (self::$data['groups'] as $data) { 99 | $entity = new Group(); 100 | $entity->parse($data); 101 | 102 | // Make sure it doesn't throw errors 103 | $this->assertInstanceOf('HabboAPI\Entities\Group', $entity); 104 | } 105 | } 106 | 107 | } 108 | -------------------------------------------------------------------------------- /tests/Entities/HabboSandboxTest.php: -------------------------------------------------------------------------------- 1 | habbo = new Habbo(); 27 | $this->habbo->parse(self::$data); 28 | } 29 | 30 | public function testEntityType() 31 | { 32 | $this->assertInstanceOf('HabboAPI\Entities\Habbo', $this->habbo); 33 | } 34 | 35 | public function testGetId() 36 | { 37 | $this->assertEquals('hhs2-15cdd228b60baf1fcd72283ab29d1527', $this->habbo->getId()); 38 | } 39 | 40 | public function testGetHabboName() 41 | { 42 | $this->assertEquals('Johno', $this->habbo->getHabboName()); 43 | } 44 | 45 | public function testGetFigureString() 46 | { 47 | $this->assertEquals('hr-165-31.hd-180-1.ch-215-1408.lg-280-1408.sh-300-1408.fa-1201', $this->habbo->getFigureString()); 48 | } 49 | 50 | public function testGetMotto() 51 | { 52 | $this->assertEquals('null', $this->habbo->getMotto()); 53 | } 54 | 55 | public function testGetMemberSince() 56 | { 57 | $this->assertInstanceOf('\Carbon\Carbon', $this->habbo->getMemberSince()); 58 | $this->assertEquals('Jul 19, 2004', $this->habbo->getMemberSince()->toFormattedDateString()); 59 | } 60 | 61 | public function testGetLastAccessTime() 62 | { 63 | $this->assertInstanceOf('\Carbon\Carbon', $this->habbo->getLastAccessTime()); 64 | $this->assertEquals('Dec 7, 2020', $this->habbo->getLastAccessTime()->toFormattedDateString()); 65 | } 66 | 67 | public function testFiveSelectedBadges() 68 | { 69 | $selectedBadges = $this->habbo->getSelectedBadges(); 70 | $this->assertCount(3, $selectedBadges); 71 | $this->assertInstanceOf('HabboAPI\Entities\Badge', $selectedBadges[0]); 72 | } 73 | 74 | public function testHasProfile() 75 | { 76 | $this->assertTrue($this->habbo->hasProfile()); 77 | } 78 | 79 | public function testIsOnline() 80 | { 81 | $this->assertNotTrue($this->habbo->isOnline()); 82 | } 83 | 84 | public function testCurrentLevel() 85 | { 86 | $this->assertEquals(7, $this->habbo->getCurrentLevel()); 87 | } 88 | 89 | public function testCurrentLevelCompleted() 90 | { 91 | $this->assertEquals(75, $this->habbo->getCurrentLevelCompleted()); 92 | } 93 | 94 | public function testTotalExp() 95 | { 96 | $this->assertEquals(110, $this->habbo->getTotalExperience()); 97 | } 98 | 99 | public function testStarGem() 100 | { 101 | $this->assertEquals(18, $this->habbo->getStarGemCount()); 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /tests/Entities/HabboTest.php: -------------------------------------------------------------------------------- 1 | habbo = new Habbo(); 27 | $this->habbo->parse(self::$data); 28 | } 29 | 30 | public function testEntityType() 31 | { 32 | $this->assertInstanceOf('HabboAPI\Entities\Habbo', $this->habbo); 33 | } 34 | 35 | public function testGetId() 36 | { 37 | $this->assertEquals('hhus-9cd61b156972c2eb33a145d69918f965', $this->habbo->getId()); 38 | } 39 | 40 | public function testGetHabboName() 41 | { 42 | $this->assertEquals('koeientemmer', $this->habbo->getHabboName()); 43 | } 44 | 45 | public function testGetFigureString() 46 | { 47 | $this->assertEquals('hd-195-1.ch-215-75.lg-3290-91.sh-905-1408.ha-1015.wa-2001', $this->habbo->getFigureString()); 48 | } 49 | 50 | public function testGetMotto() 51 | { 52 | $this->assertEquals('Oldskooler than Dionysus!', $this->habbo->getMotto()); 53 | } 54 | 55 | public function testGetMemberSince() 56 | { 57 | $this->assertInstanceOf('\Carbon\Carbon', $this->habbo->getMemberSince()); 58 | $this->assertEquals('Oct 6, 2001', $this->habbo->getMemberSince()->toFormattedDateString()); 59 | } 60 | 61 | public function testFiveSelectedBadges() 62 | { 63 | $selectedBadges = $this->habbo->getSelectedBadges(); 64 | $this->assertCount(5, $selectedBadges); 65 | $this->assertInstanceOf('HabboAPI\Entities\Badge', $selectedBadges[0]); 66 | } 67 | 68 | public function testHasProfile() 69 | { 70 | $this->assertTrue($this->habbo->hasProfile()); 71 | } 72 | 73 | public function testCurrentLevel() 74 | { 75 | // this test should fail, as this data is from pre-2020 Habbo API 76 | $this->assertEquals(0, $this->habbo->getCurrentLevel()); 77 | } 78 | 79 | public function testLastAccessTime() 80 | { 81 | // this test should fail, as this data is from pre-2020 Habbo API 82 | $this->assertNull($this->habbo->getLastAccessTime()); 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /tests/Entities/PhotoTest.php: -------------------------------------------------------------------------------- 1 | photo = new Photo(); 27 | $this->photo->parse(self::$data[0]); 28 | } 29 | 30 | public function testEntityType() 31 | { 32 | $this->assertInstanceOf('HabboAPI\Entities\Photo', $this->photo); 33 | } 34 | 35 | public function testProperties() 36 | { 37 | $this->assertEquals('171ed8e4-6424-4c10-8ef1-bdddde2b4343', $this->photo->getId()); 38 | $this->assertEquals('//habbo-stories-content.s3.amazonaws.com/servercamera/purchased/hhus/p-31212674-1448057454995.png', $this->photo->getPreviewUrl()); 39 | $this->assertEquals(array(), $this->photo->getTags()); 40 | $this->assertEquals('hhus-9cd61b156972c2eb33a145d69918f965', $this->photo->getCreatorUniqueId()); 41 | $this->assertEquals('koeientemmer', $this->photo->getCreatorName()); 42 | $this->assertEquals(31212674, $this->photo->getCreatorId()); 43 | $this->assertEquals('PHOTO', $this->photo->getType()); 44 | $this->assertEquals('//habbo-stories-content.s3.amazonaws.com/servercamera/purchased/hhus/p-31212674-1448057454995.png', $this->photo->getUrl()); 45 | $this->assertInstanceOf('\Carbon\Carbon', $this->photo->getTakenOn()); 46 | $this->assertEquals('Nov 20, 2015', $this->photo->getTakenOn()->toFormattedDateString()); 47 | $this->assertEquals(65285667, $this->photo->getRoomId()); 48 | $this->assertEquals(array('aapo'), $this->photo->getLikes()); 49 | } 50 | 51 | } 52 | -------------------------------------------------------------------------------- /tests/Entities/ProfileTest.php: -------------------------------------------------------------------------------- 1 | profile = new Profile(); 23 | 24 | // Create and add Habbo 25 | $habbo = new Habbo(); 26 | $habbo->parse(self::$data['user']); 27 | $this->profile->setHabbo($habbo); 28 | 29 | // Create and add all Badge 30 | foreach (self::$data['badges'] as $badge_data) { 31 | $badge = new Badge(); 32 | $badge->parse($badge_data); 33 | $this->profile->addBadge($badge); 34 | } 35 | 36 | // Create and add all Groups 37 | foreach (self::$data['groups'] as $group_data) { 38 | $group = new Group(); 39 | $group->parse($group_data); 40 | $this->profile->addGroup($group); 41 | } 42 | 43 | // Create and add all Friends 44 | foreach (self::$data['friends'] as $friend_data) { 45 | $friend = new Habbo(); 46 | $friend->parse($friend_data); 47 | $this->profile->addFriend($friend); 48 | } 49 | 50 | // Create and add all Rooms 51 | foreach (self::$data['rooms'] as $room_data) { 52 | $room = new Room(); 53 | $room->parse($room_data); 54 | $this->profile->addRoom($room); 55 | } 56 | } 57 | 58 | public function testEntityType() 59 | { 60 | $this->assertInstanceOf('HabboAPI\Entities\Profile', $this->profile); 61 | } 62 | 63 | public function testCounts() 64 | { 65 | $counts = $this->profile->getCounts(); 66 | 67 | $this->assertEquals(1, $counts['habbo'], "Habbo count should be 1"); 68 | $this->assertEquals(204, $counts['badges'], "Badges count should be 204"); 69 | $this->assertEquals(10, $counts['groups'], "Groups count should be 10"); 70 | $this->assertEquals(146, $counts['friends'], "Friends count should be 146"); 71 | $this->assertEquals(5, $counts['rooms'], "Rooms count should be 5"); 72 | } 73 | 74 | } 75 | -------------------------------------------------------------------------------- /tests/Entities/RoomTest.php: -------------------------------------------------------------------------------- 1 | entity = new Room(); 22 | $this->entity->parse(self::$data['rooms'][0]); 23 | } 24 | 25 | public function testEntityType() 26 | { 27 | $this->assertInstanceOf('HabboAPI\Entities\Room', $this->entity); 28 | } 29 | 30 | public function testGetId() 31 | { 32 | $this->assertEquals('r-hhus-a091e0f1d891108b49ca7af953386f0f', $this->entity->getId()); 33 | } 34 | 35 | public function testGetOldId() 36 | { 37 | $this->assertEquals(31159787, $this->entity->getOldId()); 38 | } 39 | 40 | public function testGetName() 41 | { 42 | $this->assertEquals('Venice Beach Rollercoaster', $this->entity->getName()); 43 | } 44 | 45 | public function testGetDescription() 46 | { 47 | $this->assertEquals('Ahh well..', $this->entity->getDescription()); 48 | } 49 | 50 | public function testGetOwnerId() 51 | { 52 | $this->assertEquals('hhus-9cd61b156972c2eb33a145d69918f965', $this->entity->getOwnerUniqueId()); 53 | } 54 | 55 | public function testGetTags() 56 | { 57 | $this->assertEquals(array("habbies"), $this->entity->getTags()); 58 | } 59 | 60 | public function testGetCategories() 61 | { 62 | $this->assertEquals(array("navigator.flatcategory.global.CHAT"), $this->entity->getCategories()); 63 | } 64 | 65 | public function testGetCreationTime() 66 | { 67 | $this->assertInstanceOf('\Carbon\Carbon', $this->entity->getCreationTime()); 68 | $this->assertEquals('Jun 10, 2010', $this->entity->getCreationTime()->toFormattedDateString()); 69 | } 70 | 71 | public function testGetMaximumVisitors() 72 | { 73 | $this->assertEquals(25, $this->entity->getMaximumVisitors()); 74 | } 75 | 76 | public function testGetShowOwnerName() 77 | { 78 | $this->assertEquals(true, $this->entity->getShowOwnerName()); 79 | } 80 | 81 | public function testGetOwnerName() 82 | { 83 | $this->assertEquals('koeientemmer', $this->entity->getOwnerName()); 84 | } 85 | 86 | public function testGetThumbnailUrl() 87 | { 88 | $this->assertEquals('https://habbo-stories-content.s3.amazonaws.com/navigator-thumbnail/hhus/31159787.png', $this->entity->getThumbnailUrl()); 89 | } 90 | 91 | public function testGetImageUrl() 92 | { 93 | $this->assertEquals('https://habbo-stories-content.s3.amazonaws.com/fullroom-photo/hhus/31159787.png', $this->entity->getImageUrl()); 94 | } 95 | 96 | public function testGetRating() 97 | { 98 | $this->assertEquals(116, $this->entity->getRating()); 99 | } 100 | 101 | public function testAllForExceptions() 102 | { 103 | foreach (self::$data['rooms'] as $data) { 104 | $entity = new Room(); 105 | $entity->parse($data); 106 | 107 | // Make sure it doesn't throw errors 108 | $this->assertInstanceOf('HabboAPI\Entities\Room', $entity); 109 | } 110 | } 111 | 112 | public function testGroupId() 113 | { 114 | // expect room index 0 to be empty 115 | $this->assertEquals("", $this->entity->getGroupId()); 116 | 117 | $otherRoom = new Room(); 118 | $otherRoom->parse(self::$data['rooms'][3]); 119 | 120 | // room index 3 however, should be filled 121 | $this->assertEquals("g-hhus-c86db765b12d3146dde2495d19510cf4", $otherRoom->getGroupId()); 122 | } 123 | } 124 | -------------------------------------------------------------------------------- /tests/HabboParserTest.php: -------------------------------------------------------------------------------- 1 | habboParserMock = $this->getMockBuilder('\HabboAPI\HabboParser') 31 | ->onlyMethods(['_callUrl']) 32 | ->getMock(); 33 | 34 | } 35 | 36 | /** 37 | * Testing the parseHabbo method with static input 38 | */ 39 | public function testParseHabbo() 40 | { 41 | // Replace parseHabbo with static data 42 | $this->habboParserMock->expects($this->once())->method('_callUrl')->will($this->returnValue(array(self::$habbo))); 43 | 44 | /** @var Habbo $habboObject */ 45 | $habboObject = $this->habboParserMock->parseHabbo('koeientemmer'); 46 | 47 | $this->assertInstanceOf('HabboAPI\Entities\Habbo', $habboObject); 48 | $selectedBadges = $habboObject->getSelectedBadges(); 49 | $this->assertInstanceOf('HabboAPI\Entities\Badge', $selectedBadges[0]); 50 | } 51 | 52 | public function testParseHabboWithId() 53 | { 54 | // Should use HHID based url 55 | $this->habboParserMock->expects($this->once()) 56 | ->method('_callUrl') 57 | ->with('https://www.habbo.com/api/public/users/hhus-9cd61b156972c2eb33a145d69918f965') 58 | ->will($this->returnValue(array(self::$habbo))); 59 | 60 | $this->habboParserMock->parseHabbo('hhus-9cd61b156972c2eb33a145d69918f965', true); 61 | } 62 | 63 | public function testParseProfile() 64 | { 65 | // Replace parseProfile with static data 66 | $this->habboParserMock->expects($this->once())->method('_callUrl')->will($this->returnValue(array(self::$profile))); 67 | 68 | /** @var Profile $profile */ 69 | $profile = $this->habboParserMock->parseProfile('hhus-9cd61b156972c2eb33a145d69918f965'); 70 | 71 | $friends = $profile->getFriends(); 72 | $groups = $profile->getGroups(); 73 | $rooms = $profile->getRooms(); 74 | $badges = $profile->getBadges(); 75 | $this->assertInstanceOf('HabboAPI\Entities\Profile', $profile); 76 | $this->assertInstanceOf('HabboAPI\Entities\Habbo', $profile->getHabbo()); 77 | $this->assertInstanceOf('HabboAPI\Entities\Habbo', $friends[0]); 78 | $this->assertInstanceOf('HabboAPI\Entities\Group', $groups[0]); 79 | $this->assertInstanceOf('HabboAPI\Entities\Room', $rooms[0]); 80 | $this->assertInstanceOf('HabboAPI\Entities\Badge', $badges[0]); 81 | } 82 | 83 | public function testParseHabboPhotos() 84 | { 85 | // Replace Habbo Parser mock with static data 86 | $this->habboParserMock->expects($this->once())->method('_callUrl')->will($this->returnValue(array(self::$photos))); 87 | 88 | $photos = $this->habboParserMock->parsePhotos('hhus-9cd61b156972c2eb33a145d69918f965'); 89 | 90 | $this->assertEquals(2, count($photos), "Should contain 2 photos"); 91 | $this->assertInstanceOf('HabboAPI\Entities\Photo', $photos[0]); 92 | $this->assertInstanceOf('HabboAPI\Entities\Photo', $photos[1]); 93 | } 94 | 95 | public function testParsePublicPhotos() 96 | { 97 | // Replace Habbo Parser mock with static data 98 | $this->habboParserMock->expects($this->once())->method('_callUrl')->will($this->returnValue(array(self::$public_photos))); 99 | 100 | $photos = $this->habboParserMock->parsePhotos(); 101 | 102 | $this->assertEquals(200, count($photos), "Should contain 200 photos"); 103 | foreach ($photos as $photo) { 104 | $this->assertInstanceOf('HabboAPI\Entities\Photo', $photo); 105 | } 106 | } 107 | 108 | public function testParseGroup() 109 | { 110 | // Replace Habbo Parser mock with static data 111 | $this->habboParserMock->expects($this->any()) 112 | ->method('_callUrl') 113 | ->willReturnOnConsecutiveCalls([self::$group], [self::$group_members]); 114 | 115 | $group = $this->habboParserMock->parseGroup("g-hhus-fd92759bc932225f663f1521be8ce255"); 116 | $members = $group->getMembers(); 117 | 118 | $this->assertInstanceOf('HabboAPI\Entities\Group', $group); 119 | foreach ($members as $member) { 120 | $this->assertInstanceOf('HabboAPI\Entities\Habbo', $member); 121 | } 122 | } 123 | 124 | public function testParseAchievements() 125 | { 126 | $this->habboParserMock->expects($this->once())->method('_callUrl')->will($this->returnValue(array(self::$achievements))); 127 | 128 | $achievements = $this->habboParserMock->parseAchievements("hhus-9cd61b156972c2eb33a145d69918f965"); 129 | 130 | $this->assertEquals(44, count($achievements), "Should contain 44 achievements"); 131 | foreach ($achievements as $achievement) { 132 | $this->assertInstanceOf('HabboAPI\Entities\Achievement', $achievement); 133 | } 134 | } 135 | 136 | public function testMaintenanceException() 137 | { 138 | $this->expectException(MaintenanceException::class); 139 | HabboParser::throwHabboAPIException(self::$hotel_maintenance); 140 | } 141 | 142 | public function testHabboNotFoundException() 143 | { 144 | $this->expectException(HabboNotFoundException::class); 145 | $not_found = '{"error":"not-found"}'; 146 | HabboParser::throwHabboAPIException($not_found); 147 | } 148 | 149 | public function testUserInvalidException() 150 | { 151 | $this->expectException(UserInvalidException::class); 152 | $invalid = '{"errors":[{"param":"name","msg":"user.invalid_name","value":"a"}]}'; 153 | HabboParser::throwHabboAPIException($invalid); 154 | } 155 | 156 | public function testSomeHTMLException() 157 | { 158 | $this->expectException(Exception::class); 159 | $some_html = 'Fake HTML from HabboSorry, we have failing machines'; 160 | HabboParser::throwHabboAPIException($some_html); 161 | } 162 | 163 | public function testSomeJSONException() 164 | { 165 | $this->expectException(Exception::class); 166 | $some_json = '{"error":"something we dont recognize"}'; 167 | HabboParser::throwHabboAPIException($some_json); 168 | } 169 | } 170 | -------------------------------------------------------------------------------- /tests/data/com_group.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "g-hhus-fd92759bc932225f663f1521be8ce255", 3 | "name": "UK", 4 | "description": "", 5 | "type": "NORMAL", 6 | "roomId": "r-hhus-dcf2e2a74a39f64dc627c5ef32a1aa83", 7 | "badgeCode": "b22114s19107t50064e4bcf7c532fdcecc1467d2185d975783", 8 | "primaryColour": "ffd601", 9 | "secondaryColour": "ffffff" 10 | } -------------------------------------------------------------------------------- /tests/data/com_group_members.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "gender": "f", 4 | "motto": "", 5 | "habboFigure": "hr-9534-45.hd-600-1.ch-3013-92.lg-3216-1332.sh-3064-1332.cc-3008-92-1332.cp-3128-62", 6 | "memberSince": "2005-01-05T08:21:03.000+0000", 7 | "uniqueId": "hhus-3037442649c23d0ab7c9c059cbf91981", 8 | "name": "aiko05$", 9 | "isAdmin": false 10 | }, 11 | { 12 | "gender": "m", 13 | "motto": "hello!", 14 | "habboFigure": "hr-125-45.hd-180-1.ch-255-82.lg-3023-88.sh-300-91", 15 | "memberSince": "2005-11-25T23:34:19.000+0000", 16 | "uniqueId": "hhus-0b2bde97bcf11e57e71f0fe9ad963574", 17 | "name": "Jyoko", 18 | "isAdmin": false 19 | }, 20 | { 21 | "gender": "m", 22 | "motto": "I'm Anthony ƒ Add etc NEW ACCOUNT", 23 | "habboFigure": "hr-170-45.hd-190-1.ch-255-78.lg-275-82.sh-290-62.ha-1004-91", 24 | "memberSince": "2006-04-03T17:02:12.000+0000", 25 | "uniqueId": "hhus-62e9cb80440a5ac20fab88b452c94a42", 26 | "name": "Mirokujr", 27 | "isAdmin": false 28 | }, 29 | { 30 | "gender": "m", 31 | "motto": "", 32 | "habboFigure": "hr-891-42.hd-180-1.ch-3109-72-62.lg-281-72.sh-906-72.ha-1003-64.ea-3169-100.fa-1201.cp-3120-62", 33 | "memberSince": "2006-05-21T20:32:58.000+0000", 34 | "uniqueId": "hhus-bb7b09144f28973e9f67a4870de45ec8", 35 | "name": "GPN$", 36 | "isAdmin": false 37 | }, 38 | { 39 | "gender": "m", 40 | "motto": "Welcome to my World", 41 | "habboFigure": "hr-3090-39.hd-180-8.ch-808-71.lg-3078-1408.sh-906-1408.fa-1201", 42 | "memberSince": "2006-11-24T18:42:24.000+0000", 43 | "uniqueId": "hhus-d9af0aae817ce78b3368e7964900604e", 44 | "name": "APJ12345", 45 | "isAdmin": false 46 | }, 47 | { 48 | "gender": "m", 49 | "motto": "", 50 | "habboFigure": "hr-100.hd-180-30.ch-878-66-66.lg-280-81.sh-290-80.ha-1001.ea-1404-62", 51 | "memberSince": "2007-01-03T05:20:24.000+0000", 52 | "uniqueId": "hhus-933941f766152d74739da821c64dcb7c", 53 | "name": "ratsareus4", 54 | "isAdmin": false 55 | }, 56 | { 57 | "gender": "m", 58 | "motto": "Habbo.es -> WELCH", 59 | "habboFigure": "hr-155-35.hd-208-1.ch-877-88-64.lg-270-91.sh-305-90.ca-1805-64.wa-2001", 60 | "memberSince": "2009-02-11T19:47:27.000+0000", 61 | "uniqueId": "hhus-34d9d3acc31cfbb7bcbfbf7496ab2ed7", 62 | "name": "Angelcostarica", 63 | "isAdmin": false 64 | }, 65 | { 66 | "gender": "m", 67 | "motto": "legit", 68 | "habboFigure": "hr-3163-33.hd-209-9.ch-3185-1323.lg-3078-110.sh-3089-110.ea-1404-110.cc-3007-1315-1323", 69 | "memberSince": "2009-03-07T08:27:22.000+0000", 70 | "uniqueId": "hhus-7c28b9c01393fc407ff1c4045a7ca526", 71 | "name": "redogg26", 72 | "isAdmin": false 73 | }, 74 | { 75 | "gender": "f", 76 | "motto": "Get Real", 77 | "habboFigure": "hr-540-42.hd-605-18.ch-667.lg-3116-64-62.ha-1002-62.he-1601.ca-1817", 78 | "memberSince": "2010-03-26T08:37:29.000+0000", 79 | "uniqueId": "hhus-19c23f895fd96a5ecdc35b8857398b6f", 80 | "name": "ashley11789", 81 | "isAdmin": false 82 | }, 83 | { 84 | "gender": "m", 85 | "motto": "Live long and prosper.", 86 | "habboFigure": "hr-155-32.hd-180-1.ch-210-62.lg-270-63.sh-300-63", 87 | "memberSince": "2008-10-11T11:26:32.000+0000", 88 | "uniqueId": "hhus-e2c928faf4226143afd9365a79a25570", 89 | "name": "meszzy2", 90 | "isAdmin": false 91 | }, 92 | { 93 | "gender": "f", 94 | "motto": "ive been here a while...", 95 | "habboFigure": "hr-555-48.hd-600-1.ch-635-75.lg-720-83.sh-730-1408", 96 | "memberSince": "2006-12-07T17:18:57.000+0000", 97 | "uniqueId": "hhus-95b21c0b8fd8503f324b7b0b388534e8", 98 | "name": "Kerfuffle^", 99 | "isAdmin": false 100 | }, 101 | { 102 | "gender": "m", 103 | "motto": "", 104 | "habboFigure": "hr-110-40.hd-190-1.ch-804-83.lg-270-81.sh-905-1408.he-3329-1408-1408", 105 | "memberSince": "2004-11-22T17:11:19.000+0000", 106 | "uniqueId": "hhus-bd50cd6c54b15b55de322436b7c8648c", 107 | "name": "Toilet", 108 | "isAdmin": false 109 | }, 110 | { 111 | "gender": "f", 112 | "motto": "Boredom is the midwife of creativity.", 113 | "habboFigure": "hr-832-41.hd-600-1.ch-675-1333.lg-3116-1408-1408.sh-730-1408.ea-3108-1408-68.fa-1205-1428.ca-3292-1409", 114 | "memberSince": "2005-11-23T15:24:05.000+0000", 115 | "uniqueId": "hhus-ec44435be37b5abbaaa6652be23ca365", 116 | "name": "S.J.Ballantyne", 117 | "isAdmin": false 118 | }, 119 | { 120 | "gender": "m", 121 | "motto": "I just really like HxC", 122 | "habboFigure": "hr-679-31.hd-209-8.ch-210-1408.lg-270-64.cc-260-1408", 123 | "memberSince": "2009-04-21T08:25:18.000+0000", 124 | "uniqueId": "hhus-6bbbc2112b260823f56ec3f09654e4ea", 125 | "name": "Chocohollic1", 126 | "isAdmin": false 127 | }, 128 | { 129 | "gender": "m", 130 | "motto": "", 131 | "habboFigure": "hr-155-34.hd-180-1.ch-3030-81.lg-285-90.sh-290-1408.he-1601.ca-3413-1408", 132 | "memberSince": "2006-03-31T18:17:55.000+0000", 133 | "uniqueId": "hhus-c988e3eb597d0a9bd11edf622790f130", 134 | "name": ".:Admiral:.", 135 | "isAdmin": false 136 | }, 137 | { 138 | "gender": "m", 139 | "motto": ":P", 140 | "habboFigure": "hr-170-40.hd-205-14.ch-235-1408.lg-285-1408.sh-295-1408.fa-1201", 141 | "memberSince": "2008-11-28T21:31:57.000+0000", 142 | "uniqueId": "hhus-cbfd6364c9f931a689104d9e4f420adb", 143 | "name": "jsmftla", 144 | "isAdmin": false 145 | }, 146 | { 147 | "gender": "m", 148 | "motto": "Oldskooler than Dionysus!", 149 | "habboFigure": "hd-195-1.ch-215-75.lg-3290-91.sh-905-1408.ha-1015.wa-2001", 150 | "memberSince": "2001-10-06T12:21:53.000+0000", 151 | "uniqueId": "hhus-9cd61b156972c2eb33a145d69918f965", 152 | "name": "koeientemmer", 153 | "isAdmin": false 154 | }, 155 | { 156 | "gender": "m", 157 | "motto": ":)", 158 | "habboFigure": "hr-891-32.hd-180-14.ch-215-73.lg-280-1408.cp-3119-1408", 159 | "memberSince": "2004-06-13T09:14:19.000+0000", 160 | "uniqueId": "hhus-216da3e55a96848dc83eb15fd3e7ab17", 161 | "name": "partie2", 162 | "isAdmin": false 163 | }, 164 | { 165 | "gender": "m", 166 | "motto": "", 167 | "habboFigure": "hd-180-14.ch-210-1408.lg-275-1408.sh-290-1408.ea-1401-1408", 168 | "memberSince": "2009-01-01T16:48:28.000+0000", 169 | "uniqueId": "hhus-ec608f299072417890468d98a24d9ff3", 170 | "name": "rocky2581", 171 | "isAdmin": false 172 | }, 173 | { 174 | "gender": "m", 175 | "motto": "Life is A Game, Play It Right", 176 | "habboFigure": "hr-115-31.hd-180-1.ch-805-1408.lg-280-90.sh-295-90.ca-1815-90", 177 | "memberSince": "2006-03-18T15:23:01.000+0000", 178 | "uniqueId": "hhus-2d0fd42ae3b260bb4ad7a9bb9ae0762b", 179 | "name": "mark9087", 180 | "isAdmin": false 181 | }, 182 | { 183 | "gender": "m", 184 | "motto": "", 185 | "habboFigure": "hd-208-14.ch-878-72-1408.lg-275-64.sh-300-64.ha-1005-64.ea-1404-1408.fa-1205-1408.wa-2001", 186 | "memberSince": "2004-04-19T06:49:13.000+0000", 187 | "uniqueId": "hhus-ff486d7ad86e1ba72b7567931056dc4b", 188 | "name": "Ceissi", 189 | "isAdmin": false 190 | }, 191 | { 192 | "gender": "m", 193 | "motto": "", 194 | "habboFigure": "hd-180-14.ch-210-1408.lg-3391-1408-1408.sh-3419-1408-1408.ha-3409-1408-1408.fa-3344-91", 195 | "memberSince": "2010-03-28T13:50:25.000+0000", 196 | "uniqueId": "hhus-14da8398e441a920f74fb1431914dea8", 197 | "name": "Netue", 198 | "isAdmin": false 199 | }, 200 | { 201 | "gender": "f", 202 | "motto": "Janoskians |", 203 | "habboFigure": "hr-545-31.hd-605-1.ch-660-76.lg-700-1408", 204 | "memberSince": "2009-04-04T12:47:19.000+0000", 205 | "uniqueId": "hhus-12103604fb9ff9fa64b321451b3d7f16", 206 | "name": "BAMItzMick:", 207 | "isAdmin": false 208 | }, 209 | { 210 | "gender": "f", 211 | "motto": ":]", 212 | "habboFigure": "hr-3012-34.hd-600-3.ch-650-62.lg-3088-63-62.sh-735-92.he-3181-110.cc-3249-1335-1339", 213 | "memberSince": "2007-10-28T16:34:00.000+0000", 214 | "uniqueId": "hhus-c5f5630691e29a89ab151daba8980ae5", 215 | "name": "paris915", 216 | "isAdmin": false 217 | }, 218 | { 219 | "gender": "m", 220 | "motto": "chazzy", 221 | "habboFigure": "hr-125-32.hd-209-2.ch-210-64.lg-280-63.sh-300-64", 222 | "memberSince": "2007-11-15T18:09:27.000+0000", 223 | "uniqueId": "hhus-60105c079ebf06d4adb2fd36d12cbf53", 224 | "name": "Shakey112", 225 | "isAdmin": false 226 | }, 227 | { 228 | "gender": "f", 229 | "motto": "complexity.", 230 | "habboFigure": "hr-3247-1342.hd-600-9.ch-3051-1325-62.lg-3174-1324-62.ha-3117-1334", 231 | "memberSince": "2009-07-24T23:37:44.000+0000", 232 | "uniqueId": "hhus-e974fc230766b62d7294ecbf90547397", 233 | "name": "tiinybecs", 234 | "isAdmin": false 235 | }, 236 | { 237 | "gender": "m", 238 | "motto": "Brazil", 239 | "habboFigure": "hr-155-42.hd-180-14.ch-210-1408.lg-3216-1408.fa-1202-73.ca-1819", 240 | "memberSince": "2007-11-20T20:20:42.000+0000", 241 | "uniqueId": "hhus-dbfa68a104d5d3f935ce5ea4355027e6", 242 | "name": "juniorgba", 243 | "isAdmin": false 244 | }, 245 | { 246 | "gender": "m", 247 | "motto": "Nanannanana", 248 | "habboFigure": "hr-155-45.hd-180-5.ch-210-84.lg-281-81", 249 | "memberSince": "2009-10-29T21:10:22.000+0000", 250 | "uniqueId": "hhus-b24afcaa412e9f544c4b0591016ae20a", 251 | "name": "jesnisse.se", 252 | "isAdmin": false 253 | }, 254 | { 255 | "gender": "m", 256 | "motto": "Im BBG-Safe,ThatOnePlace", 257 | "habboFigure": "hr-165-61.hd-3091-14.ch-3001-1330-110.lg-280-110.sh-290-1330.fa-1201", 258 | "memberSince": "2010-04-13T18:25:11.000+0000", 259 | "uniqueId": "hhus-9fa081cdb83285fed2e4ac23141ab0e3", 260 | "name": "BBG", 261 | "isAdmin": false 262 | }, 263 | { 264 | "gender": "m", 265 | "motto": "JoseIgnacio¥ Viva |VENEZUELA|", 266 | "habboFigure": "hr-893-31.hd-185-1.ch-235-1408.lg-285-1408.sh-295-1408.ea-1404-1408.fa-1201", 267 | "memberSince": "2004-01-31T20:07:12.000+0000", 268 | "uniqueId": "hhus-4b7af981acb38c06f3f1732d4c76e95a", 269 | "name": "FuGiX", 270 | "isAdmin": false 271 | }, 272 | { 273 | "gender": "m", 274 | "motto": "‘ HWT - ES", 275 | "habboFigure": "hr-170-37.hd-180-1.ch-215-73.lg-285-1408.sh-290-1408", 276 | "memberSince": "2009-03-06T20:07:29.000+0000", 277 | "uniqueId": "hhus-cd5f8d4f25ffd3b5f651e31dbb4604f5", 278 | "name": "alexre16", 279 | "isAdmin": false 280 | }, 281 | { 282 | "gender": "m", 283 | "motto": "Where no one goes", 284 | "habboFigure": "hr-155-37.hd-180-8.ch-210-64.lg-3088-1408-64.sh-305-1408.cp-3286", 285 | "memberSince": "2010-06-19T17:33:09.000+0000", 286 | "uniqueId": "hhus-98a0a71bdb235fbf9f76a6c71674c4cf", 287 | "name": "jeppepulis98", 288 | "isAdmin": false 289 | }, 290 | { 291 | "gender": "f", 292 | "motto": "laude wool sweater. slim pants.", 293 | "habboFigure": "hr-836-45.hd-600-3.ch-3439-92-92.lg-3320-92-92.sh-3419-1409-1427.cc-3066-110", 294 | "memberSince": "2010-07-24T18:54:26.000+0000", 295 | "uniqueId": "hhus-b5291596f4570283611aba2a567d28d4", 296 | "name": "Deoxy.", 297 | "isAdmin": false 298 | }, 299 | { 300 | "gender": "m", 301 | "motto": "[CIA] Recruit", 302 | "habboFigure": "hr-679-33.hd-209-1.ch-235-78.lg-270-64.sh-3115-62-62.ha-1003-62.cc-260-62", 303 | "memberSince": "2010-07-25T23:02:28.000+0000", 304 | "uniqueId": "hhus-ed5a906b1dfd6d623eca1a20e5946b1d", 305 | "name": "cheyenne3393", 306 | "isAdmin": false 307 | }, 308 | { 309 | "gender": "m", 310 | "motto": "ola", 311 | "habboFigure": "hr-893-45.hd-209-1.ch-3030-71.lg-281-1408.sh-290-1408.he-3274-73", 312 | "memberSince": "2010-08-03T10:32:43.000+0000", 313 | "uniqueId": "hhus-a61703f517518903fcbc16b4161aef3c", 314 | "name": "brandontronx1", 315 | "isAdmin": false 316 | }, 317 | { 318 | "gender": "f", 319 | "motto": "[HA] student", 320 | "habboFigure": "hr-890-35.hd-629-11.ch-675-71.lg-720-79.sh-735-64.he-1606-76.ca-1812", 321 | "memberSince": "2010-09-19T15:53:07.000+0000", 322 | "uniqueId": "hhus-24297c22b0f9e67baef423b9a1f6c093", 323 | "name": "morgan8174", 324 | "isAdmin": false 325 | }, 326 | { 327 | "gender": "m", 328 | "motto": "yay", 329 | "habboFigure": "hr-3162-37.hd-180-3.ch-220-110.lg-3058-82.sh-300-110.wa-2001", 330 | "memberSince": "2010-10-06T07:15:49.000+0000", 331 | "uniqueId": "hhus-e0cfeb8946b99a30d452d3cea198aa54", 332 | "name": "markku112", 333 | "isAdmin": false 334 | }, 335 | { 336 | "gender": "m", 337 | "motto": "2010", 338 | "habboFigure": "hd-190-1.ch-255-1408.lg-280-64.sh-290-1408.ha-1003-64", 339 | "memberSince": "2010-11-25T22:55:47.000+0000", 340 | "uniqueId": "hhus-d302c7e1fa5183854e26ff6a820b1668", 341 | "name": "Shadow90505", 342 | "isAdmin": false 343 | }, 344 | { 345 | "gender": "m", 346 | "motto": "i like CAKE!!!", 347 | "habboFigure": "hr-165-45.hd-209-2.ch-255-70.lg-3116-62-83.sh-290-83.ha-1003-67", 348 | "memberSince": "2010-12-02T18:29:44.000+0000", 349 | "uniqueId": "hhus-22b091739706ad62e7b2b194a688fe89", 350 | "name": "henri699", 351 | "isAdmin": false 352 | }, 353 | { 354 | "gender": "f", 355 | "motto": "Georgia'×»Autism Apergers'Syndrome", 356 | "habboFigure": "hr-836-45.hd-605-2.ch-660-100.lg-3216-1320.sh-725-71.he-3181-73", 357 | "memberSince": "2010-12-26T19:55:07.000+0000", 358 | "uniqueId": "hhus-ce17a2c2625f27e370cea59f6877e939", 359 | "name": "WingsFly,", 360 | "isAdmin": false 361 | }, 362 | { 363 | "gender": "m", 364 | "motto": "Sorry I do not speak English", 365 | "habboFigure": "hr-155-45.hd-195-2.ch-235-62.lg-285-82.sh-295-64", 366 | "memberSince": "2011-03-17T09:37:43.000+0000", 367 | "uniqueId": "hhus-d50caeec4e1fbb4ef59bf10b47d31a92", 368 | "name": "lProfessional-", 369 | "isAdmin": false 370 | }, 371 | { 372 | "gender": "f", 373 | "motto": "freezing", 374 | "habboFigure": "hr-515-38.hd-629-3.ch-685-73.lg-716-67-62.wa-2011", 375 | "memberSince": "2011-03-22T21:20:25.000+0000", 376 | "uniqueId": "hhus-5822d9effb51efb819015d753596bf4d", 377 | "name": "Megaliisi", 378 | "isAdmin": false 379 | }, 380 | { 381 | "gender": "m", 382 | "motto": "• 100 a p†p 2012 wow.habbo", 383 | "habboFigure": "hr-125-45.hd-195-14.ch-255-85.lg-281-1408.wa-2004-1408", 384 | "memberSince": "2011-03-26T20:58:39.000+0000", 385 | "uniqueId": "hhus-68f3a41696d3dc3e535b0415b192a722", 386 | "name": "eminem4realzz!", 387 | "isAdmin": false 388 | }, 389 | { 390 | "gender": "m", 391 | "motto": "A stick!", 392 | "habboFigure": "hr-3163-1351.hd-3091-2.ch-3185-82.lg-3088-92-110.sh-3027-1336-1339.fa-1201", 393 | "memberSince": "2011-04-09T02:37:21.000+0000", 394 | "uniqueId": "hhus-a4e04b5ff9eec821a965cb607d9508df", 395 | "name": "Zday", 396 | "isAdmin": false 397 | }, 398 | { 399 | "gender": "m", 400 | "motto": "HABBO!", 401 | "habboFigure": "hr-676-38.hd-209-14.ch-876-81-1408.lg-270-82.sh-290-91.wa-2007", 402 | "memberSince": "2011-04-17T10:38:07.000+0000", 403 | "uniqueId": "hhus-e0ef8d3e64a33e27d6d3ef0e7323b297", 404 | "name": "Trumpa", 405 | "isAdmin": false 406 | }, 407 | { 408 | "gender": "m", 409 | "motto": "Mañana in habbo.es", 410 | "habboFigure": "hd-180-14.ch-230-1408.lg-3078-1408.fa-1206-82", 411 | "memberSince": "2011-04-19T20:57:14.000+0000", 412 | "uniqueId": "hhus-f6ed12d6149f3969f372aa85de36f2a3", 413 | "name": "funalvarode", 414 | "isAdmin": false 415 | }, 416 | { 417 | "gender": "m", 418 | "motto": "in a relashonship", 419 | "habboFigure": "hr-115-31.hd-180-8.ch-255-73.lg-3116-73-73.sh-3115-73-73", 420 | "memberSince": "2011-04-22T20:30:29.000+0000", 421 | "uniqueId": "hhus-c24611cf6b1a1027fbf130c7cc03ecfa", 422 | "name": "dx-cool-xb", 423 | "isAdmin": false 424 | }, 425 | { 426 | "gender": "m", 427 | "motto": "Touch too much.", 428 | "habboFigure": "hr-125-40.hd-180-14.ch-255-1408.lg-280-1408.fa-1205-1408", 429 | "memberSince": "2011-06-02T18:08:45.000+0000", 430 | "uniqueId": "hhus-a2c2fb5232d8d27a1fc3ae09273be40e", 431 | "name": "Fibonacci", 432 | "isAdmin": false 433 | }, 434 | { 435 | "gender": "m", 436 | "motto": "One life, one chance.", 437 | "habboFigure": "hr-3393-42-42.hd-180-1.ch-3438-82-1408.lg-3361-1408.sh-3383-1408-82.ha-1002-1408.ea-1404-1408.fa-3344-64.cc-3389-1408-1408", 438 | "memberSince": "2011-06-12T04:40:44.000+0000", 439 | "uniqueId": "hhus-f07366967edabf57cf7901be1f77a155", 440 | "name": "Otus", 441 | "isAdmin": true 442 | }, 443 | { 444 | "gender": "m", 445 | "motto": "Ride away on my motorcycle", 446 | "habboFigure": "hr-165-45.hd-205-9.ch-220-62.lg-270-64.sh-300-64.ea-1404-62.wa-2001.cc-260-1315", 447 | "memberSince": "2011-07-01T06:41:46.000+0000", 448 | "uniqueId": "hhus-d0da428e422eb9787bafa7d80b458932", 449 | "name": "RileyGermany", 450 | "isAdmin": false 451 | }, 452 | { 453 | "gender": "m", 454 | "motto": "Like we're in a crime scene", 455 | "habboFigure": "hr-115-39.hd-190-10.ch-245-77.lg-280-62", 456 | "memberSince": "2011-07-03T09:45:19.000+0000", 457 | "uniqueId": "hhus-f55ebf102105c7c0a881b14a46a70a59", 458 | "name": "Asafur", 459 | "isAdmin": false 460 | }, 461 | { 462 | "gender": "m", 463 | "motto": " Official Habbo Helpers:", 464 | "habboFigure": "hr-893-48.hd-209-1.ch-255-88.lg-3116-66-85.sh-290-73.ha-3117-66.fa-1201.ca-1813", 465 | "memberSince": "2011-07-05T08:20:19.000+0000", 466 | "uniqueId": "hhus-c408e607cd8eb032aa44321b51f20ac8", 467 | "name": "Mr.Macnetic", 468 | "isAdmin": false 469 | }, 470 | { 471 | "gender": "m", 472 | "motto": "YOU LOVED ME I AND FROZE IN TIME", 473 | "habboFigure": "hr-115-45.hd-180-1.ch-3030-62.lg-275-63.sh-290-64.ca-1804-73", 474 | "memberSince": "2011-07-19T17:13:50.000+0000", 475 | "uniqueId": "hhus-b2df9b57629c643b208f762b9b688214", 476 | "name": "Etiqueta", 477 | "isAdmin": false 478 | }, 479 | { 480 | "gender": "f", 481 | "motto": "hop! gallop!", 482 | "habboFigure": "hr-3221-31-1349.hd-600-4.ch-3233-1326.lg-3078-64.sh-735-62.ca-3219-104.wa-2001", 483 | "memberSince": "2011-07-20T11:30:00.000+0000", 484 | "uniqueId": "hhus-7419a8a0f5d016ed10f8d499dada0248", 485 | "name": "himab", 486 | "isAdmin": false 487 | }, 488 | { 489 | "gender": "m", 490 | "motto": "", 491 | "habboFigure": "hr-3281-45.hd-3091-2.ch-3342-92-92.lg-3136-1427.ha-1002-110.he-3070-92", 492 | "memberSince": "2011-07-24T20:48:56.000+0000", 493 | "uniqueId": "hhus-0683a1026c629fcc837380e3e7531e68", 494 | "name": "Wexon", 495 | "isAdmin": false 496 | }, 497 | { 498 | "gender": "f", 499 | "motto": "TRUST !", 500 | "habboFigure": "hr-515-31.hd-628-2.ch-660-62.lg-695-81.sh-905-62.he-1606-81.fa-1202-81.cp-3120-62", 501 | "memberSince": "2011-07-28T23:39:24.000+0000", 502 | "uniqueId": "hhus-0fb8512f51f92e3aa44ae7b9c414aeee", 503 | "name": "SammyJean", 504 | "isAdmin": false 505 | }, 506 | { 507 | "gender": "m", 508 | "motto": "São só dois lados da mesma viagem —", 509 | "habboFigure": "hr-155-34.hd-180-1370.ch-3030-72.lg-281-91.ha-3479.fa-3276-72", 510 | "memberSince": "2011-08-14T22:24:18.000+0000", 511 | "uniqueId": "hhus-c8b47604e97e606550d33670a604e8a0", 512 | "name": "lucas32145", 513 | "isAdmin": false 514 | }, 515 | { 516 | "gender": "m", 517 | "motto": "¥MI6¥ Senior Director ¥MCH¥", 518 | "habboFigure": "hr-3163-61.hd-180-2.ch-3077-100-110.lg-3057-110.sh-3016-64.ca-3085-93.wa-2009-64.cc-3009-110-110", 519 | "memberSince": "2011-08-20T11:56:28.000+0000", 520 | "uniqueId": "hhus-37c45aecd09fb1ef1b77cb6cc5f4a9cb", 521 | "name": "cfcdude", 522 | "isAdmin": false 523 | }, 524 | { 525 | "gender": "m", 526 | "motto": "the lannisters send their regards", 527 | "habboFigure": "hr-3090-38.hd-180-1.ch-3110-1408-73.lg-3290-64.ca-1815-1408", 528 | "memberSince": "2011-09-17T08:19:32.000+0000", 529 | "uniqueId": "hhus-bea67eb4e23c63cd9a6d83bddb4ee87a", 530 | "name": "Voxels", 531 | "isAdmin": false 532 | }, 533 | { 534 | "gender": "f", 535 | "motto": "k", 536 | "habboFigure": "hr-540-42.hd-625-8.ch-655-81.lg-3216-80.he-3274-82", 537 | "memberSince": "2011-10-08T13:03:46.000+0000", 538 | "uniqueId": "hhus-b0d8a1434849281783724f27b29811a0", 539 | "name": "candiecane", 540 | "isAdmin": false 541 | }, 542 | { 543 | "gender": "m", 544 | "motto": "Rustiatic ~ I'm dutch :)", 545 | "habboFigure": "hr-165-42.hd-180-17.ch-255-73.lg-280-66.sh-305-62", 546 | "memberSince": "2011-11-02T08:29:14.000+0000", 547 | "uniqueId": "hhus-01c427c680e3161f70d116b929c9c28a", 548 | "name": "ZFaysel", 549 | "isAdmin": false 550 | }, 551 | { 552 | "gender": "f", 553 | "motto": " Part Of Me ™", 554 | "habboFigure": "hd-600-2.ch-630-62.lg-695-62", 555 | "memberSince": "2011-11-04T23:27:48.000+0000", 556 | "uniqueId": "hhus-314815863208582992bca3b547c275c2", 557 | "name": "-:KATY.PERRY.", 558 | "isAdmin": false 559 | }, 560 | { 561 | "gender": "f", 562 | "motto": "Beautiful People Ugly names Barsinal |", 563 | "habboFigure": "hr-834-61.hd-625-10.ch-3233-110.lg-695-103.sh-3035-110.he-3082-110.wa-3212-62-62.cc-887-100", 564 | "memberSince": "2011-11-12T20:22:05.000+0000", 565 | "uniqueId": "hhus-f74bdfc8e6ae3c430573e0bd0631e597", 566 | "name": "Poiky", 567 | "isAdmin": false 568 | }, 569 | { 570 | "gender": "m", 571 | "motto": "", 572 | "habboFigure": "hr-110-42.hd-180-5.ch-215-62.lg-285-64.sh-300-64.cc-260-62.cp-3125-62", 573 | "memberSince": "2011-11-15T04:05:38.000+0000", 574 | "uniqueId": "hhus-55d87cf6b6de3d2da3762fa3cd9628ae", 575 | "name": "ifulookurstupid", 576 | "isAdmin": false 577 | }, 578 | { 579 | "gender": "f", 580 | "motto": "Dressed to l Agent", 1022 | "habboFigure": "hr-890-48.hd-600-11.ch-884-72.lg-716-62-62.wa-3210-73-73.cp-3128-62", 1023 | "memberSince": "2012-08-13T13:08:59.000+0000", 1024 | "uniqueId": "hhus-a5fe90ffc52011d7a1a21602a7c30f0a", 1025 | "name": "Supervalintine", 1026 | "isAdmin": false 1027 | }, 1028 | { 1029 | "gender": "f", 1030 | "motto": "Yo. Nutella ftw", 1031 | "habboFigure": "hr-515-32.hd-600-1.ch-630-76.lg-695-76.ha-1021-76.fa-1210", 1032 | "memberSince": "2012-08-15T07:12:49.000+0000", 1033 | "uniqueId": "hhus-d9bd4b0fe92f2b27192d855a0897aeea", 1034 | "name": "Sarathine", 1035 | "isAdmin": false 1036 | }, 1037 | { 1038 | "gender": "m", 1039 | "motto": "ITALY *-*", 1040 | "habboFigure": "hr-3163-61.hd-209-4.lg-3078-93.sh-3035-64.ha-3129-93.he-3218-103.ea-3168-103.wa-3072-103-103.cc-3039-93.cp-3204", 1041 | "memberSince": "2012-08-16T19:58:28.000+0000", 1042 | "uniqueId": "hhus-cf854d13378b926e8e9f3db817278229", 1043 | "name": "d.-christian-.b", 1044 | "isAdmin": false 1045 | }, 1046 | { 1047 | "gender": "f", 1048 | "motto": "", 1049 | "habboFigure": "hr-890-34.hd-629-10.ch-881-1408-1408.lg-710-1408.sh-906-1408.ha-1002-1408.ca-1805-1408", 1050 | "memberSince": "2012-08-17T17:06:40.000+0000", 1051 | "uniqueId": "hhus-12772fde8c84889854dcf891bb3b3a12", 1052 | "name": "Meshella", 1053 | "isAdmin": false 1054 | }, 1055 | { 1056 | "gender": "f", 1057 | "motto": "", 1058 | "habboFigure": "hr-545-31.hd-629-14.ch-685-72.lg-700-1408.sh-730-1408", 1059 | "memberSince": "2012-08-18T07:46:55.000+0000", 1060 | "uniqueId": "hhus-db73db5e575298f7c0c819a8caa47fea", 1061 | "name": "Edrah", 1062 | "isAdmin": false 1063 | }, 1064 | { 1065 | "gender": "f", 1066 | "motto": "", 1067 | "habboFigure": "hr-540-34.hd-629-8.ch-655-1408.lg-3023-64.sh-730-1408.he-3274-64", 1068 | "memberSince": "2012-08-18T07:49:06.000+0000", 1069 | "uniqueId": "hhus-ecc3c80e12300685f53771c448379111", 1070 | "name": "Heija", 1071 | "isAdmin": false 1072 | }, 1073 | { 1074 | "gender": "f", 1075 | "motto": "", 1076 | "habboFigure": "hr-892-35.hd-600-8.ch-635-62.lg-700-64.sh-906-84", 1077 | "memberSince": "2012-08-18T10:43:55.000+0000", 1078 | "uniqueId": "hhus-2656af7878569d2fe915f8379c1a29ec", 1079 | "name": "d=moi=b", 1080 | "isAdmin": false 1081 | }, 1082 | { 1083 | "gender": "m", 1084 | "motto": "", 1085 | "habboFigure": "hr-115-31.hd-180-1.ch-255-85.lg-285-91.sh-300-63.ha-1003-70.ca-1815-62.wa-2001", 1086 | "memberSince": "2012-08-21T11:33:36.000+0000", 1087 | "uniqueId": "hhus-645bf4aaa006e9f6c00465fea8c6a7c0", 1088 | "name": "DIGUINHOLOVE", 1089 | "isAdmin": false 1090 | }, 1091 | { 1092 | "gender": "m", 1093 | "motto": "", 1094 | "habboFigure": "hr-893-48.hd-180-9.ch-220-69.lg-270-69.sh-300-64.ea-1406", 1095 | "memberSince": "2012-08-28T20:14:28.000+0000", 1096 | "uniqueId": "hhus-2e112626509fb675392fd6d8200ba483", 1097 | "name": "Callumjlloyd", 1098 | "isAdmin": false 1099 | }, 1100 | { 1101 | "gender": "m", 1102 | "motto": "", 1103 | "habboFigure": "hr-165-44.hd-180-1.ch-255-69.lg-280-64.sh-305-62.wa-2008", 1104 | "memberSince": "2012-08-30T10:03:22.000+0000", 1105 | "uniqueId": "hhus-6a3008eb5fbe859e8726b0d3a0ab3001", 1106 | "name": "chiefremyma", 1107 | "isAdmin": false 1108 | }, 1109 | { 1110 | "gender": "f", 1111 | "motto": "", 1112 | "habboFigure": "hr-891-39.hd-600-7.ch-665-79.lg-700-64.sh-907-64.ca-1819.wa-2012", 1113 | "memberSince": "2012-08-30T10:31:08.000+0000", 1114 | "uniqueId": "hhus-c6ade3302ce9f9dd8e3e2c8a14985016", 1115 | "name": "Robyndoll", 1116 | "isAdmin": false 1117 | }, 1118 | { 1119 | "gender": "f", 1120 | "motto": "|", 1121 | "habboFigure": "hr-837-44.hd-605-1.ch-655-76.lg-3216-64.he-3274-74", 1122 | "memberSince": "2012-09-03T07:15:10.000+0000", 1123 | "uniqueId": "hhus-f3cb8a00aab2df1b906cec4e55930ba5", 1124 | "name": "x.Ali-Smith.x", 1125 | "isAdmin": false 1126 | }, 1127 | { 1128 | "gender": "m", 1129 | "motto": "", 1130 | "habboFigure": "hr-679-45.hd-180-1.ch-878-64-64.lg-270-64.sh-290-64.ha-1003-64.wa-2006", 1131 | "memberSince": "2012-09-06T03:39:29.000+0000", 1132 | "uniqueId": "hhus-6a05b6bed6bac3d28871feb69738bfee", 1133 | "name": "LadyFelipeChick", 1134 | "isAdmin": false 1135 | }, 1136 | { 1137 | "gender": "m", 1138 | "motto": "", 1139 | "habboFigure": "hr-893-42.hd-209-2.ch-3030-77.lg-275-63.ha-1002-63.he-1601", 1140 | "memberSince": "2012-09-09T00:34:08.000+0000", 1141 | "uniqueId": "hhus-7944c3d2585f34b54c84d27c8b803e25", 1142 | "name": "MaxAttacks", 1143 | "isAdmin": false 1144 | }, 1145 | { 1146 | "gender": "m", 1147 | "motto": "I'm spanish", 1148 | "habboFigure": "hr-155-32.hd-205-10.ch-3030-63.lg-281-62.sh-305-63.ea-1401-62.fa-1201", 1149 | "memberSince": "2012-09-10T11:30:53.000+0000", 1150 | "uniqueId": "hhus-7d75a31d544f07cdbc3d819871d6dc68", 1151 | "name": "Preint", 1152 | "isAdmin": false 1153 | }, 1154 | { 1155 | "gender": "m", 1156 | "motto": "i suk t)tties", 1157 | "habboFigure": "hd-180-7.ch-220-82.lg-270-79.sh-290-62.ha-1023-82.wa-2007", 1158 | "memberSince": "2012-09-12T23:31:48.000+0000", 1159 | "uniqueId": "hhus-76701592ce76e45eed5839e78b2c012d", 1160 | "name": "RainbowKiwi", 1161 | "isAdmin": false 1162 | }, 1163 | { 1164 | "gender": "m", 1165 | "motto": "French Inhale. . .", 1166 | "habboFigure": "hr-676-36.hd-180-1.ch-210-62.lg-270-62", 1167 | "memberSince": "2012-09-16T15:21:30.000+0000", 1168 | "uniqueId": "hhus-f9e072c9dc0dae00cab0856da2b58ed8", 1169 | "name": "Wiz,Khalifa,", 1170 | "isAdmin": false 1171 | }, 1172 | { 1173 | "gender": "f", 1174 | "motto": "(\\ KOALA 4LY3 (/", 1175 | "habboFigure": "hr-3012-45.hd-605-8.ch-824-1339.lg-3216-99.ha-3129-93.he-1601.ca-1807.wa-3073-105.cc-3008-97-97", 1176 | "memberSince": "2012-09-19T05:03:56.000+0000", 1177 | "uniqueId": "hhus-67febec416bbb8c72e74370a0950c18d", 1178 | "name": "Xanxiviera.", 1179 | "isAdmin": false 1180 | }, 1181 | { 1182 | "gender": "m", 1183 | "motto": "", 1184 | "habboFigure": "hr-155-45.hd-209-7.ch-255-77.lg-275-62", 1185 | "memberSince": "2012-09-23T08:18:52.000+0000", 1186 | "uniqueId": "hhus-1549118feed04a43fa438e21c57c81fe", 1187 | "name": "saschathet92", 1188 | "isAdmin": false 1189 | }, 1190 | { 1191 | "gender": "m", 1192 | "motto": "Joecelyn ƒ", 1193 | "habboFigure": "hr-889-31.hd-190-13.ch-3030-62.lg-275-89.ha-1020.ca-1813", 1194 | "memberSince": "2012-09-24T14:18:49.000+0000", 1195 | "uniqueId": "hhus-36ab08e7e5b4377cbbd622d12abf1f7f", 1196 | "name": "Infobuss", 1197 | "isAdmin": false 1198 | }, 1199 | { 1200 | "gender": "f", 1201 | "motto": " Pixie™", 1202 | "habboFigure": "hd-600-10.ch-660-62.lg-695-62.sh-725-62", 1203 | "memberSince": "2012-09-25T16:00:40.000+0000", 1204 | "uniqueId": "hhus-db463461977fab2348ddb865b0c3482c", 1205 | "name": "Snoozle", 1206 | "isAdmin": false 1207 | }, 1208 | { 1209 | "gender": "m", 1210 | "motto": " Jr ; Poker/6o Only. One Call Me Win.", 1211 | "habboFigure": "hr-3163-59.hd-190-10.ch-3032-1328-62.lg-3202-110-62.sh-290-1327.he-3155-1327.ea-1401-110.ca-1815-92", 1212 | "memberSince": "2012-10-05T14:47:01.000+0000", 1213 | "uniqueId": "hhus-397f83c04dae36fcfd85f4a6fec73e89", 1214 | "name": "Randomaion", 1215 | "isAdmin": false 1216 | }, 1217 | { 1218 | "gender": "m", 1219 | "motto": "", 1220 | "habboFigure": "hr-145-45.hd-180-1.ch-878-64-62.lg-285-63.sh-906-64.fa-1201.cp-3128-62", 1221 | "memberSince": "2012-10-05T17:59:55.000+0000", 1222 | "uniqueId": "hhus-9d2a989edc7c0f8f57eea1e990b731fe", 1223 | "name": "leonb03", 1224 | "isAdmin": false 1225 | }, 1226 | { 1227 | "gender": "m", 1228 | "motto": " Recruit", 1229 | "habboFigure": "hr-165-48.hd-180-1370.ch-267-73.lg-3023-73.sh-290-64.he-1608.ca-1812.wa-2002", 1230 | "memberSince": "2012-10-06T02:37:20.000+0000", 1231 | "uniqueId": "hhus-24db5b419ca6bdcb01542b55e8818a41", 1232 | "name": "bX-cute-Xd", 1233 | "isAdmin": false 1234 | }, 1235 | { 1236 | "gender": "f", 1237 | "motto": "", 1238 | "habboFigure": "hr-890-45.hd-600-1.ch-685-71.lg-700-62.ha-1015.he-1602-71", 1239 | "memberSince": "2012-10-12T20:29:03.000+0000", 1240 | "uniqueId": "hhus-62d625a01f4ff4bff0d40f7485c7fcb3", 1241 | "name": "leighana1999", 1242 | "isAdmin": false 1243 | }, 1244 | { 1245 | "gender": "m", 1246 | "motto": " Hello :-)", 1247 | "habboFigure": "hr-165-42.hd-180-2.ch-267-81.lg-275-82.sh-295-62.fa-1208-63.wa-2001", 1248 | "memberSince": "2012-10-14T16:03:15.000+0000", 1249 | "uniqueId": "hhus-b657842b68fcf03e928a595c6919059f", 1250 | "name": ",Blues", 1251 | "isAdmin": false 1252 | }, 1253 | { 1254 | "gender": "m", 1255 | "motto": "Pretending to be AFK", 1256 | "habboFigure": "hr-170-45.hd-180-1.ch-240-62.lg-270-62.sh-300-62", 1257 | "memberSince": "2012-10-21T19:13:03.000+0000", 1258 | "uniqueId": "hhus-93406e0398b9be5b8669ffcea1b5bce7", 1259 | "name": "Dreadknot", 1260 | "isAdmin": false 1261 | }, 1262 | { 1263 | "gender": "f", 1264 | "motto": "", 1265 | "habboFigure": "hr-515-44.hd-600-2.ch-660-74.lg-700-62.he-1610", 1266 | "memberSince": "2012-10-22T16:49:08.000+0000", 1267 | "uniqueId": "hhus-b13ad9de30afc396d627a09a1e35671c", 1268 | "name": "Novafruitpunch", 1269 | "isAdmin": false 1270 | }, 1271 | { 1272 | "gender": "m", 1273 | "motto": "chirp food", 1274 | "habboFigure": "hd-180-10.ch-255-71.lg-275-71.sh-908-71.he-1606-71.fa-1211.ca-1806-71", 1275 | "memberSince": "2012-11-04T18:45:53.000+0000", 1276 | "uniqueId": "hhus-98e0ba6bcb93d7a9d28c2d93f6d9e231", 1277 | "name": "Maughty?", 1278 | "isAdmin": false 1279 | }, 1280 | { 1281 | "gender": "f", 1282 | "motto": "", 1283 | "habboFigure": "hr-575-44.hd-629-7.ch-685-64.lg-715-64.sh-907-73.ca-1810.wa-2008", 1284 | "memberSince": "2012-11-08T19:02:21.000+0000", 1285 | "uniqueId": "hhus-d24af27d0c1eac825de814f7058a6595", 1286 | "name": "amrgirl2011", 1287 | "isAdmin": false 1288 | }, 1289 | { 1290 | "gender": "m", 1291 | "motto": "pedrojutuj", 1292 | "habboFigure": "hr-893-39.hd-209-9.ch-225-63.lg-285-64.sh-300-63.he-1601.ea-1406.wa-2001", 1293 | "memberSince": "2012-11-10T10:44:09.000+0000", 1294 | "uniqueId": "hhus-b896ae4f152528555fee10d239742b52", 1295 | "name": "jose36225", 1296 | "isAdmin": false 1297 | }, 1298 | { 1299 | "gender": "m", 1300 | "motto": " Offi. Agent II ", 1301 | "habboFigure": "hr-893-42.hd-180-10.ch-3030-62.lg-270-64.sh-300-64.ea-1404-64", 1302 | "memberSince": "2012-11-16T13:13:06.000+0000", 1303 | "uniqueId": "hhus-91de71b70cae7c01032dce46afe58d29", 1304 | "name": "Randy07Master", 1305 | "isAdmin": false 1306 | }, 1307 | { 1308 | "gender": "f", 1309 | "motto": "pinoy ako! :))", 1310 | "habboFigure": "hr-545-45.hd-629-10.ch-665-71.lg-700-71.sh-730-71.ca-1805-76.wa-2009-76", 1311 | "memberSince": "2012-11-29T07:51:56.000+0000", 1312 | "uniqueId": "hhus-87499a37d5384f4f478088b9963f9e69", 1313 | "name": "09bossPiNAY", 1314 | "isAdmin": false 1315 | }, 1316 | { 1317 | "gender": "f", 1318 | "motto": "blur Agentnonthingdrink\\", 1319 | "habboFigure": "hr-890-44.hd-629-1.ch-665-82.lg-696-70.sh-3115-72-62.he-1602-78.ca-1815-62.wa-2011", 1320 | "memberSince": "2012-11-30T08:43:08.000+0000", 1321 | "uniqueId": "hhus-78e91a803a9bdbb2f24a01797955cb3b", 1322 | "name": "BrownSHINYOUNG", 1323 | "isAdmin": false 1324 | }, 1325 | { 1326 | "gender": "m", 1327 | "motto": "Inappropriate to bobba bobba", 1328 | "habboFigure": "hr-155-45.hd-209-1.ch-210-66.lg-270-82.ea-1404-64.fa-1205-91", 1329 | "memberSince": "2012-12-02T14:30:00.000+0000", 1330 | "uniqueId": "hhus-034681dab0ba2fafde4c3c848027482b", 1331 | "name": "eyeylolololol", 1332 | "isAdmin": false 1333 | }, 1334 | { 1335 | "gender": "m", 1336 | "motto": " Agent", 1337 | "habboFigure": "hd-180-10.ch-210-62.lg-270-62", 1338 | "memberSince": "2012-12-11T05:59:45.000+0000", 1339 | "uniqueId": "hhus-f668692c684e5eabec44a2254e8576fd", 1340 | "name": "RemiGiallard", 1341 | "isAdmin": false 1342 | }, 1343 | { 1344 | "gender": "m", 1345 | "motto": "", 1346 | "habboFigure": "hr-125-42.hd-200-8.ch-255-73.lg-270-73.sh-305-73.ha-1006.ea-1404-63", 1347 | "memberSince": "2012-12-18T04:14:42.000+0000", 1348 | "uniqueId": "hhus-110e04d40c8e1e658defc24a2e5114d0", 1349 | "name": "Terranceswag47", 1350 | "isAdmin": false 1351 | }, 1352 | { 1353 | "gender": "m", 1354 | "motto": "", 1355 | "habboFigure": "hr-893-45.hd-185-8.ch-220-62.lg-285-64.sh-300-64.he-1610.ca-1804-64.wa-2001", 1356 | "memberSince": "2013-01-01T00:19:30.000+0000", 1357 | "uniqueId": "hhus-2f2d8234e961af393721e769e7cd92e7", 1358 | "name": "Imma-Boss!", 1359 | "isAdmin": false 1360 | }, 1361 | { 1362 | "gender": "m", 1363 | "motto": "", 1364 | "habboFigure": "hr-170-42.hd-180-23.ch-210-64.lg-280-76.he-1601.fa-1204", 1365 | "memberSince": "2013-02-14T09:42:36.000+0000", 1366 | "uniqueId": "hhus-ae90a3737bdadb6d2f4c7f9c857773e5", 1367 | "name": "williamkty", 1368 | "isAdmin": false 1369 | }, 1370 | { 1371 | "gender": "m", 1372 | "motto": " Field Agent ll ", 1373 | "habboFigure": "hr-155-39.hd-195-1.ch-210-62.lg-280-64.ea-1403-62.cc-260-62", 1374 | "memberSince": "2013-04-01T19:53:27.000+0000", 1375 | "uniqueId": "hhus-9fdf8e8590c50d061d5de01c94694376", 1376 | "name": "JockTraper", 1377 | "isAdmin": false 1378 | }, 1379 | { 1380 | "gender": "m", 1381 | "motto": "", 1382 | "habboFigure": "hr-155-31.hd-180-10.ch-210-1408.lg-270-1408.sh-295-1408.ca-1807", 1383 | "memberSince": "2013-05-29T01:09:24.000+0000", 1384 | "uniqueId": "hhus-b71547b6e17923b79e6156105ea7c345", 1385 | "name": "Teletransporte", 1386 | "isAdmin": false 1387 | }, 1388 | { 1389 | "gender": "m", 1390 | "motto": "", 1391 | "habboFigure": "hr-3090-42.hd-190-1.ch-3111-91-90.lg-3023-64.sh-3068-91-1320.ha-1013-91.fa-1201.ca-1807.wa-3074-64-90.cc-3294-90-64", 1392 | "memberSince": "2013-08-28T11:46:47.000+0000", 1393 | "uniqueId": "hhus-987b50b5c9c99891d4bf8c96ca181f94", 1394 | "name": "mick1900Safety", 1395 | "isAdmin": false 1396 | }, 1397 | { 1398 | "gender": "f", 1399 | "motto": "bye lols ƒ", 1400 | "habboFigure": "hr-515-31.hd-600-14.ch-665-1408.lg-695-1408.sh-906-1408", 1401 | "memberSince": "2013-09-08T01:26:40.000+0000", 1402 | "uniqueId": "hhus-ef12b5fd6cd076db4868eb2d86537420", 1403 | "name": "AngelWhittaker", 1404 | "isAdmin": false 1405 | }, 1406 | { 1407 | "gender": "m", 1408 | "motto": "just you.", 1409 | "habboFigure": "hd-180-1.ch-210-1408.lg-280-1408.sh-305-1408.ha-3463-1408", 1410 | "memberSince": "2014-12-27T18:02:17.000+0000", 1411 | "uniqueId": "hhus-a272cde461842b72951e4c06906d617d", 1412 | "name": "samthehable", 1413 | "isAdmin": false 1414 | }, 1415 | { 1416 | "gender": "m", 1417 | "motto": "", 1418 | "habboFigure": "hr-170-42.hd-180-1.ch-210-64.lg-285-82.sh-295-1408.he-3376-64-1408.cc-3326-1408-1408", 1419 | "memberSince": "2015-04-06T22:11:11.000+0000", 1420 | "uniqueId": "hhus-f4456c49ec71def2347e1e525d6bd363", 1421 | "name": "GiraffeGorilla", 1422 | "isAdmin": false 1423 | }, 1424 | { 1425 | "gender": "m", 1426 | "motto": "", 1427 | "habboFigure": "hr-125-1407.hd-3092-8.lg-285-110.sh-300-110.ha-3457.ea-1403-110.fa-1201.wa-2001.cc-260-110", 1428 | "memberSince": "2015-05-08T23:57:45.000+0000", 1429 | "uniqueId": "hhus-5ce8a6eabd624136cc19bc770fb95f20", 1430 | "name": "Arik-Masterson", 1431 | "isAdmin": false 1432 | }, 1433 | { 1434 | "gender": "f", 1435 | "motto": "I'm not a real person.", 1436 | "habboFigure": "hr-890-40.hd-600-14.ch-884-1408.lg-3216-1408.sh-730-1408.ca-1802", 1437 | "memberSince": "2015-05-12T02:55:21.000+0000", 1438 | "uniqueId": "hhus-9a16c3635bd5e28ebde6a359bb0363b7", 1439 | "name": "jackjthehy95", 1440 | "isAdmin": false 1441 | }, 1442 | { 1443 | "gender": "f", 1444 | "motto": "when nothing goes right... go left", 1445 | "habboFigure": "hr-890-45.hd-600-8.ch-665-73.lg-3088-66-82.sh-907-64.he-3274-73.cc-3390-64-1408", 1446 | "memberSince": "2015-05-16T16:54:51.000+0000", 1447 | "uniqueId": "hhus-5f9493f39f02bf51ce6c8cea1d3d0524", 1448 | "name": "FuryasNight", 1449 | "isAdmin": false 1450 | }, 1451 | { 1452 | "gender": "f", 1453 | "motto": "1/4 Of Little Mix", 1454 | "habboFigure": "hr-9534-32.hd-600-2.ch-3036-76-76.lg-3058-91.sh-907-1408.ea-3107-110-1408.ca-3292-83.cc-9563-68", 1455 | "memberSince": "2015-07-26T20:26:39.000+0000", 1456 | "uniqueId": "hhus-9b161a5c73fbf9586f981b9bf29d0f20", 1457 | "name": "J.Thirlwall", 1458 | "isAdmin": true 1459 | }, 1460 | { 1461 | "gender": "f", 1462 | "motto": "", 1463 | "habboFigure": "hr-3339-31.hd-600-2.ch-665-92.lg-3283-92-1408.sh-3354-92-92.cc-3249-92-92", 1464 | "memberSince": "2015-07-26T20:39:51.000+0000", 1465 | "uniqueId": "hhus-88b7391d0c5b64a78ab4e79e19e8b765", 1466 | "name": "P.Edwards", 1467 | "isAdmin": true 1468 | }, 1469 | { 1470 | "gender": "f", 1471 | "motto": "1/4 of Little Mix", 1472 | "habboFigure": "hr-3037-45-45.hd-600-2.ch-883-100-92.lg-3202-1412-1408.sh-3354-64-68.ca-3177-92-92", 1473 | "memberSince": "2015-07-26T20:52:26.000+0000", 1474 | "uniqueId": "hhus-d1a47fff3a8fbbb258833535733515fc", 1475 | "name": "J.Nelson", 1476 | "isAdmin": true 1477 | } 1478 | ] -------------------------------------------------------------------------------- /tests/data/com_koeientemmer_getachievements.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "achievement": { 4 | "id": 3, 5 | "name": "EmailVerification", 6 | "category": "identity" 7 | }, 8 | "level": 1, 9 | "score": 0 10 | }, 11 | { 12 | "achievement": { 13 | "id": 4, 14 | "name": "Login", 15 | "category": "identity" 16 | }, 17 | "level": 1, 18 | "score": 2 19 | }, 20 | { 21 | "achievement": { 22 | "id": 6, 23 | "name": "AvatarLooks", 24 | "category": "identity" 25 | }, 26 | "level": 1, 27 | "score": 1 28 | }, 29 | { 30 | "achievement": { 31 | "id": 8, 32 | "name": "RoomEntry", 33 | "category": "explore" 34 | }, 35 | "level": 6, 36 | "score": 343 37 | }, 38 | { 39 | "achievement": { 40 | "id": 10, 41 | "name": "HappyHour", 42 | "category": "social" 43 | }, 44 | "level": 1, 45 | "score": 1 46 | }, 47 | { 48 | "achievement": { 49 | "id": 11, 50 | "name": "RegistrationDuration", 51 | "category": "identity" 52 | }, 53 | "level": 20, 54 | "score": 3895 55 | }, 56 | { 57 | "achievement": { 58 | "id": 14, 59 | "name": "DailyHotelPresence", 60 | "category": "identity" 61 | }, 62 | "level": 0, 63 | "score": 6 64 | }, 65 | { 66 | "achievement": { 67 | "id": 17, 68 | "name": "RespectEarned", 69 | "category": "social" 70 | }, 71 | "level": 5, 72 | "score": 271 73 | }, 74 | { 75 | "achievement": { 76 | "id": 18, 77 | "name": "RespectGiven", 78 | "category": "social" 79 | }, 80 | "level": 8, 81 | "score": 247 82 | }, 83 | { 84 | "achievement": { 85 | "id": 19, 86 | "name": "AllTimeHotelPresence", 87 | "category": "identity" 88 | }, 89 | "level": 10, 90 | "score": 7127 91 | }, 92 | { 93 | "achievement": { 94 | "id": 23, 95 | "name": "PetLover", 96 | "category": "pets" 97 | }, 98 | "level": 1, 99 | "score": 1 100 | }, 101 | { 102 | "achievement": { 103 | "id": 24, 104 | "name": "PetLevelUp", 105 | "category": "pets" 106 | }, 107 | "level": 3, 108 | "score": 14 109 | }, 110 | { 111 | "achievement": { 112 | "id": 25, 113 | "name": "PetFeeding", 114 | "category": "pets" 115 | }, 116 | "level": 2, 117 | "score": 1084 118 | }, 119 | { 120 | "achievement": { 121 | "id": 26, 122 | "name": "PetRespectGiver", 123 | "category": "pets" 124 | }, 125 | "level": 9, 126 | "score": 316 127 | }, 128 | { 129 | "achievement": { 130 | "id": 27, 131 | "name": "PetRespectReceiver", 132 | "category": "pets" 133 | }, 134 | "level": 8, 135 | "score": 342 136 | }, 137 | { 138 | "achievement": { 139 | "id": 29, 140 | "name": "GiftGiver", 141 | "category": "social" 142 | }, 143 | "level": 1, 144 | "score": 1 145 | }, 146 | { 147 | "achievement": { 148 | "id": 30, 149 | "name": "GiftReceiver", 150 | "category": "social" 151 | }, 152 | "level": 2, 153 | "score": 6 154 | }, 155 | { 156 | "achievement": { 157 | "id": 33, 158 | "name": "BattleBallTilesLocked", 159 | "category": "games" 160 | }, 161 | "level": 2, 162 | "score": 68 163 | }, 164 | { 165 | "achievement": { 166 | "id": 35, 167 | "name": "GamePlayerExperience", 168 | "category": "games" 169 | }, 170 | "level": 3, 171 | "score": 495 172 | }, 173 | { 174 | "achievement": { 175 | "id": 36, 176 | "name": "EsA", 177 | "category": "games" 178 | }, 179 | "level": 2, 180 | "score": 8 181 | }, 182 | { 183 | "achievement": { 184 | "id": 39, 185 | "name": "TagC", 186 | "category": "explore" 187 | }, 188 | "level": 3, 189 | "score": 23 190 | }, 191 | { 192 | "achievement": { 193 | "id": 47, 194 | "name": "RbTagC", 195 | "category": "explore" 196 | }, 197 | "level": 2, 198 | "score": 12 199 | }, 200 | { 201 | "achievement": { 202 | "id": 50, 203 | "name": "RoomDecoFurniCount", 204 | "category": "room_builder" 205 | }, 206 | "level": 11, 207 | "score": 18 208 | }, 209 | { 210 | "achievement": { 211 | "id": 51, 212 | "name": "RoomDecoFurniTypeCount", 213 | "category": "room_builder" 214 | }, 215 | "level": 9, 216 | "score": 13 217 | }, 218 | { 219 | "achievement": { 220 | "id": 52, 221 | "name": "RoomDecoHosting", 222 | "category": "room_builder" 223 | }, 224 | "level": 10, 225 | "score": 6621 226 | }, 227 | { 228 | "achievement": { 229 | "id": 53, 230 | "name": "RoomDecoFloor", 231 | "category": "room_builder" 232 | }, 233 | "level": 1, 234 | "score": 3 235 | }, 236 | { 237 | "achievement": { 238 | "id": 54, 239 | "name": "RoomDecoLandscape", 240 | "category": "room_builder" 241 | }, 242 | "level": 0, 243 | "score": 1 244 | }, 245 | { 246 | "achievement": { 247 | "id": 55, 248 | "name": "RoomDecoWallpaper", 249 | "category": "room_builder" 250 | }, 251 | "level": 1, 252 | "score": 3 253 | }, 254 | { 255 | "achievement": { 256 | "id": 58, 257 | "name": "NotesReceived", 258 | "category": "social" 259 | }, 260 | "level": 1, 261 | "score": 4 262 | }, 263 | { 264 | "achievement": { 265 | "id": 67, 266 | "name": "BattleBallWinner", 267 | "category": "games" 268 | }, 269 | "level": 2, 270 | "score": 182 271 | }, 272 | { 273 | "achievement": { 274 | "id": 68, 275 | "name": "BattleBallPlayer", 276 | "category": "games" 277 | }, 278 | "level": 5, 279 | "score": 1021 280 | }, 281 | { 282 | "achievement": { 283 | "id": 80, 284 | "name": "HorseJumping", 285 | "category": "pets" 286 | }, 287 | "level": 0, 288 | "score": 44 289 | }, 290 | { 291 | "achievement": { 292 | "id": 81, 293 | "name": "HorseConsecutiveJumpsCount", 294 | "category": "pets" 295 | }, 296 | "level": 3, 297 | "score": 0 298 | }, 299 | { 300 | "achievement": { 301 | "id": 101, 302 | "name": "MonsterPlantTreater", 303 | "category": "explore" 304 | }, 305 | "level": 2, 306 | "score": 33 307 | }, 308 | { 309 | "achievement": { 310 | "id": 125, 311 | "name": "SafetyQuizGraduate", 312 | "category": "identity" 313 | }, 314 | "level": 1, 315 | "score": 1 316 | }, 317 | { 318 | "achievement": { 319 | "id": 129, 320 | "name": "RoomCompetitionVoter", 321 | "category": "explore" 322 | }, 323 | "level": 1, 324 | "score": 3 325 | }, 326 | { 327 | "achievement": { 328 | "id": 142, 329 | "name": "FriendListSize", 330 | "category": "social" 331 | }, 332 | "level": 5, 333 | "score": 145 334 | }, 335 | { 336 | "achievement": { 337 | "id": 143, 338 | "name": "Citizenship", 339 | "category": "identity" 340 | }, 341 | "level": 1, 342 | "score": 1 343 | }, 344 | { 345 | "achievement": { 346 | "id": 195, 347 | "name": "BuildersClub", 348 | "category": "identity" 349 | }, 350 | "level": 1, 351 | "score": 10 352 | }, 353 | { 354 | "achievement": { 355 | "id": 196, 356 | "name": "RoomDecoBC", 357 | "category": "room_builder" 358 | }, 359 | "level": 5, 360 | "score": 40 361 | }, 362 | { 363 | "achievement": { 364 | "id": 204, 365 | "name": "ViciousViking", 366 | "category": "explore" 367 | }, 368 | "level": 1, 369 | "score": 1 370 | }, 371 | { 372 | "achievement": { 373 | "id": 206, 374 | "name": "SelfModDoorModeSeen", 375 | "category": "tools" 376 | }, 377 | "level": 1, 378 | "score": 1 379 | }, 380 | { 381 | "achievement": { 382 | "id": 208, 383 | "name": "SelfModChatScrollSpeedSeen", 384 | "category": "tools" 385 | }, 386 | "level": 1, 387 | "score": 1 388 | }, 389 | { 390 | "achievement": { 391 | "id": 211, 392 | "name": "SelfModIgnoreSeen", 393 | "category": "tools" 394 | }, 395 | "level": 1, 396 | "score": 1 397 | } 398 | ] -------------------------------------------------------------------------------- /tests/data/com_koeientemmer_gethabbo.json: -------------------------------------------------------------------------------- 1 | { 2 | "uniqueId": "hhus-9cd61b156972c2eb33a145d69918f965", 3 | "name": "koeientemmer", 4 | "figureString": "hd-195-1.ch-215-75.lg-3290-91.sh-905-1408.ha-1015.wa-2001", 5 | "motto": "Oldskooler than Dionysus!", 6 | "memberSince": "2001-10-06T12:21:53.000+0000", 7 | "profileVisible": true, 8 | "selectedBadges": [ 9 | { 10 | "badgeIndex": 1, 11 | "code": "YODUK", 12 | "name": "Master Yoduck", 13 | "description": "Use the nondescript motion imparting field!" 14 | }, 15 | { 16 | "badgeIndex": 2, 17 | "code": "UK183", 18 | "name": "The Sims - Katy Perry Sweet Treats", 19 | "description": "I beat the The Sims Katy Perry Sweet Treats Quiz!" 20 | }, 21 | { 22 | "badgeIndex": 3, 23 | "code": "Z63_HHUK", 24 | "name": "Valued BETA tester", 25 | "description": "Helped shape the new Habbo June 2009" 26 | }, 27 | { 28 | "badgeIndex": 4, 29 | "code": "Z64_HHUK", 30 | "name": "Official BETA tester", 31 | "description": "Helped shape the new Habbo June 2009" 32 | }, 33 | { 34 | "badgeIndex": 5, 35 | "code": "UK119", 36 | "name": "Master Shifu's Badge of Honour", 37 | "description": "Kung Fu Panda 2 visited Habbo December 2010" 38 | } 39 | ] 40 | } -------------------------------------------------------------------------------- /tests/data/com_koeientemmer_getphotos.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "previewUrl": "//habbo-stories-content.s3.amazonaws.com/servercamera/purchased/hhus/p-31212674-1448057454995.png", 4 | "tags": [], 5 | "creator_uniqueId": "hhus-9cd61b156972c2eb33a145d69918f965", 6 | "type": "PHOTO", 7 | "url": "//habbo-stories-content.s3.amazonaws.com/servercamera/purchased/hhus/p-31212674-1448057454995.png", 8 | "version": 1, 9 | "time": 1448057455732, 10 | "creator_name": "koeientemmer", 11 | "creator_id": 31212674, 12 | "room_id": 65285667, 13 | "id": "171ed8e4-6424-4c10-8ef1-bdddde2b4343", 14 | "likes": ["aapo"] 15 | }, 16 | { 17 | "previewUrl": "//habbo-stories-content.s3.amazonaws.com/servercamera/purchased/hhus/p-31212674-1448057083152.png", 18 | "tags": [], 19 | "creator_uniqueId": "hhus-9cd61b156972c2eb33a145d69918f965", 20 | "type": "PHOTO", 21 | "url": "//habbo-stories-content.s3.amazonaws.com/servercamera/purchased/hhus/p-31212674-1448057083152.png", 22 | "version": 1, 23 | "time": 1448057083969, 24 | "creator_name": "koeientemmer", 25 | "creator_id": 31212674, 26 | "room_id": 31146034, 27 | "id": "a0fbe989-81fb-417f-8bdc-4e9bf877d173", 28 | "likes": [] 29 | } 30 | ] -------------------------------------------------------------------------------- /tests/data/hotel_maintenance.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Habbo 8 | 9 | 10 | 14 | 15 | 16 | 17 |

18 |
19 |
20 |
21 |
22 |
23 |
24 |

¡PARO POR MANTENIMIENTO!

25 |

¡Lo sentimos! Habbo está en paro por mantenimiento. Volveremos pronto. Prometido.

26 |
27 |
29 | 33 |
34 | 35 | 36 |
37 |
38 | 39 |
40 | 69 | 70 | -------------------------------------------------------------------------------- /tests/data/sandbox_johno_gethabbo.json: -------------------------------------------------------------------------------- 1 | { 2 | "uniqueId": "hhs2-15cdd228b60baf1fcd72283ab29d1527", 3 | "name": "Johno", 4 | "figureString": "hr-165-31.hd-180-1.ch-215-1408.lg-280-1408.sh-300-1408.fa-1201", 5 | "motto": "null", 6 | "online": false, 7 | "lastAccessTime": "2020-12-07T15:43:37.000+0000", 8 | "memberSince": "2004-07-19T10:14:20.000+0000", 9 | "profileVisible": true, 10 | "currentLevel": 7, 11 | "currentLevelCompletePercent": 75, 12 | "totalExperience": 110, 13 | "starGemCount": 18, 14 | "selectedBadges": [ 15 | { 16 | "badgeIndex": 2, 17 | "code": "ADM", 18 | "name": "", 19 | "description": "" 20 | }, 21 | { 22 | "badgeIndex": 4, 23 | "code": "ACH_HappyHour1", 24 | "name": "Happy hour", 25 | "description": "For logging in during happy hour." 26 | }, 27 | { 28 | "badgeIndex": 5, 29 | "code": "ACH_AllTimeHotelPresence7", 30 | "name": "Online time VII - Cyclone", 31 | "description": "For spending total of 1440 hours in hotel." 32 | } 33 | ] 34 | } -------------------------------------------------------------------------------- /tests/data/sandbox_johno_getprofile.json: -------------------------------------------------------------------------------- 1 | { 2 | "user": { 3 | "uniqueId": "hhs2-15cdd228b60baf1fcd72283ab29d1527", 4 | "name": "Johno", 5 | "figureString": "hr-165-31.hd-180-1.ch-215-1408.lg-280-1408.sh-300-1408.fa-1201", 6 | "motto": "null", 7 | "online": false, 8 | "lastAccessTime": "2020-12-07T15:43:37.000+0000", 9 | "memberSince": "2004-07-19T10:14:20.000+0000", 10 | "profileVisible": true, 11 | "currentLevel": 7, 12 | "currentLevelCompletePercent": 75, 13 | "totalExperience": 110, 14 | "starGemCount": 18, 15 | "selectedBadges": [ 16 | { 17 | "badgeIndex": 2, 18 | "code": "ADM", 19 | "name": "", 20 | "description": "" 21 | }, 22 | { 23 | "badgeIndex": 4, 24 | "code": "ACH_HappyHour1", 25 | "name": "Happy hour", 26 | "description": "For logging in during happy hour." 27 | }, 28 | { 29 | "badgeIndex": 5, 30 | "code": "ACH_AllTimeHotelPresence7", 31 | "name": "Online time VII - Cyclone", 32 | "description": "For spending total of 1440 hours in hotel." 33 | } 34 | ] 35 | }, 36 | "groups": [], 37 | "badges": [ 38 | { 39 | "code": "ACH_RespectEarned2", 40 | "name": "20% Respected Habbo II", 41 | "description": "For earning respect 6 times." 42 | }, 43 | { 44 | "code": "ACH_BuildersClub2", 45 | "name": "Builders Club member II", 46 | "description": "For having 31 days of Builders Club membership." 47 | }, 48 | { 49 | "code": "ACH_PetLover1", 50 | "name": "Can I keep him? I", 51 | "description": "Own 1 pet to earn this badge." 52 | }, 53 | { 54 | "code": "ACH_TradingPass4", 55 | "name": "Friendly one", 56 | "description": "For giving 2 star gems to other people." 57 | }, 58 | { 59 | "code": "ACH_RoomDecoFurniTypeCount5", 60 | "name": "Furni collector V", 61 | "description": "For building a room with 24 different furni." 62 | }, 63 | { 64 | "code": "ACH_Citizenship1", 65 | "name": "Habbo Citizen", 66 | "description": "For passing the Habbo Citizen talent track" 67 | }, 68 | { 69 | "code": "ACH_HappyHour1", 70 | "name": "Happy hour", 71 | "description": "For logging in during happy hour." 72 | }, 73 | { 74 | "code": "ACH_Tutorial3", 75 | "name": "Hello room", 76 | "description": "For typing and sending a chat line." 77 | }, 78 | { 79 | "code": "ACH_Tutorial4", 80 | "name": "Home sweet home", 81 | "description": "For viewing room settings." 82 | }, 83 | { 84 | "code": "ACH_PetRespectGiver1", 85 | "name": "I like your pet! I", 86 | "description": "Scratch anyone's pet at least 2 times to earn this badge." 87 | }, 88 | { 89 | "code": "ACH_Tutorial1", 90 | "name": "I'm walking here!", 91 | "description": "For making your avatar walk around." 92 | }, 93 | { 94 | "code": "ACH_HabboWayGraduate1", 95 | "name": "Level I Habbo Way", 96 | "description": "For passing the Habbo Way quiz!" 97 | }, 98 | { 99 | "code": "ACH_TradingPass6", 100 | "name": "Level jumping", 101 | "description": "For reaching avatar level 6." 102 | }, 103 | { 104 | "code": "ACH_AvatarLooks1", 105 | "name": "Looks that kill", 106 | "description": "For changing your looks for the first time." 107 | }, 108 | { 109 | "code": "ACH_Tutorial2", 110 | "name": "Me, myself and I", 111 | "description": "For visiting your own profile." 112 | }, 113 | { 114 | "code": "ACH_Tutorial5", 115 | "name": "Move that furni", 116 | "description": "For moving, rotating or picking up furni or putting furni to room." 117 | }, 118 | { 119 | "code": "ACH_RespectGiven1", 120 | "name": "Nice as pie! I", 121 | "description": "For giving respect 2 times." 122 | }, 123 | { 124 | "code": "ACH_TradingPass7", 125 | "name": "Nice to meet", 126 | "description": "For having 2 friends in your friend list." 127 | }, 128 | { 129 | "code": "ACH_TradingPass2", 130 | "name": "Noob curiosity", 131 | "description": "For spending 120 minutes in the Hotel." 132 | }, 133 | { 134 | "code": "ACH_AllTimeHotelPresence7", 135 | "name": "Online time VII - Cyclone", 136 | "description": "For spending total of 1440 hours in hotel." 137 | }, 138 | { 139 | "code": "ACH_TradingPass3", 140 | "name": "Revisit", 141 | "description": "For being a member for 3 days." 142 | }, 143 | { 144 | "code": "ACH_RoomDecoFurniCount6", 145 | "name": "Room builder VI", 146 | "description": "For building a room with 30 furni." 147 | }, 148 | { 149 | "code": "ACH_RoomDecoHosting6", 150 | "name": "Room host VI", 151 | "description": "For having visitors spend 180 minutes in your rooms." 152 | }, 153 | { 154 | "code": "ACH_RoomEntry2", 155 | "name": "Room raider II", 156 | "description": "For 20 room visits. Peeker." 157 | }, 158 | { 159 | "code": "ACH_TradingPass5", 160 | "name": "Room raider junior", 161 | "description": "For hanging out in 20 rooms that you do not own." 162 | }, 163 | { 164 | "code": "ACH_SafetyQuizGraduate1", 165 | "name": "Safety Quiz", 166 | "description": "For passing the Safety quiz!" 167 | }, 168 | { 169 | "code": "ACH_FriendListSize2", 170 | "name": "Socializer II", 171 | "description": "For having 10 friends in your friend list." 172 | }, 173 | { 174 | "code": "ACH_PetRespectReceiver1", 175 | "name": "Someone likes my pet I", 176 | "description": "Have someone scratch your pet at least 3 times to earn this badge." 177 | }, 178 | { 179 | "code": "ACH_PetFeeding1", 180 | "name": "They're eating all my credits! I", 181 | "description": "Give your pets at least 200 points of food to earn this badge." 182 | }, 183 | { 184 | "code": "ACH_TraderPass1", 185 | "name": "Trading pass I", 186 | "description": "Without a trading pass you can't trade: you have to have an account that is 3 days old and you have to verify your email." 187 | }, 188 | { 189 | "code": "ACH_RegistrationDuration20", 190 | "name": "True Habbo XX", 191 | "description": "For being a member of the community for 1825 days." 192 | }, 193 | { 194 | "code": "ACH_EmailVerification1", 195 | "name": "True you", 196 | "description": "For verifying your email address. Thanks!" 197 | }, 198 | { 199 | "code": "ACH_TradingPass1", 200 | "name": "Tutorial", 201 | "description": "For completing tutorial." 202 | } 203 | ], 204 | "friends": [ 205 | { 206 | "name": "anjuna", 207 | "motto": "totally", 208 | "uniqueId": "hhs2-b8e50244304a804ffb990a95679dbddd", 209 | "figureString": "hr-165-45.hd-208-2.ch-250-64.lg-285-82.sh-290-64" 210 | }, 211 | { 212 | "name": "cookiezz", 213 | "motto": "Rareboy for Comic Relief :) [SH] NMHT-", 214 | "uniqueId": "hhs2-16b1972b6c4a04d96ac60498031a8e55", 215 | "figureString": "hd-200-1.ch-876-62.lg-281-62.sh-908-62" 216 | }, 217 | { 218 | "name": "entmaiden", 219 | "motto": "Virtual Jogging Rox!! :D", 220 | "uniqueId": "hhs2-0597a231e66b1e7a579f210972ded028", 221 | "figureString": "hd-600-1.ch-879-62.lg-696-62.sh-740-62" 222 | }, 223 | { 224 | "name": "Hjelp", 225 | "motto": "Here to assist <3", 226 | "uniqueId": "hhs2-0b2769aabf44bce1327e7dd3e38f9596", 227 | "figureString": "hr-545-34.hd-600-1.ch-630-62.lg-715-63.sh-735-63.he-1605-73.ca-1813-" 228 | }, 229 | { 230 | "name": "Jay", 231 | "motto": "Where is the love |", 232 | "uniqueId": "hhs2-5a2ba73daea251593bbb0ec0d7a18d33", 233 | "figureString": "hd-600-1.ch-879-62.lg-696-62.sh-740-62" 234 | }, 235 | { 236 | "name": "jrh2002", 237 | "motto": "Failure Is Not An Option", 238 | "uniqueId": "hhs2-7f7c51b695a2b4711dc3a7023da55547", 239 | "figureString": "hd-200-1.ch-876-62.lg-281-62.sh-908-62" 240 | }, 241 | { 242 | "name": "Luckyclone", 243 | "motto": "Rainbow.", 244 | "uniqueId": "hhs2-1ec81046414956b9797ba7c238da2b70", 245 | "figureString": "hd-600-1.ch-879-62.lg-696-62.sh-740-62" 246 | }, 247 | { 248 | "name": "MOD-Bu", 249 | "motto": "Banana! | Scorbutic |", 250 | "uniqueId": "hhs2-beb97dcb10c1d5564f25f2efb97a897a", 251 | "figureString": "hr-545-34.hd-600-1.ch-630-62.lg-715-63.sh-735-63.he-1605-73.ca-1813-" 252 | }, 253 | { 254 | "name": "MOD-Elux", 255 | "motto": "Keep your details personal!", 256 | "uniqueId": "hhs2-4b1fe32b57e32595f02d9ad51d567625", 257 | "figureString": "hr-165-45.hd-208-2.ch-250-64.lg-285-82.sh-290-64" 258 | }, 259 | { 260 | "name": "MOD-Flaxy", 261 | "motto": "\"Im Mizki for comic relief,20p per day", 262 | "uniqueId": "hhs2-16c6b14f88e96a17150644f23791afa2", 263 | "figureString": "hr-545-34.hd-600-1.ch-630-62.lg-715-63.sh-735-63.he-1605-73.ca-1813-" 264 | }, 265 | { 266 | "name": "MOD-pants", 267 | "motto": "Shoot the whole day down :)", 268 | "uniqueId": "hhs2-f5443bfdf2bfdb3159fecf52ac8ff1d9", 269 | "figureString": "hr-545-34.hd-600-1.ch-630-62.lg-715-63.sh-735-63.he-1605-73.ca-1813-" 270 | }, 271 | { 272 | "name": "MOD-Shade", 273 | "motto": "I am totally NORMAL! ;)", 274 | "uniqueId": "hhs2-1aadcc3595e1cf8d00031ae51061ef00", 275 | "figureString": "hr-165-45.hd-208-2.ch-250-64.lg-285-82.sh-290-64" 276 | }, 277 | { 278 | "name": "MysticalQueen", 279 | "motto": "Floyd for Comic Relief :-)", 280 | "uniqueId": "hhs2-0ffa31e4491c7f810add0faebc345a30", 281 | "figureString": "hr-165-45.hd-208-2.ch-250-64.lg-285-82.sh-290-64" 282 | }, 283 | { 284 | "name": "Pixxel", 285 | "motto": "Habbo2020 Dev Team Member", 286 | "uniqueId": "hhs2-ab815e234dc3c0c03ae59f08777873c4", 287 | "figureString": "hr-3043-41.hd-3103-27.ch-3185-1428.lg-3257-1334.sh-3089-1427.ha-3117-1334.he-3376-1408-1408.fa-1205-1428.cc-3299-1334-1429.cp-3312" 288 | } 289 | ], 290 | "rooms": [ 291 | { 292 | "id": 10279199, 293 | "name": "testsdfasdf", 294 | "description": "fdsdf", 295 | "creationTime": "2013-06-25T23:13:57.000+0000", 296 | "tags": [], 297 | "maximumVisitors": 10, 298 | "showOwnerName": true, 299 | "ownerName": "Johno", 300 | "ownerUniqueId": "hhs2-15cdd228b60baf1fcd72283ab29d1527", 301 | "categories": [], 302 | "imageUrl": "https://habbo-stories-content-staging.s3.amazonaws.com/fullroom-photo/hhs2/10279199.png", 303 | "thumbnailUrl": "https://habbo-stories-content-staging.s3.amazonaws.com/navigator-thumbnail/hhs2/10279199.png", 304 | "rating": 13, 305 | "uniqueId": "r-hhs2-b550e4d5c9567b835ff36a0a95645bc9" 306 | }, 307 | { 308 | "id": 10280476, 309 | "name": "free placement test", 310 | "description": "", 311 | "creationTime": "2014-05-28T13:19:19.000+0000", 312 | "tags": [], 313 | "maximumVisitors": 10, 314 | "showOwnerName": true, 315 | "ownerName": "Johno", 316 | "ownerUniqueId": "hhs2-15cdd228b60baf1fcd72283ab29d1527", 317 | "categories": [ 318 | "navigator.flatcategory.global.GAMES" 319 | ], 320 | "imageUrl": "https://habbo-stories-content-staging.s3.amazonaws.com/fullroom-photo/hhs2/10280476.png", 321 | "thumbnailUrl": "https://habbo-stories-content-staging.s3.amazonaws.com/navigator-thumbnail/hhs2/10280476.png", 322 | "rating": 19, 323 | "uniqueId": "r-hhs2-b002c70bd11f9759d30b1a1028f2325c" 324 | } 325 | ] 326 | } --------------------------------------------------------------------------------