├── .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 | [](https://github.com/gerbenjacobs/HabboAPI/actions/workflows/php.yml)
2 | [](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'] .= ' ';
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 |
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] .= '';
96 | $method_name = sprintf('get%s', ucfirst($section));
97 | foreach (call_user_func(array($myProfile, $method_name)) as $object) {
98 | $html[$section] .= '' . $object . ' '; // uses the __toString() method
99 | }
100 | $html[$section] .= ' ';
101 | }
102 | }
103 |
104 | // Generate the photos
105 | if ($myPhotos) {
106 | foreach ($myPhotos as $myPhoto) {
107 | $html['photos'] .= '
108 |
109 |
110 |
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 Habbo Sorry, 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 |
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 | }
--------------------------------------------------------------------------------