├── .gitignore ├── .travis.yml ├── Dockerfile ├── README.md ├── commands.json ├── composer.json ├── composer.lock ├── config.json.example ├── docker-compose.yml ├── logs └── .gitignore ├── modules.json ├── slave.php ├── sockets └── .gitignore ├── src ├── API │ ├── ActionAPI.php │ ├── BaseAPI.php │ └── DataAPI.php ├── Bot │ ├── XatBot.php │ ├── XatConnect4.php │ ├── XatHangman.php │ ├── XatNetwork.php │ ├── XatSocket.php │ ├── XatUser.php │ └── XatVariables.php ├── Commands │ ├── 8ball.php │ ├── active.php │ ├── alias.php │ ├── allmissing.php │ ├── autoban.php │ ├── autotemp.php │ ├── badge.php │ ├── ban.php │ ├── boot.php │ ├── bump.php │ ├── calc.php │ ├── chatinfos.php │ ├── choose.php │ ├── clear.php │ ├── commands.php │ ├── countdown.php │ ├── customcommand.php │ ├── dev.php │ ├── dice.php │ ├── die.php │ ├── dunce.php │ ├── dx.php │ ├── edit.php │ ├── everymissing.php │ ├── gag.php │ ├── game.php │ ├── gameban.php │ ├── gamebanme.php │ ├── getmain.php │ ├── guestself.php │ ├── handlecustomcommands.php │ ├── hangman.php │ ├── hash.php │ ├── hasmost.php │ ├── horoscope.php │ ├── hush.php │ ├── jinx.php │ ├── joke.php │ ├── kick.php │ ├── kickall.php │ ├── lastseen.php │ ├── latestpower.php │ ├── leastactive.php │ ├── listsmilies.php │ ├── logs.php │ ├── love.php │ ├── mail.php │ ├── minrank.php │ ├── misc.php │ ├── modproof.php │ ├── mostactive.php │ ├── mute.php │ ├── naughtystep.php │ ├── online.php │ ├── pc.php │ ├── pm.php │ ├── pool.php │ ├── poorest.php │ ├── power.php │ ├── premium.php │ ├── price.php │ ├── radio.php │ ├── randomnumber.php │ ├── randomsmiley.php │ ├── randomuser.php │ ├── rank.php │ ├── rankme.php │ ├── refresh.php │ ├── response.php │ ├── reverseban.php │ ├── richest.php │ ├── say.php │ ├── scroll.php │ ├── search.php │ ├── shortname.php │ ├── sinbin.php │ ├── slots.php │ ├── snitch.php │ ├── spotify.php │ ├── staff.php │ ├── start.php │ ├── started.php │ ├── steam.php │ ├── store.php │ ├── super.php │ ├── temp.php │ ├── test.php │ ├── trade.php │ ├── twitch.php │ ├── twitter.php │ ├── unbadge.php │ ├── unban.php │ ├── undunce.php │ ├── unnaughtystep.php │ ├── unyellowcard.php │ ├── userinfo.php │ ├── users.php │ ├── value.php │ ├── wallet.php │ ├── weather.php │ ├── whatis.php │ ├── wikipedia.php │ ├── xatbot.php │ ├── xatwiki.php │ ├── xd.php │ ├── yellowcard.php │ ├── youtube.php │ ├── zap.php │ └── zipban.php ├── Extensions.php ├── IPC.php ├── Logger.php ├── Models │ ├── Aliases.php │ ├── AutoBan.php │ ├── AutoTemp.php │ ├── Bot.php │ ├── BotStatus.php │ ├── Command.php │ ├── CustomCommand.php │ ├── Language.php │ ├── Log.php │ ├── Mail.php │ ├── Minrank.php │ ├── Response.php │ ├── Server.php │ ├── Snitch.php │ ├── Staff.php │ ├── User.php │ ├── UserEvents.php │ └── Userinfo.php ├── Modules │ ├── onAbort.php │ ├── onApp.php │ ├── onBlast.php │ ├── onChatInfo.php │ ├── onCommand.php │ ├── onControlMessage.php │ ├── onDone.php │ ├── onDup.php │ ├── onFriendList.php │ ├── onGroupPowers.php │ ├── onIdle.php │ ├── onKick.php │ ├── onLoginInfo.php │ ├── onLogout.php │ ├── onMessage.php │ ├── onModeration.php │ ├── onOldMessage.php │ ├── onOpenApp.php │ ├── onPC.php │ ├── onPM.php │ ├── onPools.php │ ├── onRankMessage.php │ ├── onRedirect.php │ ├── onTickle.php │ ├── onTransfer.php │ ├── onUserJoined.php │ └── onUserLeave.php ├── Server.php ├── Userinfo.php └── Utilities.php └── start.php /.gitignore: -------------------------------------------------------------------------------- 1 | sftp-config.json 2 | config.json 3 | nohup.out 4 | /vendor 5 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: php 2 | 3 | php: 4 | - 7.1 5 | 6 | matrix: 7 | fast_finish: true 8 | 9 | include: 10 | - php: 7.1 11 | env: PHPCS=1 DEFAULT=0 12 | 13 | install: 14 | - composer self-update 15 | - composer install --prefer-dist --no-interaction 16 | 17 | before_script: 18 | - phpenv rehash 19 | 20 | script: 21 | - sh -c "if [ '$DEFAULT' = '1' ]; then vendor/bin/phpunit; fi" 22 | - sh -c "if [ '$PHPCS' = '1' ]; then vendor/bin/phpcs -p --extensions=php --standard=PSR2 ./src; fi" 23 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:7.1-alpine 2 | RUN docker-php-ext-install sockets -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # xatbot - Bot [](https://travis-ci.org/llomgui/xatbot-Bot) 2 | 3 | ## What do i need to run it? 4 | 5 | - PHP7.1 6 | - A xat account to use it as bot 7 | 8 | ## How does it work? 9 | 10 | First, edit config.json.example with your data, rename it to config.json. 11 | If you want to add modules or commands, don't forget to update modules.json or commands.json. 12 | 13 | This project is linked to [xatbot Website](https://github.com/llomgui/xatbot-Website) 14 | You need to clone this projet to make it work (It has the database). 15 | 16 | Once everything is cloned, you can launch bots servers with: php start.php 17 | 18 | Docker: 19 | 20 | - docker run -it --rm -v $(pwd):/op php:7.1-alpine sh 21 | - cd op 22 | - docker-php-ext-install sockets 23 | - php start.php 24 | 25 | Docker-compose: 26 | 27 | - docker-compose run --rm php 28 | 29 | ## I want to contribute, how do I? 30 | 31 | Make your tests on your computer, then send a pull request. 32 | 33 | This has been tested on Windows PC and doesn't seem to work as intended. 34 | -------------------------------------------------------------------------------- /commands.json: -------------------------------------------------------------------------------- 1 | [ 2 | "8ball", 3 | "active", 4 | "alias", 5 | "allmissing", 6 | "autoban", 7 | "autotemp", 8 | "badge", 9 | "ban", 10 | "boot", 11 | "bump", 12 | "calc", 13 | "chatinfos", 14 | "choose", 15 | "clear", 16 | "commands", 17 | "countdown", 18 | "customcommand", 19 | "dev", 20 | "dice", 21 | "die", 22 | "dunce", 23 | "dx", 24 | "edit", 25 | "everymissing", 26 | "gag", 27 | "game", 28 | "gameban", 29 | "gamebanme", 30 | "getmain", 31 | "guestself", 32 | "hangman", 33 | "handlecustomcommands", 34 | "hash", 35 | "hasmost", 36 | "horoscope", 37 | "hush", 38 | "jinx", 39 | "joke", 40 | "kick", 41 | "kickall", 42 | "latestpower", 43 | "lastseen", 44 | "leastactive", 45 | "listsmilies", 46 | "love", 47 | "logs", 48 | "mail", 49 | "minrank", 50 | "misc", 51 | "modproof", 52 | "mostactive", 53 | "mute", 54 | "naughtystep", 55 | "online", 56 | "pc", 57 | "pm", 58 | "pool", 59 | "poorest", 60 | "power", 61 | "premium", 62 | "price", 63 | "radio", 64 | "randomnumber", 65 | "randomsmiley", 66 | "randomuser", 67 | "rank", 68 | "rankme", 69 | "refresh", 70 | "response", 71 | "reverseban", 72 | "richest", 73 | "say", 74 | "scroll", 75 | "search", 76 | "shortname", 77 | "sinbin", 78 | "slots", 79 | "snitch", 80 | "spotify", 81 | "staff", 82 | "start", 83 | "started", 84 | "steam", 85 | "store", 86 | "super", 87 | "temp", 88 | "test", 89 | "trade", 90 | "twitch", 91 | "twitter", 92 | "unbadge", 93 | "unban", 94 | "undunce", 95 | "unnaughtystep", 96 | "unyellowcard", 97 | "userinfo", 98 | "users", 99 | "value", 100 | "wallet", 101 | "weather", 102 | "whatis", 103 | "wikipedia", 104 | "xatbot", 105 | "xatwiki", 106 | "xd", 107 | "yellowcard", 108 | "youtube", 109 | "zap", 110 | "zipban" 111 | ] -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "xatbot/bot", 3 | "description": "xatbot Bot", 4 | "require": { 5 | "php": ">=7.1.0", 6 | "illuminate/database": "^5.4", 7 | "monolog/monolog": "^1.22", 8 | "abraham/twitteroauth": "^0.7.4", 9 | "jwilsson/spotify-web-api-php": "^2.0" 10 | }, 11 | "require-dev": { 12 | "squizlabs/php_codesniffer": "^3.0", 13 | "phpunit/phpunit": "~5.7" 14 | }, 15 | "autoload":{ 16 | "psr-4": { 17 | "xatbot\\": "src/" 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /config.json.example: -------------------------------------------------------------------------------- 1 | { 2 | "database": { 3 | "driver": "pgsql", 4 | "host": "127.0.0.1", 5 | "database": "database_name", 6 | "username": "user", 7 | "password": "secret" 8 | }, 9 | "botaccount": { 10 | "regname": "Ocean", 11 | "xatid":"10101", 12 | "password": "", 13 | "pin": "", 14 | "pw": "", 15 | "forcelogin": true 16 | }, 17 | "developers": [ 18 | 412345607, 19 | 1000000000, 20 | 45193538 21 | ], 22 | "apikeys": { 23 | "youtube": "", 24 | "google": "", 25 | "twitch": "", 26 | "twitter": { 27 | "consumer_key": "", 28 | "consumer_secret": "", 29 | "oauth_token": "", 30 | "oauth_token_secret": "" 31 | }, 32 | "weather": "", 33 | "spotify": { 34 | "client_id": "", 35 | "secret_id": "", 36 | "redirect_uri": "" 37 | }, 38 | "steam": "" 39 | }, 40 | "config": { 41 | "website_url": "https://example.fr" 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | php: 4 | build: . 5 | volumes: 6 | - .:/op:ro 7 | command: php /op/start.php -------------------------------------------------------------------------------- /logs/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /modules.json: -------------------------------------------------------------------------------- 1 | [ 2 | "onMessage", 3 | "onOldMessage", 4 | "onUserJoined", 5 | "onTickle", 6 | "onPC", 7 | "onPM", 8 | "onUserLeave", 9 | "onFriendList", 10 | "onTransfer", 11 | "onApp", 12 | "onIdle", 13 | "onDone", 14 | "onDup", 15 | "onChatInfo", 16 | "onGroupPowers", 17 | "onControlMessage", 18 | "onBlast", 19 | "onAbort", 20 | "onLogout", 21 | "onLoginInfo", 22 | "onOpenApp", 23 | "onPools", 24 | "onRedirect", 25 | "onKick", 26 | "onRankMessage", 27 | "onCommand", 28 | "onModeration" 29 | ] 30 | -------------------------------------------------------------------------------- /slave.php: -------------------------------------------------------------------------------- 1 | handle(); -------------------------------------------------------------------------------- /sockets/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /src/API/ActionAPI.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'active')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | if (empty($message[1])) { 12 | $user = $bot->users[$who]; 13 | } else { 14 | foreach ($bot->users as $id => $object) { 15 | if (is_object($object)) { 16 | if (strtolower($object->getRegname()) == strtolower($message[1]) || $id == $message[1]) { 17 | $user = $object; 18 | break; 19 | } 20 | } 21 | } 22 | } 23 | 24 | if (!isset($user)) { 25 | $bot->network->sendMessageAutoDetection($who, $bot->botlang('user.not.here'), $type); 26 | } else { 27 | $now = time(); 28 | $userTime = $now - xatbot\API\DataAPI::get('active_' . $user->getID()); 29 | $displayName = $user->isRegistered() ? $user->getRegname() . '(' . $user->getID() . ')' : $user->getID(); 30 | 31 | $bot->network->sendMessageAutoDetection( 32 | $who, 33 | $bot->botlang('cmd.active.string', [$displayName, $bot->secondsToTime($userTime)]), 34 | $type 35 | ); 36 | } 37 | }; 38 | -------------------------------------------------------------------------------- /src/Commands/allmissing.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'allmissing')) { 11 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 12 | } 13 | 14 | if (empty($message[1])) { 15 | $message[1] = $who; 16 | } 17 | 18 | $info = null; 19 | if (is_numeric($message[1])) { 20 | $message[1] = (int)$message[1]; 21 | 22 | if ($message[1] == 9223372036854775807) { 23 | return $bot->network->sendMessageAutoDetection($who, 'I am in a 64-bit environment.', $type, true); 24 | } 25 | 26 | $info = Capsule::table('userinfo') 27 | ->where('xatid', $message[1]) 28 | ->orderBy('updated_at', 'desc') 29 | ->get() 30 | ->toArray(); 31 | } else { 32 | $info = Capsule::table('userinfo') 33 | ->whereRaw('LOWER(regname) = ?', [strtolower($message[1])]) 34 | ->orderBy('updated_at', 'desc') 35 | ->get() 36 | ->toArray(); 37 | } 38 | 39 | if (!empty($info)) { 40 | $info = $info[0]; 41 | $message = $bot->botlang('cmd.allmissing.canbeseen', [$info->regname]); 42 | return $bot->network->sendMessageAutoDetection( 43 | $who, 44 | $message . XatVariables::getConfig()['website_url'] . '/panel/allmissing/' . $info->regname, 45 | $type 46 | ); 47 | } else { 48 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('user.notindatabase'), $type); 49 | } 50 | }; 51 | -------------------------------------------------------------------------------- /src/Commands/badge.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'badge')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | if (!$bot->botHasPower(264)) { 12 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('missing.power', ['badge']), $type); 13 | } 14 | 15 | if (!isset($message[1]) || empty($message[1])) { 16 | return $bot->network->sendMessageAutoDetection($who, 'Usage: !badge [regname/xatid] [reason]', $type, true); 17 | } 18 | 19 | if (is_numeric($message[1]) && isset($bot->users[$message[1]])) { 20 | $user = $bot->users[$message[1]]; 21 | } else { 22 | foreach ($bot->users as $id => $object) { 23 | if (is_object($object)) { 24 | if (strtolower($object->getRegname()) == strtolower($message[1])) { 25 | $user = $object; 26 | break; 27 | } 28 | } 29 | } 30 | } 31 | 32 | if (isset($user)) { 33 | if ($user->isBadged()) { 34 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('user.already', ['badged']), $type); 35 | } 36 | 37 | if (isset($message[2])) { 38 | $reason = implode(' ', array_slice($message, 2)); 39 | } 40 | 41 | $bot->network->sendPrivateConversation($user->getID(), '/nb' . ($reason ?? '')); 42 | } else { 43 | $bot->network->sendMessageAutoDetection($who, $bot->botlang('user.not.here'), $type); 44 | } 45 | }; 46 | -------------------------------------------------------------------------------- /src/Commands/ban.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'ban')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | if (!isset($message[1]) || empty($message[1]) || !isset($message[2]) || 12 | empty($message[2]) || !is_numeric($message[2])) { 13 | return $bot->network->sendMessageAutoDetection( 14 | $who, 15 | 'Usage: !ban [regname/xatid] [time] [reason]', 16 | $type, 17 | true 18 | ); 19 | } 20 | 21 | if (is_numeric($message[1]) && isset($bot->users[$message[1]])) { 22 | $user = $bot->users[$message[1]]; 23 | } else { 24 | foreach ($bot->users as $id => $object) { 25 | if (is_object($object)) { 26 | if (strtolower($object->getRegname()) == strtolower($message[1])) { 27 | $user = $object; 28 | break; 29 | } 30 | } 31 | } 32 | } 33 | 34 | if (isset($user)) { 35 | if ($user->isBanned()) { 36 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('user.already', ['banned']), $type); 37 | } 38 | 39 | $hours = $message[2]; 40 | 41 | if (isset($message[3])) { 42 | $reason = implode(' ', array_slice($message, 3)); 43 | } 44 | 45 | $bot->network->ban($user->getID(), $hours, $reason ?? ''); 46 | } else { 47 | $bot->network->sendMessageAutoDetection($who, $bot->botlang('user.not.here'), $type); 48 | } 49 | }; 50 | -------------------------------------------------------------------------------- /src/Commands/boot.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'boot')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | if (!$bot->botHasPower(25)) { 12 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('missing.power', ['boot']), $type); 13 | } 14 | 15 | if (!isset($message[1]) || empty($message[1]) || !isset($message[2]) || empty($message[2])) { 16 | return $bot->network->sendMessageAutoDetection( 17 | $who, 18 | 'Usage: !boot [regname/xatid] [chat] [reason]', 19 | $type, 20 | true 21 | ); 22 | } 23 | 24 | if (is_numeric($message[1]) && isset($bot->users[$message[1]])) { 25 | $user = $bot->users[$message[1]]; 26 | } else { 27 | foreach ($bot->users as $id => $object) { 28 | if (is_object($object)) { 29 | if (strtolower($object->getRegname()) == strtolower($message[1])) { 30 | $user = $object; 31 | break; 32 | } 33 | } 34 | } 35 | } 36 | 37 | if (isset($user)) { 38 | $chat = $message[2]; 39 | if (isset($message[3])) { 40 | $reason = implode(' ', array_slice($message, 3)); 41 | } 42 | 43 | $bot->network->kick($user->getID(), $reason ?? '', '#' . $chat); 44 | } else { 45 | $bot->network->sendMessageAutoDetection($who, $bot->botlang('user.not.here'), $type); 46 | } 47 | }; 48 | -------------------------------------------------------------------------------- /src/Commands/bump.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'bump')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | if (!$bot->botHasPower(75)) { 12 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('missing.power', ['bump']), $type); 13 | } 14 | 15 | if (!isset($message[1]) || empty($message[1])) { 16 | return $bot->network->sendMessageAutoDetection($who, 'Usage: !bump [regname/xatid] [message]', $type, true); 17 | } 18 | 19 | if (is_numeric($message[1]) && isset($bot->users[$message[1]])) { 20 | $user = $bot->users[$message[1]]; 21 | } else { 22 | foreach ($bot->users as $id => $object) { 23 | if (is_object($object)) { 24 | if (strtolower($object->getRegname()) == strtolower($message[1])) { 25 | $user = $object; 26 | break; 27 | } 28 | } 29 | } 30 | } 31 | 32 | if (isset($user)) { 33 | if (isset($message[2])) { 34 | $reason = implode(' ', array_slice($message, 2)); 35 | } 36 | 37 | $bot->network->sendPrivateConversation($user->getID(), '(bump) ' . ($reason ?? '')); 38 | $bot->network->sendMessageAutoDetection($who, $bot->botlang('cmd.bump.gotbump'), $type); 39 | } else { 40 | $bot->network->sendMessageAutoDetection($who, $bot->botlang('user.not.here'), $type); 41 | } 42 | }; 43 | -------------------------------------------------------------------------------- /src/Commands/calc.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'calc')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | unset($message[0]); 12 | $message = implode('', $message); 13 | 14 | if (empty($message)) { 15 | return $bot->network->sendMessageAutoDetection($who, 'Usage: !calc [equation]', $type, true); 16 | } 17 | 18 | $expr = explode('|', $message); 19 | 20 | $stream = []; 21 | $stream['http']['method'] = 'POST'; 22 | $stream['http']['header'] = 'Content-Type: application/x-www-form-urlencoded'; 23 | $stream['http']['content'] = json_encode(['expr' => $expr]); 24 | $stream['http']['timeout'] = 1; 25 | 26 | $res = file_get_contents('http://api.mathjs.org/v1/', false, stream_context_create($stream)); 27 | if (!$res) { 28 | /* 29 | TODO 30 | if site not reachable use preset calc code 31 | */ 32 | return $bot->network->sendMessageAutoDetection( 33 | $who, 34 | $bot->botlang('cmd.calc.cantsolve'), 35 | $type 36 | ); 37 | } 38 | $json = json_decode($res); 39 | if ($json->error == null) { 40 | return $bot->network->sendMessageAutoDetection( 41 | $who, 42 | '_' . $message . ' = ' .$json->result[count($json->result) - 1], 43 | $type 44 | ); 45 | } else { 46 | return $bot->network->sendMessageAutoDetection($who, $json->error, $type, true); 47 | } 48 | }; 49 | -------------------------------------------------------------------------------- /src/Commands/choose.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'choose')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | unset($message[0]); 12 | $message = implode(' ', $message); 13 | $message = preg_split('/ or /', strtolower($message), 2); 14 | 15 | if ((!isset($message[0]) || empty($message[0])) || (!isset($message[1]) || empty($message[1]))) { 16 | return $bot->network->sendMessageAutoDetection( 17 | $who, 18 | 'Usage: !choose [first choice] or [second choice]', 19 | $type, 20 | true 21 | ); 22 | } 23 | 24 | $choice = rand(0, 100) > 50 ? $message[0] : $message[1]; 25 | $bot->network->sendMessageAutoDetection($who, $bot->botlang('cmd.choose.haschosen', [$choice]), $type); 26 | }; 27 | -------------------------------------------------------------------------------- /src/Commands/clear.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'clear')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | $bot->network->sendMessageAutoDetection($who, $bot->botlang('cmd.clear.clearedmessages'), $type); 12 | 13 | for ($i = $bot->messageCount - 23; $i <= $bot->messageCount; $i++) { 14 | $bot->network->sendMessage('/d' . ($i + 1)); 15 | } 16 | }; 17 | -------------------------------------------------------------------------------- /src/Commands/commands.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'commands')) { 10 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 11 | } 12 | 13 | $bot->network->sendMessageAutoDetection( 14 | $who, 15 | XatVariables::getConfig()['website_url'] . '/panel/commands/' . $bot->data->id, 16 | $type 17 | ); 18 | }; 19 | -------------------------------------------------------------------------------- /src/Commands/countdown.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'countdown')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | $releaseTime = xatbot\Bot\XatVariables::getReleaseTime(); 12 | 13 | if ($releaseTime > 1) { 14 | $message = $bot->botlang('cmd.countdown.releasein', [gmdate("H:i:s", $releaseTime - time())]); 15 | } else { 16 | $message = $bot->botlang('cmd.countdown.nocountdown'); 17 | } 18 | 19 | $bot->network->sendMessageAutoDetection($who, $message, $type); 20 | }; 21 | -------------------------------------------------------------------------------- /src/Commands/dev.php: -------------------------------------------------------------------------------- 1 | network->sendMessageAutoDetection($who, 'new hangman sent!', $type); 23 | break; 24 | 25 | case 'reload': 26 | Extensions::readExtensions(); 27 | $bot->network->sendMessageAutoDetection($who, 'Extensions reloaded!', $type); 28 | break; 29 | 30 | case 'update': 31 | XatVariables::update(); 32 | $bot->network->sendMessageAutoDetection($who, 'Config updated!', $type); 33 | break; 34 | 35 | case 'memory': 36 | $usage = memory_get_usage(true); 37 | $memory = [ 38 | 'Bits: ' . round($usage * 8), 39 | 'Bytes: ' . $usage, 40 | 'Kilobytes: ' . round($usage / 1024), 41 | 'Megabytes: ' . round($usage / 1024 / 1024) 42 | ]; 43 | 44 | $bot->network->sendMessageAutoDetection($who, implode(' | ', $memory), $type); 45 | break; 46 | 47 | case 'transfer': 48 | if (empty($message[2])) { 49 | $message[2] = 0; 50 | } 51 | 52 | if (empty($message[3])) { 53 | $message[3] = 0; 54 | } 55 | 56 | $bot->network->sendTransfer(412345607, $message[2], $message[3], 'Sent!'); 57 | break; 58 | 59 | case 'reload_servers': 60 | $servers = Server::all()->toArray(); 61 | for ($i = 0; $i < sizeof($servers); $i++) { 62 | if (IPC::init() !== false) { 63 | if (IPC::connect(strtolower($servers[$i]['name'] . '.sock')) !== false) { 64 | IPC::write(sprintf("%s", 'reload')); 65 | IPC::close(); 66 | } else { 67 | $bot->network->sendMessageAutoDetection( 68 | $who, 69 | 'Cannot connect to server ' . $servers[$i]['name'], 70 | $type 71 | ); 72 | } 73 | } else { 74 | $bot->network->sendMessageAutoDetection( 75 | $who, 76 | 'Cannot init connection for server ' . $servers[$i]['name'], 77 | $type 78 | ); 79 | } 80 | } 81 | break; 82 | 83 | default: 84 | break; 85 | } 86 | }; 87 | -------------------------------------------------------------------------------- /src/Commands/dice.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'dice')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | $bot->network->sendMessageAutoDetection($who, $bot->botlang('cmd.dice.rolled', [rand(1, 6)]), $type); 12 | }; 13 | -------------------------------------------------------------------------------- /src/Commands/die.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'die')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | $bot->network->sendMessageAutoDetection($who, $bot->botlang('cmd.die'), $type); 12 | $bot->stopped = true; 13 | }; 14 | -------------------------------------------------------------------------------- /src/Commands/dunce.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'dunce')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | if (!$bot->botHasPower(158)) { 12 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('missing.power', ['dunce']), $type); 13 | } 14 | 15 | if (!isset($message[1]) || empty($message[1])) { 16 | return $bot->network->sendMessageAutoDetection($who, 'Usage: !dunce [regname/xatid] [reason]', $type, true); 17 | } 18 | 19 | if (is_numeric($message[1]) && isset($bot->users[$message[1]])) { 20 | $user = $bot->users[$message[1]]; 21 | } else { 22 | foreach ($bot->users as $id => $object) { 23 | if (is_object($object) && strtolower($object->getRegname()) == strtolower($message[1])) { 24 | $user = $object; 25 | break; 26 | } 27 | } 28 | } 29 | 30 | if (isset($user)) { 31 | if ($user->isDunced()) { 32 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('user.already', ['dunced']), $type); 33 | } 34 | 35 | if (isset($message[2])) { 36 | $reason = implode(' ', array_slice($message, 2)); 37 | } 38 | 39 | $bot->network->ban($user->getID(), 0, $reason ?? '', 'gd'); 40 | } else { 41 | $bot->network->sendMessageAutoDetection($who, $bot->botlang('user.not.here'), $type); 42 | } 43 | }; 44 | -------------------------------------------------------------------------------- /src/Commands/dx.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'dx')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | if (!isset($message[1]) || empty($message[1]) || !is_numeric($message[1]) || $message[1] <= 0) { 12 | return $bot->network->sendMessageAutoDetection($who, 'Usage: !dx [days]', $type, true); 13 | } 14 | 15 | $days = round($message[1]); 16 | $xats = number_format(round($message[1] * 13)); 17 | $bot->network->sendMessageAutoDetection( 18 | $who, 19 | $bot->botlang( 20 | 'cmd.xd', 21 | [ 22 | $days, 23 | $days > 1 ? 'days' : 'day', $xats, 'xats' 24 | ] 25 | ), 26 | $type 27 | ); 28 | }; 29 | -------------------------------------------------------------------------------- /src/Commands/everymissing.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'everymissing')) { 11 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 12 | } 13 | 14 | if (empty($message[1])) { 15 | $message[1] = $who; 16 | } 17 | 18 | $info = null; 19 | if (is_numeric($message[1])) { 20 | $message[1] = (int)$message[1]; 21 | 22 | if ($message[1] == 9223372036854775807) { 23 | return $bot->network->sendMessageAutoDetection($who, 'I am in a 64-bit environment.', $type, true); 24 | } 25 | 26 | $info = Capsule::table('userinfo') 27 | ->where('xatid', $message[1]) 28 | ->orderBy('updated_at', 'desc') 29 | ->get() 30 | ->toArray(); 31 | } else { 32 | $info = Capsule::table('userinfo') 33 | ->whereRaw('LOWER(regname) = ?', [strtolower($message[1])]) 34 | ->orderBy('updated_at', 'desc') 35 | ->get() 36 | ->toArray(); 37 | } 38 | 39 | if (!empty($info)) { 40 | $info = $info[0]; 41 | $message = $bot->botlang('cmd.everymissing.canbeseen', [$info->regname]); 42 | return $bot->network->sendMessageAutoDetection( 43 | $who, 44 | $message . XatVariables::getConfig()['website_url'] . '/panel/everymissing/' . $info->regname, 45 | $type 46 | ); 47 | } else { 48 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('user.notindatabase'), $type); 49 | } 50 | }; 51 | -------------------------------------------------------------------------------- /src/Commands/gag.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'gag')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | if (!$bot->botHasPower(41)) { 12 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('missing.power', ['gag']), $type); 13 | } 14 | 15 | if (!isset($message[1]) || empty($message[1])) { 16 | return $bot->network->sendMessageAutoDetection($who, 'Usage: !gag [regname/xatid] [reason]', $type, true); 17 | } 18 | 19 | if (is_numeric($message[1]) && isset($bot->users[$message[1]])) { 20 | $user = $bot->users[$message[1]]; 21 | } else { 22 | foreach ($bot->users as $id => $object) { 23 | if (is_object($object) && strtolower($object->getRegname()) == strtolower($message[1])) { 24 | $user = $object; 25 | break; 26 | } 27 | } 28 | } 29 | 30 | if (isset($user)) { 31 | if ($user->isGagged()) { 32 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('user.already', ['gagged']), $type); 33 | } 34 | 35 | if (isset($message[2])) { 36 | $reason = implode(' ', array_slice($message, 2)); 37 | } 38 | $bot->network->ban($user->getID(), 1, $reason ?? '', 'gg'); 39 | } else { 40 | $bot->network->sendMessageAutoDetection($who, $bot->botlang('user.not.here'), $type); 41 | } 42 | }; 43 | -------------------------------------------------------------------------------- /src/Commands/game.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'game')) { 11 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 12 | } 13 | 14 | if (!$bot->isPremium) { 15 | return $bot->network->sendMessageAutoDetection( 16 | $who, 17 | 'I need to be premium to execute this command. (cry2)', 18 | $type 19 | ); 20 | } 21 | 22 | $list = [ 23 | 'doodlerace' => 60189, 24 | 'matchrace' => 60193, 25 | 'snakerace' => 60195, 26 | 'spacewar' => 60201, 27 | 'hearts' => 60225, 28 | 'switch' => 60239, 29 | 'darts' => 60247, 30 | 'zwhack' => 60257 31 | ]; 32 | 33 | if (!isset($message[1]) || empty($message[1])) { 34 | return $bot->network->sendMessageAutoDetection( 35 | $who, 36 | 'Usage: !game [' . implode(', ', array_keys($list)) . ', bot, start, times, prize, stop, bye]', 37 | $type 38 | ); 39 | } 40 | switch (strtolower($message[1])) { 41 | case 'doodlerace': 42 | case 'matchrace': 43 | case 'snakerace': 44 | case 'spacewar': 45 | case 'hearts': 46 | case 'switch': 47 | case 'darts': 48 | case 'zwhack': 49 | $bot->network->socket->write('x', [ 50 | 'i' => $list[strtolower($message[1])], 51 | 'u' => XatVariables::getXatid(), 52 | 't' => 'j' 53 | ]); 54 | break; 55 | 56 | case 'bot': 57 | DataAPI::set('bot', true); 58 | $bot->network->sendMessage('!bot ' . (!empty($message[2]) ? $message[2] : '')); 59 | break; 60 | 61 | case 'stop': 62 | case 'start': 63 | $bot->network->sendMessage('!' . strtolower($message[1])); 64 | break; 65 | 66 | case 'bye': 67 | case 'exit': 68 | DataAPI::set('bot', false); 69 | $bot->network->sendMessage('!exit'); 70 | break; 71 | 72 | case 'times': 73 | case 'prize': 74 | $message = '!' . strtolower($message[1]) . ' ' . implode(' ', array_slice($message, 2)); 75 | $bot->network->sendMessage($message); 76 | break; 77 | 78 | default: 79 | return $bot->network->sendMessageAutoDetection( 80 | $who, 81 | 'Usage: !game [' . implode(', ', array_keys($list)) . ', bot, start, times, prize, stop, bye]', 82 | $type 83 | ); 84 | break; 85 | } 86 | }; 87 | -------------------------------------------------------------------------------- /src/Commands/gameban.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'gameban')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | if (!isset($message[1]) || empty($message[1]) || !isset($message[2]) || empty($message[2]) || 12 | !isset($message[3]) || empty($message[3]) || !is_numeric($message[3])) { 13 | return $bot->network->sendMessageAutoDetection( 14 | $who, 15 | 'Usage: !gameban [snake/space/match/maze/code/slot] [ID/Regname] [hours] [reason]', 16 | $type, 17 | true 18 | ); 19 | } 20 | 21 | if (is_numeric($message[2]) && isset($bot->users[$message[2]])) { 22 | $user = $bot->users[$message[2]]; 23 | } else { 24 | foreach ($bot->users as $id => $object) { 25 | if (is_object($object) && strtolower($object->getRegname()) == strtolower($message[2])) { 26 | $user = $object; 27 | break; 28 | } 29 | } 30 | } 31 | 32 | if (isset($user)) { 33 | $gameban = $message[1]; 34 | $hours = $message[3]; 35 | 36 | if (isset($message[4])) { 37 | $reason = implode(' ', array_slice($message, 4)); 38 | } 39 | 40 | switch (strtolower($gameban)) { 41 | case 'snake': 42 | case 'snakeban': 43 | $gamebanid = 134; 44 | break; 45 | 46 | case 'space': 47 | case 'spaceban': 48 | $gamebanid = 136; 49 | break; 50 | 51 | case 'match': 52 | case 'matchban': 53 | $gamebanid = 140; 54 | break; 55 | 56 | case 'maze': 57 | case 'mazeban': 58 | $gamebanid = 152; 59 | break; 60 | 61 | case 'code': 62 | case 'codeban': 63 | $gamebanid = 162; 64 | break; 65 | 66 | case 'slot': 67 | case 'slotban': 68 | $gamebanid = 236; 69 | break; 70 | 71 | default: 72 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('gameban.notvalid'), $type); 73 | } 74 | 75 | if (!$bot->botHasPower($gamebanid)) { 76 | return $bot->network->sendMessageAutoDetection( 77 | $who, 78 | $bot->botlang('missing.power', [strtolower($gameban)]), 79 | $type 80 | ); 81 | } 82 | 83 | $bot->network->ban($user->getID(), $hours, $reason ?? '', 'g', $gamebanid); 84 | } else { 85 | $bot->network->sendMessageAutoDetection($who, $bot->botlang('user.not.here'), $type); 86 | } 87 | }; 88 | -------------------------------------------------------------------------------- /src/Commands/gamebanme.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'gamebanme')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | if (!isset($message[1]) || empty($message[1]) || !isset($message[2]) || empty($message[2]) || 12 | !is_numeric($message[2])) { 13 | return $bot->network->sendMessageAutoDetection( 14 | $who, 15 | 'Usage: !gamebanme [snake/space/match/maze/code/slot] [hours]', 16 | $type, 17 | true 18 | ); 19 | } 20 | 21 | $gameban = $message[1]; 22 | $hours = $message[2]; 23 | 24 | switch (strtolower($gameban)) { 25 | case 'snake': 26 | case 'snakeban': 27 | $gamebanid = 134; 28 | break; 29 | 30 | case 'space': 31 | case 'spaceban': 32 | $gamebanid = 136; 33 | break; 34 | 35 | case 'match': 36 | case 'matchban': 37 | $gamebanid = 140; 38 | break; 39 | 40 | case 'maze': 41 | case 'mazeban': 42 | $gamebanid = 152; 43 | break; 44 | 45 | case 'code': 46 | case 'codeban': 47 | $gamebanid = 162; 48 | break; 49 | 50 | case 'slot': 51 | case 'slotban': 52 | $gamebanid = 236; 53 | break; 54 | 55 | default: 56 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('gameban.notvalid'), $type); 57 | break; 58 | } 59 | 60 | if (!$bot->botHasPower($gamebanid)) { 61 | return $bot->network->sendMessageAutoDetection( 62 | $who, 63 | $bot->botlang('missing.power', [strtolower($gameban)]), 64 | $type 65 | ); 66 | } 67 | 68 | $bot->network->ban($who, $hours, 'Requested', 'g', $gamebanid); 69 | }; 70 | -------------------------------------------------------------------------------- /src/Commands/getmain.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'getmain')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | if ($type != 3) { 12 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('cmd.doinpc'), $type); 13 | } 14 | 15 | if (!isset($message[1]) || empty($message[1])) { 16 | return $bot->network->sendPrivateConversation($who, 'Usage: !getmain [chatpassword]'); 17 | } 18 | 19 | $group = $bot->getChatName($bot->data->chatid); 20 | 21 | $POST['GroupName'] = $group; 22 | $POST['password'] = $message[1]; 23 | $POST['SubmitPass'] = 'Submit'; 24 | 25 | $stream = [ 26 | 'http' => [ 27 | 'method' => 'POST', 28 | 'header' => 'Content-Type: application/x-www-form-urlencoded', 29 | 'content' => http_build_query($POST) 30 | ] 31 | ]; 32 | 33 | $res = file_get_contents('https://xat.com/web_gear/chat/editgroup.php', false, stream_context_create($stream)); 34 | 35 | if (strpos($res, '**Wrong password')) { 36 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('cmd.wrongpass'), $type); 37 | } elseif (strpos($res, '**Error. Try again in 10 minutes.**')) { 38 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('cmd.getmain.tryin10'), $type); 39 | } 40 | 41 | $pw = $bot->stribet($res, ''); 42 | if (!is_numeric($pw)) { 43 | return $bot->network->sendPrivateConversation($who, $bot->botlang('cmd.getmain.cantget')); 44 | } 45 | 46 | $bot->data->chatpw = $pw; 47 | $bot->data->save(); 48 | $bot->network->sendPrivateConversation($who, $bot->botlang('cmd.getmain.gotmain')); 49 | $bot->refresh(); 50 | }; 51 | -------------------------------------------------------------------------------- /src/Commands/guestself.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'guestself')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | if (!$bot->botHasPower(32)) { 12 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('missing.power', ['guestself']), $type); 13 | } 14 | 15 | $bot->network->sendMessage('/g'); 16 | $bot->data->chatpw = '123'; 17 | $bot->data->save(); 18 | $bot->network->sendMessageAutoDetection($who, $bot->botlang('cmd.guestself'), $type, true); 19 | }; 20 | -------------------------------------------------------------------------------- /src/Commands/handlecustomcommands.php: -------------------------------------------------------------------------------- 1 | customcommands)) { 13 | foreach ($bot->customcommands as $cc) { 14 | if ($customcommand == $cc['command']) { 15 | $bool = true; 16 | if ($bot->flagToRank($who) < $cc['level']) { 17 | if (isset($bot->stafflist[$who]) && $cc['level'] <= $bot->stafflist[$who]) { 18 | } else { 19 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 20 | } 21 | } 22 | 23 | $latestPower = XatVariables::getLastPower(); 24 | $replace = [ 25 | '{name}' => $bot->users[$who]->getNick(), 26 | '{status}' => $bot->users[$who]->getStatus(), 27 | '{regname}' => $bot->users[$who]->getRegname() ?? $bot->users[$who]->getID(), 28 | '{id}' => $bot->users[$who]->getID(), 29 | '{users}' => sizeof($bot->users), 30 | '{online}' => sizeof($bot->users), 31 | '{cmdcode}' => $bot->data->customcommand, 32 | '{command}' => $bot->data->customcommand, 33 | '{cc}' => $bot->data->customcommand, 34 | '{randomuser}' => Utilities::arrayRandomAssoc($bot->users, true)[0]->getRegname(), 35 | '{randomid}' => Utilities::arrayRandomAssoc($bot->users, true)[0]->getID(), 36 | '{randomname}' => Utilities::arrayRandomAssoc($bot->users, true)[0]->getNick(), 37 | '{randomnumber}' => rand(0, 1000), 38 | '{latestpower}' => ucfirst($latestPower['power']['name']), 39 | '{latestpowerid}' => $latestPower['id'], 40 | '{latestpowerstoreprice}' => $latestPower['power']['storeCost'], 41 | '{latestpowertradeprice}' => ($latestPower['power']['minCost']+$latestPower['power']['maxCost'])/2, 42 | '{latestpowerstatus}' => ($latestPower['power']['isNew'] ? 43 | ($latestPower['power']['isLimited'] ? 'LIMITED' : 'UNLIMITED') : 44 | 'UNRELEASED'), 45 | ]; 46 | 47 | $string = $cc['response']; 48 | foreach ($replace as $key => $value) { 49 | $string = str_replace($key, $value, $string); 50 | } 51 | 52 | return $bot->network->sendMessageAutoDetection($who, $string, $type); 53 | } 54 | } 55 | } 56 | 57 | if (!$bool) { 58 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('cmd.doesnotexist'), $type); 59 | } 60 | }; 61 | -------------------------------------------------------------------------------- /src/Commands/hangman.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'hangman')) { 11 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 12 | } 13 | 14 | DataAPI::set('hangman_' . $who, new XatHangman($bot, 'arachnid', $who)); 15 | $bot->network->sendMessageAutoDetection($who, 'Hangman has started!', $type, true); 16 | }; 17 | -------------------------------------------------------------------------------- /src/Commands/hash.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'hash')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | if (!isset($message[1]) || empty($message[1]) || !isset($message[2]) || empty($message[2])) { 12 | return $bot->network->sendMessageAutoDetection($who, 'Usage: !hash [algorithm] [text]', $type, true); 13 | } 14 | 15 | if (in_array(strtolower($message[1]), hash_algos())) { 16 | $bot->network->sendMessageAutoDetection($who, hash(strtolower($message[1]), $message[2]), $type, true); 17 | } 18 | }; 19 | -------------------------------------------------------------------------------- /src/Commands/hasmost.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'hasmost')) { 10 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 11 | } 12 | 13 | if (empty($message[1])) { 14 | return $bot->network->sendMessageAutoDetection($who, 'Usage !hasmost [power]', $type); 15 | } 16 | 17 | $powers = XatVariables::getPowers(); 18 | $powerName = strtolower($message[1]); 19 | $exists = false; 20 | 21 | foreach ($powers as $id => $array) { 22 | if ($array['name'] == $powerName || $id == $powerName) { 23 | $exists = true; 24 | break; 25 | } 26 | } 27 | 28 | if (!$exists) { 29 | $bot->network->sendMessageAutoDetection($who, $bot->botlang('cmd.powernotexist'), $type); 30 | return; 31 | } 32 | 33 | return $bot->network->sendMessageAutoDetection( 34 | $who, 35 | XatVariables::getConfig()['website_url'] . '/panel/hasmost/' . $id, 36 | $type 37 | ); 38 | }; 39 | -------------------------------------------------------------------------------- /src/Commands/horoscope.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'horoscope')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | $date = (int)gmdate('j'); 12 | 13 | $xor = 0; 14 | for ($i = 0; $i < $date; $i++) { 15 | $xor = ((($xor << 5) ^ $i) & 0xFF) ^ ($xor >> (32 - 5)); 16 | } 17 | 18 | for ($i = 0; $i < 4; $i++) { 19 | $xor ^= $who >> ($i * 8) & 0xFF; 20 | } 21 | 22 | $love = round(((($who >> 0x00) & 0xFF) ^ $xor) / 0xFF * 100); 23 | $health = round(((($who >> 0x08) & 0xFF) ^ $xor) / 0xFF * 100); 24 | $luck = round(((($who >> 0x10) & 0xFF) ^ $xor) / 0xFF * 100); 25 | $money = round(((($who >> 0x18) & 0xFF) ^ $xor) / 0xFF * 100); 26 | 27 | return $bot->network->sendMessageAutoDetection( 28 | $who, 29 | $bot->botlang('cmd.horoscope', [$love, $health, $luck, $money]), 30 | $type 31 | ); 32 | }; 33 | -------------------------------------------------------------------------------- /src/Commands/hush.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'hush')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | if (!$bot->botHasPower(51)) { 12 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('missing.power', ['hush']), $type); 13 | } 14 | 15 | if (!isset($message[1]) || empty($message[1]) || !isset($message[2]) || empty($message[2]) || 16 | !is_numeric($message[2])) { 17 | return $bot->network->sendMessageAutoDetection( 18 | $who, 19 | 'Usage: !hush [guest/member/mod/owner] [seconds] [reason]', 20 | $type, 21 | true 22 | ); 23 | } 24 | 25 | $rank = $message[1]; 26 | $seconds = $message[2]; 27 | 28 | if (isset($message[3])) { 29 | $reason = implode(' ', array_slice($message, 3)); 30 | } 31 | 32 | switch ($rank) { 33 | case 'guest': 34 | $rank = 'g'; 35 | break; 36 | case 'member': 37 | $rank = 'm'; 38 | break; 39 | case 'mod': 40 | $rank = 'd'; 41 | break; 42 | case 'owner': 43 | $rank = 'o'; 44 | break; 45 | default: 46 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('cmd.notvalidrank'), $type); 47 | } 48 | 49 | $bot->network->sendMessage('/h' . $rank . $seconds . ' ' . $reason); 50 | }; 51 | -------------------------------------------------------------------------------- /src/Commands/joke.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'joke')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | $stream = stream_context_create(['http'=> ['timeout' => 1]]); 12 | $page = file_get_contents('http://www.jokesclean.com/OneLiner/Random/', false, $stream); 13 | if (!$page) { 14 | return $bot->network->sendMessageAutoDetection( 15 | $who, 16 | $bot->botlang('cmd.joke.errorgrab'), 17 | $type 18 | ); 19 | } 20 | 21 | $joke = explode('
', $page)[1]; 22 | $joke = explode('
', $joke)[0]; 23 | $bot->network->sendMessageAutoDetection($who, $joke, $type); 24 | }; 25 | -------------------------------------------------------------------------------- /src/Commands/kick.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'kick')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | if (empty($message[1]) || !isset($message[1])) { 12 | return $bot->network->sendMessageAutoDetection($who, 'Usage: !kick [regname/xatid] [reason]', $type, true); 13 | } 14 | 15 | if (is_numeric($message[1]) && isset($bot->users[$message[1]])) { 16 | $user = $bot->users[$message[1]]; 17 | } else { 18 | foreach ($bot->users as $id => $object) { 19 | if (is_object($object) && strtolower($object->getRegname()) == strtolower($message[1])) { 20 | $user = $object; 21 | break; 22 | } 23 | } 24 | } 25 | 26 | if (isset($user)) { 27 | if (isset($message[2])) { 28 | $reason = implode(' ', array_slice($message, 2)); 29 | } 30 | 31 | $bot->network->kick($user->getID(), $reason ?? 'No reason'); 32 | } else { 33 | $bot->network->sendMessageAutoDetection($who, $bot->botlang('user.not.here'), $type); 34 | } 35 | }; 36 | -------------------------------------------------------------------------------- /src/Commands/kickall.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'kickall')) { 10 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 11 | } 12 | 13 | if (!$bot->botHasPower(244)) { 14 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('missing.power', ['kickall']), $type); 15 | } 16 | 17 | if (empty($message[1])) { 18 | return $bot->network->sendMessageAutoDetection( 19 | $who, 20 | 'Usage: !kickall [all/register/toon/banned/raid]', 21 | $type, 22 | true 23 | ); 24 | } 25 | 26 | switch (strtolower($message[1])) { 27 | case 'all': 28 | $bot->network->socket->write('m', ['t' => '/ka', 'u' => XatVariables::getXatid()]); 29 | break; 30 | 31 | case 'register': 32 | $bot->network->socket->write('m', ['t' => '/kar', 'u' => XatVariables::getXatid()]); 33 | break; 34 | 35 | case 'toon': 36 | $bot->network->socket->write('m', ['t' => '/kap', 'u' => XatVariables::getXatid()]); 37 | break; 38 | 39 | case 'banned': 40 | $bot->network->socket->write('m', ['t' => '/kab', 'u' => XatVariables::getXatid()]); 41 | break; 42 | 43 | case 'raid': 44 | $bot->network->socket->write('m', ['t' => '/p', 'u' => XatVariables::getXatid()]); 45 | $bot->network->socket->write('m', ['t' => '/kap', 'u' => XatVariables::getXatid()]); 46 | break; 47 | 48 | default: 49 | return $bot->network->sendMessageAutoDetection( 50 | $who, 51 | 'Usage: !kickall [all/register/toon/banned/raid]', 52 | $type, 53 | true 54 | ); 55 | } 56 | }; 57 | -------------------------------------------------------------------------------- /src/Commands/lastseen.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'lastseen')) { 10 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 11 | } 12 | 13 | if (empty($message[1])) { 14 | return $bot->network->sendMessageAutoDetection($who, 'Usage !lastseen [regname/xatid]', $type); 15 | } 16 | 17 | $info = null; 18 | if (is_numeric($message[1])) { 19 | $message[1] = (int)$message[1]; 20 | 21 | if ($message[1] == 9223372036854775807) { 22 | return $bot->network->sendMessageAutoDetection($who, 'I am in a 64-bit environment.', $type, true); 23 | } 24 | 25 | $info = Capsule::table('userinfo') 26 | ->where('xatid', $message[1]) 27 | ->orderBy('updated_at', 'desc') 28 | ->get() 29 | ->toArray(); 30 | } else { 31 | $info = Capsule::table('userinfo') 32 | ->whereRaw('LOWER(regname) = ?', [strtolower($message[1])]) 33 | ->orderBy('updated_at', 'desc') 34 | ->get() 35 | ->toArray(); 36 | } 37 | 38 | if (!empty($info)) { 39 | $info = $info[0]; 40 | if ($info->optout !== true) { 41 | return $bot->network->sendMessageAutoDetection( 42 | $who, 43 | $bot->botlang('cmd.lastseen.was', [ 44 | $info->regname, 45 | $info->chatname, 46 | date_format(new DateTime($info->updated_at), 'l, d M Y H:i:s T') 47 | ]), 48 | $type 49 | ); 50 | } else { 51 | return $bot->network->sendMessageAutoDetection( 52 | $who, 53 | $bot->botlang('user.optoutuserinfo', [$info->regname]), 54 | $type 55 | ); 56 | } 57 | } else { 58 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('user.notindatabase'), $type); 59 | } 60 | }; 61 | -------------------------------------------------------------------------------- /src/Commands/latestpower.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'latestpower')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | $lastPowerArray = xatbot\Bot\XatVariables::getLastPower(); 12 | $latestId = $lastPowerArray['id']; 13 | $power = $lastPowerArray['power']; 14 | $status = 'UNRELEASED'; 15 | 16 | if ($power['isNew']) { 17 | $status = $power['isLimited'] ? 'LIMITED' : 'UNLIMITED'; 18 | } 19 | 20 | $implode = [ 21 | ucfirst($power['name']) . '(ID: '. $latestId . ')', 22 | 'Pawns: ' . (isset($power['pawns']) ? implode(', ', array_unique($power['pawns'])) : 'none'), 23 | 'Smilies: ' . implode(', ', $power['smilies']), 24 | 'Store price: ' . (isset($power['storeCost']) ? $power['storeCost'] . ' xats' : 'Not yet priced'), 25 | 'Status: ' . $status 26 | ]; 27 | 28 | $bot->network->sendMessageAutoDetection($who, implode(' | ', $implode), $type); 29 | }; 30 | -------------------------------------------------------------------------------- /src/Commands/leastactive.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'leastactive')) { 10 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 11 | } 12 | 13 | $least = ['user' => null, 'time' => 0]; 14 | 15 | foreach ($bot->users as $user) { 16 | if (!is_object($user) || !DataAPI::isSetVariable('active_' . $user->getID())) { 17 | continue; 18 | } 19 | 20 | $userTime = DataAPI::get('active_' . $user->getID()); 21 | 22 | if ($least['time'] == 0 || $userTime > $least['time']) { 23 | $least = ['user' => $user, 'time' => $userTime]; 24 | } 25 | } 26 | 27 | $displayName = $least['user']->isRegistered() ? 28 | $least['user']->getRegname() . '(' . $least['user']->getID() . ')' : 29 | $least['user']->getID(); 30 | 31 | $bot->network->sendMessageAutoDetection( 32 | $who, 33 | $bot->botlang('cmd.leastactive', [$displayName, $bot->secondsToTime(time() - $userTime)]), 34 | $type 35 | ); 36 | }; 37 | -------------------------------------------------------------------------------- /src/Commands/listsmilies.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'listsmilies')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | if (!isset($message[1]) || empty($message[1])) { 12 | return $bot->network->sendMessageAutoDetection($who, 'Usage: !listsmilies [power/latest]', $type, true); 13 | } 14 | 15 | $powers = xatbot\Bot\XatVariables::getPowers(); 16 | 17 | if (strtolower($message[1]) == 'latest') { 18 | $message[1] = end($powers)['name']; 19 | } 20 | 21 | $message[1] = str_replace(['(', ')'], '', $message[1]); 22 | $exist = false; 23 | foreach ($powers as $id => $array) { 24 | if ($array['name'] == strtolower($message[1]) || $id == $message[1]) { 25 | $exist = true; 26 | break; 27 | } 28 | } 29 | 30 | if ($exist) { 31 | if (!empty($array['smilies'])) { 32 | $topsh = $array['smilies']; 33 | 34 | if (count($topsh) > 10) { 35 | if (isset($message[2]) && strtolower($message[2]) == 'all') { 36 | $nbMessages = ceil(sizeof($topsh) / 10); 37 | 38 | if (sizeof($bot->packetsinqueue) > 0) { 39 | $bot->packetsinqueue[max(array_keys($bot->packetsinqueue)) + 1000] = [ 40 | 'who' => $who, 41 | 'message' => '('.implode('#)(', array_slice($topsh, 0, 10)).'#)', 42 | 'type' => $type 43 | ]; 44 | } else { 45 | $bot->packetsinqueue[round(microtime(true) * 1000) + 1000] = [ 46 | 'who' => $who, 47 | 'message' => '('.implode('#)(', array_slice($topsh, 0, 10)).'#)', 48 | 'type' => $type 49 | ]; 50 | } 51 | 52 | for ($i = 10; $i < ($nbMessages * 10); $i += 10) { 53 | if (sizeof($bot->packetsinqueue) > 0) { 54 | $bot->packetsinqueue[max(array_keys($bot->packetsinqueue)) + 1000] = [ 55 | 'who' => $who, 56 | 'message' => '('.implode('#)(', array_slice($topsh, $i, 10)).'#)', 57 | 'type' => $type 58 | ]; 59 | } else { 60 | $bot->packetsinqueue[round(microtime(true) * 1000) + 1000] = [ 61 | 'who' => $who, 62 | 'message' => '('.implode('#)(', array_slice($topsh, $i, 10)).'#)', 63 | 'type' => $type 64 | ]; 65 | } 66 | } 67 | return; 68 | } else { 69 | $implode = $bot->botHasPower($id) ? 70 | '('.implode('#)(', array_slice($topsh, 0, 10)).'#)' : 71 | implode(' ', array_slice($topsh, 0, 10)); 72 | $implode .= implode(' ', array_slice($topsh, 10)); 73 | } 74 | } else { 75 | $implode = $bot->botHasPower($id) ? '(' . implode('#)(', $topsh) . '#)' : implode(' ', $topsh); 76 | } 77 | 78 | $bot->network->sendMessageAutoDetection( 79 | $who, 80 | ucfirst($array['name']) . '\'s ' . count($topsh) . ' smilies: ' . $implode . '.', 81 | $type 82 | ); 83 | } else { 84 | $bot->network->sendMessageAutoDetection( 85 | $who, 86 | $bot->botlang('cmd.listsmilies.nosmilies', [ucfirst($array['name'])]), 87 | $type 88 | ); 89 | } 90 | } else { 91 | $bot->network->sendMessageAutoDetection($who, $bot->botlang('cmd.listsmilies.notpower', [$message[1]]), $type); 92 | } 93 | }; 94 | -------------------------------------------------------------------------------- /src/Commands/logs.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'logs')) { 10 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 11 | } 12 | 13 | if (!isset($message[1]) || empty($message[1]) || !is_numeric($message[1])) { 14 | return $bot->network->sendMessageAutoDetection( 15 | $who, 16 | 'Usage: !logs [amount]', 17 | $type 18 | ); 19 | } 20 | 21 | $amount = (int) $message[1]; 22 | $logsLink = XatVariables::getConfig()['website_url'] . '/panel/bot/logs/' . $bot->data->id . '/' . $amount; 23 | 24 | return $bot->network->sendMessageAutoDetection( 25 | $who, 26 | $bot->botlang('cmd.logs.seenhere', [$logsLink]), 27 | $type 28 | ); 29 | }; 30 | -------------------------------------------------------------------------------- /src/Commands/love.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'love')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | $l = 0; 12 | $lover[0] = null; 13 | $lover[1] = null; 14 | 15 | for ($j = 1; $j <= (sizeof($message) - 1); $j++) { 16 | if ($message[$j] == "&") { 17 | $l++; 18 | } else { 19 | $lover[$l] .= $message[$j] . ' '; 20 | } 21 | } 22 | 23 | $lover[0] = trim($lover[0]); 24 | $lover[1] = trim($lover[1]); 25 | 26 | if (!empty($lover[0]) and !empty($lover[1])) { 27 | $one = strtolower($lover[0]); 28 | $two = strtolower($lover[1]); 29 | 30 | $love = 16; 31 | 32 | for ($j = 0; $j < sizeof($lover); $j++) { 33 | for ($k = 0; $k < strlen($lover[$j]); $k++) { 34 | $love += ord(strtoupper($lover[$j][$k])); 35 | } 36 | } 37 | 38 | $love = $love % 102; 39 | 40 | $reg = $bot->users[$who]->getRegname(); 41 | if (!empty($reg)) { 42 | $who = $reg; 43 | } 44 | 45 | if ($love == 101) { 46 | $bot->network->sendMessageAutoDetection( 47 | $who, 48 | $bot->botLang('cmd.love.100percent', [$who, $lover[0], $lover[1]]), 49 | $type 50 | ); 51 | } else { 52 | $bot->network->sendMessageAutoDetection( 53 | $who, 54 | $bot->botLang('cmd.love.result', [$who, $lover[0], $lover[1], $love]), 55 | $type 56 | ); 57 | } 58 | } else { 59 | $bot->network->sendMessageAutoDetection($who, 'Usage: !love [lover1] & [lover2]', $type); 60 | } 61 | }; 62 | -------------------------------------------------------------------------------- /src/Commands/modproof.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'modproof')) { 10 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 11 | } 12 | 13 | if (!DataAPI::isSetVariable('modproof')) { 14 | return $bot->network->sendMessageAutoDetection($who, 'I have nothing to show!', $type, true); 15 | } else { 16 | return $bot->network->sendMessageAutoDetection($who, DataAPI::get('modproof'), $type, true); 17 | } 18 | }; 19 | -------------------------------------------------------------------------------- /src/Commands/mostactive.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'mostactive')) { 10 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 11 | } 12 | 13 | $most = ['user' => null, 'time' => 0]; 14 | 15 | foreach ($bot->users as $user) { 16 | if (!is_object($user) || !DataAPI::isSetVariable('active_' . $user->getID())) { 17 | continue; 18 | } 19 | 20 | $userTime = DataAPI::get('active_' . $user->getID()); 21 | 22 | if ($most['time'] == 0 || $userTime < $most['time']) { 23 | $most = ['user' => $user, 'time' => $userTime]; 24 | } 25 | } 26 | 27 | $displayName = $most['user']->isRegistered() ? 28 | $most['user']->getRegname() . '(' . $most['user']->getID() . ')' : 29 | $most['user']->getID(); 30 | 31 | $bot->network->sendMessageAutoDetection( 32 | $who, 33 | $bot->botlang('cmd.mostactive', [$displayName, $bot->secondsToTime(time() - $userTime)]), 34 | $type 35 | ); 36 | }; 37 | -------------------------------------------------------------------------------- /src/Commands/mute.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'mute')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | if (!$bot->botHasPower(46)) { 12 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('missing.power', ['mute']), $type); 13 | } 14 | 15 | if (!isset($message[1]) || empty($message[1])) { 16 | return $bot->network->sendMessageAutoDetection($who, 'Usage: !mute [regname/xatid] [reason]', $type, true); 17 | } 18 | 19 | if (is_numeric($message[1]) && isset($bot->users[$message[1]])) { 20 | $user = $bot->users[$message[1]]; 21 | } else { 22 | foreach ($bot->users as $id => $object) { 23 | if (is_object($object)) { 24 | if (strtolower($object->getRegname()) == strtolower($message[1])) { 25 | $user = $object; 26 | break; 27 | } 28 | } 29 | } 30 | } 31 | 32 | if (isset($user)) { 33 | if (isset($message[2])) { 34 | $reason = implode(' ', array_slice($message, 2)); 35 | } 36 | 37 | $bot->network->ban($user->getID(), 1, $reason ?? '', 'gm'); 38 | } else { 39 | $bot->network->sendMessageAutoDetection($who, $bot->botlang('user.not.here'), $type); 40 | } 41 | }; 42 | -------------------------------------------------------------------------------- /src/Commands/naughtystep.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'naughtystep')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | if (!$bot->botHasPower(284)) { 12 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('missing.power', ['naughtystep']), $type); 13 | } 14 | 15 | if (!isset($message[1]) || empty($message[1])) { 16 | return $bot->network->sendMessageAutoDetection( 17 | $who, 18 | 'Usage: !naughtystep [regname/xatid] [reason]', 19 | $type, 20 | true 21 | ); 22 | } 23 | 24 | if (is_numeric($message[1]) && isset($bot->users[$message[1]])) { 25 | $user = $bot->users[$message[1]]; 26 | } else { 27 | foreach ($bot->users as $id => $object) { 28 | if (is_object($object)) { 29 | if (strtolower($object->getRegname()) == strtolower($message[1])) { 30 | $user = $object; 31 | break; 32 | } 33 | } 34 | } 35 | } 36 | 37 | if (isset($user)) { 38 | if ($user->isNaughty()) { 39 | return $bot->network->sendMessageAutoDetection( 40 | $who, 41 | $bot->botlang('user.already', ['naughtystepped']), 42 | $type 43 | ); 44 | } 45 | 46 | if (isset($message[2])) { 47 | $reason = implode(' ', array_slice($message, 2)); 48 | } 49 | 50 | $bot->network->ban($user->getID(), 0, $reason ?? '', 'gn'); 51 | } else { 52 | $bot->network->sendMessageAutoDetection($who, $bot->botlang('user.not.here'), $type); 53 | } 54 | }; 55 | -------------------------------------------------------------------------------- /src/Commands/online.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'online')) { 10 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 11 | } 12 | 13 | if (empty($message[1]) || !isset($message[1])) { 14 | return $bot->network->sendMessageAutoDetection( 15 | $who, 16 | 'Usage: !online [regname/xatid/volunteers/chatstaff]', 17 | $type, 18 | true 19 | ); 20 | } 21 | 22 | if (strtolower($message[1]) == 'xat' || $message[1] == '42') { 23 | return $bot->network->sendMessageAutoDetection( 24 | $who, 25 | $bot->botlang('cmd.online.42'), 26 | $type 27 | ); 28 | } 29 | 30 | if (!is_numeric($message[1]) && !in_array(strtolower($message[1]), ['volunteers', 'chatstaff'])) { 31 | $ctx = stream_context_create(['http' => ['timeout' => 1]]); 32 | $fgc = file_get_contents('http://xat.me/x?name=' . $message[1], false, $ctx); 33 | $res = (!empty($fgc) ? $fgc : 0); 34 | } 35 | 36 | if (isset($res) && $res != 0) { 37 | $bot->network->sendFriendList('10101 ' . $res); 38 | DataAPI::set('online_command', ['who' => $who, 'type' => $type]); 39 | return; 40 | } elseif (!isset($res)) { 41 | $message[1] = strtolower($message[1]); 42 | if ($message[1] == 'volunteers') { 43 | $volunteers = xatbot\Bot\XatVariables::getVolunteers(); 44 | 45 | $ids = []; 46 | for ($i = 0; $i < sizeof($volunteers); $i++) { 47 | $ids[] = $volunteers[$i]['xatid']; 48 | } 49 | 50 | $string = implode(' ', $ids); 51 | $bot->network->sendFriendList('10101 ' . $string); 52 | DataAPI::set('online_command', ['who' => $who, 'type' => $type]); 53 | return; 54 | } elseif ($message[1] == 'chatstaff') { 55 | $ids = []; 56 | if (sizeof($bot->stafflist) == 0) { 57 | return $bot->network->sendMessageAutoDetection( 58 | $who, 59 | 'There is no staff added on your bot.', 60 | $type 61 | ); 62 | } 63 | foreach ($bot->stafflist as $id => $data) { 64 | $ids[] = $id; 65 | } 66 | $string = implode(' ', $ids); 67 | $bot->network->sendFriendList('10101 ' . $string); 68 | DataAPI::set('online_command', ['who' => $who, 'type' => $type]); 69 | return; 70 | } else { 71 | $bot->network->sendFriendList('10101 ' . $message[1]); 72 | DataAPI::set('online_command', ['who' => $who, 'type' => $type]); 73 | return; 74 | } 75 | } 76 | }; 77 | -------------------------------------------------------------------------------- /src/Commands/pc.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'pc')) { 7 | return $bot->network->sendMessageAutoDetection( 8 | $who, 9 | $bot->botlang('not.enough.rank'), 10 | $type 11 | ); 12 | } 13 | 14 | if (empty($message[1]) || empty($message[2])) { 15 | return $bot->network->sendMessageAutoDetection( 16 | $who, 17 | 'Usage: !pc [regname/xatid] [message]', 18 | $type 19 | ); 20 | } 21 | 22 | if ((is_numeric($message[1])) && (isset($bot->users[$message[1]]))) { 23 | $user = $bot->users[$message[1]]; 24 | } else { 25 | foreach ($bot->users as $id => $object) { 26 | if (is_object($object)) { 27 | if (strtolower($object->getRegname()) == strtolower($message[1])) { 28 | $user = $object; 29 | break; 30 | } 31 | } 32 | } 33 | } 34 | 35 | if (!(isset($user))) { 36 | return $bot->network->sendMessageAutoDetection( 37 | $who, 38 | $bot->botlang('user.not.here'), 39 | $type 40 | ); 41 | } 42 | 43 | $message = implode(' ', array_slice($message, 2)); 44 | 45 | $bot->network->sendPrivateConversation( 46 | $user->getID(), 47 | $message ?? 'Hello' 48 | ); 49 | 50 | $bot->network->sendMessageAutoDetection($who, $bot->botlang('cmd.pc.gotpc'), $type); 51 | }; 52 | -------------------------------------------------------------------------------- /src/Commands/pm.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'pm')) { 7 | return $bot->network->sendMessageAutoDetection( 8 | $who, 9 | $bot->botlang('not.enough.rank'), 10 | $type 11 | ); 12 | } 13 | 14 | if (empty($message[1]) || empty($message[2])) { 15 | return $bot->network->sendMessageAutoDetection( 16 | $who, 17 | 'Usage: !pm [regname/xatid] [message]', 18 | $type 19 | ); 20 | } 21 | 22 | if ((is_numeric($message[1])) && (isset($bot->users[$message[1]]))) { 23 | $user = $bot->users[$message[1]]; 24 | } else { 25 | foreach ($bot->users as $id => $object) { 26 | if (is_object($object)) { 27 | if (strtolower($object->getRegname()) == strtolower($message[1])) { 28 | $user = $object; 29 | break; 30 | } 31 | } 32 | } 33 | } 34 | 35 | if (!(isset($user))) { 36 | return $bot->network->sendMessageAutoDetection( 37 | $who, 38 | $bot->botlang('user.not.here'), 39 | $type 40 | ); 41 | } 42 | 43 | $message = implode(' ', array_slice($message, 2)); 44 | 45 | $bot->network->sendPrivateMessage( 46 | $user->getID(), 47 | $message ?? 'Hello' 48 | ); 49 | 50 | $bot->network->sendMessageAutoDetection($who, $bot->botlang('cmd.pm.gotpm'), $type); 51 | }; 52 | -------------------------------------------------------------------------------- /src/Commands/pool.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'pool')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | if (!isset($message[1]) || empty($message[1])) { 12 | return $bot->network->sendMessageAutoDetection($who, 'Usage: !pool [main/staff/banpool]', $type); 13 | } 14 | 15 | switch ($message[1]) { 16 | case 'main': 17 | $pool = 0; 18 | break; 19 | 20 | case 'staff': 21 | $pool = 1; 22 | break; 23 | 24 | case 'banpool': 25 | $pool = 2; 26 | break; 27 | 28 | default: 29 | return $bot->network->sendMessageAutoDetection($who, 'Usage: !pool [main/staff/banpool]', $type); 30 | break; 31 | } 32 | 33 | $bot->network->sendMessageAutoDetection($who, $bot->botLang('cmd.pool.movingto', [$message[1]]), $type); 34 | $bot->network->socket->write('w' . $pool); 35 | }; 36 | -------------------------------------------------------------------------------- /src/Commands/poorest.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'poorest')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | $powers = xatbot\Bot\XatVariables::getPowers(); 12 | 13 | foreach ($bot->users as $user) { 14 | if (!is_object($user)) { 15 | continue; 16 | } 17 | 18 | if (!$user->hasDays()) { 19 | continue; 20 | } 21 | 22 | $doubles = $user->getDoubles(); 23 | $storeprice = 0; 24 | $minprice = 0; 25 | $maxprice = 0; 26 | $count = 0; 27 | 28 | if (isset($doubles)) { 29 | $pO = explode('|', $doubles); 30 | 31 | for ($i = 0; $i < sizeof($pO); $i++) { 32 | $pos = strpos($pO[$i], '='); 33 | if ($pos !== false) { 34 | $id = (int)substr($pO[$i], 0, $pos); 35 | $ammount = (int)substr($pO[$i], $pos + 1); 36 | } else { 37 | $id = (int)$pO[$i]; 38 | $ammount = 1; 39 | } 40 | 41 | if ($id == 0) { 42 | continue; 43 | } 44 | 45 | if (isset($powers[$id]['storeCost'])) { 46 | if (!$powers[$id]['isLimited']) { 47 | $storeprice += $powers[$id]['storeCost'] * $ammount; 48 | } 49 | } 50 | 51 | $minprice += $powers[$id]['minCost'] * $ammount; 52 | $maxprice += $powers[$id]['maxCost'] * $ammount; 53 | $count += $ammount; 54 | } 55 | } 56 | 57 | foreach ($powers as $id => $array) { 58 | if ($id == 95) { 59 | continue; 60 | } 61 | 62 | if ($user->hasPower($id)) { 63 | if (isset($array['storeCost'])) { 64 | if (!$array['isLimited']) { 65 | $storeprice += $array['storeCost']; 66 | } 67 | } 68 | 69 | $minprice += $array['minCost']; 70 | $maxprice += $array['maxCost']; 71 | $count++; 72 | } 73 | } 74 | 75 | $res[] = ['max' => $maxprice, 'min' => $minprice, 'user' => $user]; 76 | sort($res); 77 | } 78 | 79 | if (empty($res)) { 80 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('users.nodays'), $type); 81 | } 82 | 83 | $bot->network->sendMessageAutoDetection( 84 | $who, 85 | $bot->botlang('cmd.poorest', [ 86 | $res[0]['user']->getRegname(), 87 | $res[0]['user']->getID() 88 | ]), 89 | $type 90 | ); 91 | }; 92 | -------------------------------------------------------------------------------- /src/Commands/premium.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'premium')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | if (!isset($message[1]) || empty($message[1])) { 12 | return $bot->network->sendMessageAutoDetection($who, 'Usage: !premium [time/freeze/unfreeze]', $type); 13 | } 14 | 15 | switch ($message[1]) { 16 | case 'time': 17 | if ($bot->isPremium) { 18 | $bot->network->sendMessageAutoDetection( 19 | $who, 20 | $bot->botlang('cmd.premium.ispremiumfor', [$bot->sec2hms($bot->data->premium - time())]), 21 | $type 22 | ); 23 | } elseif ($bot->data->premiumfreeze > 1) { 24 | $bot->network->sendMessageAutoDetection($who, $bot->botlang('cmd.premium.isfrozen'), $type); 25 | } else { 26 | $bot->network->sendMessageAutoDetection($who, $bot->botlang('cmd.premium.notpremium'), $type); 27 | } 28 | break; 29 | 30 | case 'freeze': 31 | if ($bot->data->premium < time()) { 32 | $bot->network->sendMessageAutoDetection($who, $bot->botlang('cmd.premium.notpremium'), $type); 33 | } elseif ($bot->data->premiumfreeze > 1) { 34 | $bot->network->sendMessageAutoDetection($who, $bot->botlang('cmd.premium.alreadyfrozen'), $type); 35 | } else { 36 | $bot->data->premiumfreeze = $bot->data->premium - time(); 37 | $bot->data->save(); 38 | $bot->refresh(); 39 | $bot->network->sendMessageAutoDetection($who, $bot->botLang('cmd.premium.nowfrozen'), $type); 40 | } 41 | break; 42 | 43 | case 'unfreeze': 44 | if ($bot->data->premiumfreeze > 1) { 45 | $bot->data->premium = time() + $bot->data->premiumfreeze; 46 | $bot->data->premiumfreeze = 1; 47 | $bot->data->save(); 48 | $bot->refresh(); 49 | $bot->network->sendMessageAutoDetection($who, $bot->botlang('cmd.premium.nowunfrozen'), $type); 50 | } else { 51 | $bot->network->sendMessageAutoDetection($who, $bot->botlang('cmd.premium.notfrozen'), $type); 52 | } 53 | break; 54 | 55 | default: 56 | $bot->network->sendMessageAutoDetection($who, 'Usage: !premium [time/freeze/unfreeze]', $type); 57 | break; 58 | } 59 | }; 60 | -------------------------------------------------------------------------------- /src/Commands/price.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'price')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | if (!isset($message[1]) || empty($message[1])) { 12 | return $bot->network->sendMessageAutoDetection($who, 'Usage: !price [power]', $type, true); 13 | } 14 | 15 | $powers = xatbot\Bot\XatVariables::getPowers(); 16 | 17 | if (isset($message[2])) { 18 | $minCost = $maxCost = 0; 19 | for ($i = 1; $i < sizeof($message); $i++) { 20 | $match = $bot->network->findPowerMatch($message[$i]); 21 | if (isset($match[0])) { 22 | $powerID = $match[0]; 23 | $minCost += $powers[$powerID]['minCost']; 24 | $maxCost += $powers[$powerID]['maxCost']; 25 | } 26 | } 27 | return $bot->network->sendMessageAutoDetection( 28 | $who, 29 | $bot->botlang('cmd.price.thosepowers', [ 30 | number_format($minCost), 31 | number_format($maxCost), 32 | number_format(round($minCost / 13.5)), 33 | number_format(round($maxCost / 13.5)) 34 | ]), 35 | $type 36 | ); 37 | } 38 | 39 | if (strtolower($message[1]) == 'latest') { 40 | $message[1] = end($powers)['name']; 41 | } 42 | 43 | $match = $bot->network->findPowerMatch($message[1]); 44 | 45 | $powerID = $match[0]; 46 | 47 | if (!$powerID) { 48 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('cmd.powernotexist'), $type); 49 | } 50 | 51 | if ($powerID == 95) { 52 | foreach ($powers as $id => $array) { 53 | $powers[$powerID]['minCost'] += $array['minCost']; 54 | $powers[$powerID]['maxCost'] += $array['maxCost']; 55 | } 56 | } 57 | 58 | if ($powers[$powerID]['minCost'] == 0 || $powers[$powerID]['maxCost'] == 0) { 59 | return $bot->network->sendMessageAutoDetection( 60 | $who, 61 | $bot->botlang('cmd.price.notpriced', [ 62 | $powerID, 63 | ucfirst($powers[$powerID]['name']) 64 | ]), 65 | $type 66 | ); 67 | } 68 | $dym = $match[1] === false ? $bot->botlang('cmd.didyoumean', [ucfirst($powers[$powerID]['name'])]) : ''; 69 | $bot->network->sendMessageAutoDetection( 70 | $who, 71 | $bot->botlang('cmd.price.result', [ 72 | $dym, 73 | $powerID, 74 | ucfirst($powers[$powerID]['name']), 75 | number_format($powers[$powerID]['minCost']), 76 | number_format($powers[$powerID]['maxCost']), 77 | number_format(round($powers[$powerID]['minCost'] / 13.5)), 78 | number_format(round($powers[$powerID]['maxCost'] / 13.5)) 79 | ]), 80 | $type 81 | ); 82 | }; 83 | -------------------------------------------------------------------------------- /src/Commands/radio.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'radio')) { 10 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 11 | } 12 | 13 | if (DataAPI::isSetVariable('radio')) { 14 | $infos = DataAPI::get('radio'); 15 | if ($infos['lastCheck'] > time()) { 16 | return $bot->network->sendMessageAutoDetection( 17 | $who, 18 | $bot->botlang('cmd.radio.listeningto', [ 19 | $infos['song'], 20 | $infos['listeners'], 21 | $infos['max'] 22 | ]), 23 | $type 24 | ); 25 | } 26 | } 27 | 28 | $song = $bot->getCurrentSong(); 29 | 30 | if ($song == false) { 31 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('cmd.radio.error'), $type); 32 | } 33 | 34 | DataAPI::set('radio', $song); 35 | 36 | return $bot->network->sendMessageAutoDetection( 37 | $who, 38 | $bot->botlang('cmd.radio.listeningto', [ 39 | $song['song'], 40 | $song['listeners'], 41 | $song['max'] 42 | ]), 43 | $type 44 | ); 45 | }; 46 | -------------------------------------------------------------------------------- /src/Commands/randomnumber.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'randomnumber')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | if (!isset($message[1]) || empty($message[1]) || !is_numeric($message[1])) { 12 | return $bot->network->sendMessageAutoDetection($who, 'Usage: !randomnumber [maxNumber]', $type, true); 13 | } else { 14 | $maxNumber = (int)$message[1]; 15 | } 16 | 17 | if ($maxNumber == 9223372036854775807) { 18 | return $bot->network->sendMessageAutoDetection($who, 'I am in a 64-bit environment.', $type, true); 19 | } 20 | 21 | $number = rand(0, $maxNumber); 22 | 23 | $bot->network->sendMessageAutoDetection($who, $number, $type); 24 | }; 25 | -------------------------------------------------------------------------------- /src/Commands/randomsmiley.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'randomsmiley')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | if (!$bot->botHasPower(272)) { 12 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('missing.power', ['random']), $type); 13 | } 14 | 15 | if (empty($message[1]) || !isset($message[1])) { 16 | return $bot->network->sendMessageAutoDetection( 17 | $who, 18 | 'Usage: !randomsmiley [1 - 20] [optional power]', 19 | $type, 20 | true 21 | ); 22 | } 23 | 24 | if (!is_numeric($message[1]) || $message[1] > 25 || $message[1] < 1) { 25 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('cmd.randomsmiley.mustbe'), $type, true); 26 | } 27 | 28 | $powers = xatbot\Bot\XatVariables::getPowers(); 29 | $exist = false; 30 | 31 | $rand = []; 32 | 33 | if (!empty($message[2]) || isset($message[2])) { 34 | $rand = array_fill(0, $message[1] - 1, 'random'); 35 | foreach ($powers as $id => $array) { 36 | if ($array['name'] == strtolower($message[2]) || $id == $message[2]) { 37 | $exist = true; 38 | break; 39 | } 40 | } 41 | 42 | if (!$exist) { 43 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('cmd.powernotexist'), $type); 44 | } 45 | 46 | if (!$bot->botHasPower($array['name'])) { 47 | return $bot->network->sendMessageAutoDetection( 48 | $who, 49 | $bot->botlang('missing.power', [$array['name']]), 50 | $type 51 | ); 52 | } 53 | $rand[] = $array['name']; 54 | } else { 55 | $rand = array_fill(0, $message[1], 'random'); 56 | } 57 | 58 | shuffle($rand); 59 | $bot->network->sendMessageAutoDetection( 60 | $who, 61 | $bot->botlang('cmd.randomsmiley.generated', [implode('#', $rand)]), 62 | $type 63 | ); 64 | }; 65 | -------------------------------------------------------------------------------- /src/Commands/randomuser.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'randomuser')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | $random = array_rand($bot->users); 12 | $bot->network->sendMessageAutoDetection( 13 | $who, 14 | $bot->users[$random]->getRegname() . '(' . $bot->users[$random]->getID() . ')', 15 | $type 16 | ); 17 | }; 18 | -------------------------------------------------------------------------------- /src/Commands/rank.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'rank')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | if (empty($message[1]) || empty($message[2])) { 12 | return $bot->network->sendMessageAutoDetection( 13 | $who, 14 | 'Usage: !rank [member/mod/owner] [ID/Regname]', 15 | $type, 16 | true 17 | ); 18 | } 19 | 20 | if (is_numeric($message[2]) && isset($bot->users[$message[2]])) { 21 | $user = $bot->users[$message[2]]; 22 | } else { 23 | foreach ($bot->users as $id => $object) { 24 | if (is_object($object) && strtolower($object->getRegname()) == strtolower($message[2])) { 25 | $user = $object; 26 | break; 27 | } 28 | } 29 | } 30 | 31 | if (isset($user)) { 32 | switch ($message[1]) { 33 | case 'guest': 34 | if (!$user->isGuest()) { 35 | $bot->network->changeRank($user->getID(), 'guest'); 36 | } 37 | break; 38 | 39 | case 'member': 40 | if (!$user->isMember()) { 41 | $bot->network->changeRank($user->getID(), 'member'); 42 | } 43 | break; 44 | 45 | case 'moderator': 46 | case 'mod': 47 | if (!$user->isMod()) { 48 | $bot->network->changeRank($user->getID(), 'moderator'); 49 | } 50 | break; 51 | 52 | case 'owner': 53 | if (!$user->isOwner()) { 54 | $bot->network->changeRank($user->getID(), 'owner'); 55 | } 56 | break; 57 | 58 | default: 59 | $bot->network->sendMessageAutoDetection($who, 'Usage: !rank [member/mod/owner] [ID/Regname].', $type); 60 | break; 61 | } 62 | } else { 63 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('user.not.here'), $type); 64 | } 65 | }; 66 | -------------------------------------------------------------------------------- /src/Commands/rankme.php: -------------------------------------------------------------------------------- 1 | network->sendMessageAutoDetection($who, 'Usage: !rankme [guest/member/mod/owner]', $type, true); 8 | } 9 | 10 | $user = $bot->users[$who]; 11 | 12 | switch (strtolower($message[1])) { 13 | case 'guest': 14 | if ($bot->flagToRank($who) < 1) { 15 | if (isset($bot->stafflist[$who])) { 16 | if ($bot->stafflist[$who] >= 1) { 17 | return true; 18 | } 19 | } 20 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 21 | } 22 | 23 | if (!$user->isGuest()) { 24 | $bot->network->changeRank($user->getID(), 'guest'); 25 | } 26 | break; 27 | 28 | case 'member': 29 | if ($bot->flagToRank($who) < 2) { 30 | if (isset($bot->stafflist[$who])) { 31 | if ($bot->stafflist[$who] >= 2) { 32 | return true; 33 | } 34 | } 35 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 36 | } 37 | 38 | if (!$user->isMember()) { 39 | $bot->network->changeRank($user->getID(), 'member'); 40 | } 41 | break; 42 | 43 | case 'mod': 44 | case 'moderator': 45 | if ($bot->flagToRank($who) < 3) { 46 | if (isset($bot->stafflist[$who])) { 47 | if ($bot->stafflist[$who] >= 3) { 48 | return true; 49 | } 50 | } 51 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 52 | } 53 | 54 | if (!$user->isMod()) { 55 | $bot->network->changeRank($user->getID(), 'moderator'); 56 | } 57 | break; 58 | 59 | case 'owner': 60 | if ($bot->flagToRank($who) < 4) { 61 | if (isset($bot->stafflist[$who])) { 62 | if ($bot->stafflist[$who] >= 4) { 63 | return true; 64 | } 65 | } 66 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 67 | } 68 | 69 | if (!$user->isOwner()) { 70 | $bot->network->changeRank($user->getID(), 'owner'); 71 | } 72 | break; 73 | } 74 | }; 75 | -------------------------------------------------------------------------------- /src/Commands/refresh.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'refresh')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | $bot->network->sendMessageAutoDetection($who, $bot->botlang('cmd.refresh'), $type); 12 | $bot->refresh(true); 13 | }; 14 | -------------------------------------------------------------------------------- /src/Commands/response.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'response')) { 11 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 12 | } 13 | 14 | if (!isset($message[1]) || empty($message[1]) || !in_array($message[1], ['add', 'remove', 'rm'])) { 15 | return $bot->network->sendMessageAutoDetection( 16 | $who, 17 | 'Usage: !response [add/remove] [response] [answer]', 18 | $type 19 | ); 20 | } 21 | 22 | switch (strtolower($message[1])) { 23 | case 'add': 24 | $message = implode(' ', $message); 25 | preg_match_all("/\[[^\]]*\]/", $message, $test); 26 | if (!isset($test[0][0]) || !isset($test[0][1])) { 27 | return $bot->network->sendMessageAutoDetection( 28 | $who, 29 | 'Usage: !response add [response] [answer]', 30 | $type 31 | ); 32 | } 33 | 34 | $response = str_replace(['[', ']'], '', $test[0][0]); 35 | $answer = str_replace(['[', ']'], '', $test[0][1]); 36 | 37 | if (empty($response) || empty($answer)) { 38 | return $bot->network->sendMessageAutoDetection( 39 | $who, 40 | 'Usage: !response add [response] [answer]', 41 | $type 42 | ); 43 | } 44 | 45 | foreach ($bot->responses as $responses => $answers) { 46 | if ($responses == strtolower($response)) { 47 | return $bot->network->sendMessageAutoDetection( 48 | $who, 49 | $bot->botlang('cmd.response.inuse'), 50 | $type 51 | ); 52 | } 53 | } 54 | 55 | $newResponse = new Response; 56 | $newResponse->bot_id = $bot->data->id; 57 | $newResponse->phrase = $response; 58 | $newResponse->response = $answer; 59 | $newResponse->save(); 60 | 61 | $bot->responses = $bot->setResponses(); 62 | 63 | return $bot->network->sendMessageAutoDetection( 64 | $who, 65 | $bot->botlang('cmd.response.added'), 66 | $type 67 | ); 68 | break; 69 | case 'rm': 70 | case 'remove': 71 | $message = implode(' ', $message); 72 | preg_match_all("/\[[^\]]*\]/", $message, $test); 73 | if (!isset($test[0][0])) { 74 | return $bot->network->sendMessageAutoDetection( 75 | $who, 76 | 'Usage: !response remove [response]', 77 | $type 78 | ); 79 | } 80 | 81 | $response = str_replace(['[', ']'], '', $test[0][0]); 82 | foreach ($bot->responses as $r => $a) { 83 | if ($r == strtolower($response)) { 84 | Response::where([ 85 | ['phrase', '=', strtolower($response)], 86 | ['bot_id', '=', $bot->data->id] 87 | ])->delete(); 88 | 89 | $bot->responses = $bot->setResponses(); 90 | 91 | return $bot->network->sendMessageAutoDetection( 92 | $who, 93 | $bot->botlang('cmd.response.removed'), 94 | $type 95 | ); 96 | } 97 | } 98 | return $bot->network->sendMessageAutoDetection( 99 | $who, 100 | $bot->botlang('cmd.response.notfound'), 101 | $type 102 | ); 103 | break; 104 | } 105 | }; 106 | -------------------------------------------------------------------------------- /src/Commands/reverseban.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'reverseban')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | if (!$bot->botHasPower(176)) { 12 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('missing.power', ['reverse']), $type); 13 | } 14 | 15 | if (!isset($message[1]) || empty($message[1]) || !isset($message[2]) || empty($message[2]) || 16 | !is_numeric($message[2])) { 17 | return $bot->network->sendMessageAutoDetection( 18 | $who, 19 | 'Usage: !reverseban [ID/Regname] [hours] [reason]', 20 | $type, 21 | true 22 | ); 23 | } 24 | 25 | if (is_numeric($message[1]) && isset($bot->users[$message[1]])) { 26 | $user = $bot->users[$message[1]]; 27 | } else { 28 | foreach ($bot->users as $id => $object) { 29 | if (is_object($object)) { 30 | if (strtolower($object->getRegname()) == strtolower($message[1])) { 31 | $user = $object; 32 | break; 33 | } 34 | } 35 | } 36 | } 37 | 38 | if (isset($user)) { 39 | if ($user->isReverseBanned()) { 40 | return $bot->network->sendMessageAutoDetection( 41 | $who, 42 | $bot->botlang('user.already', ['reverse banned']), 43 | $type 44 | ); 45 | } 46 | 47 | $hours = $message[2]; 48 | 49 | if (isset($message[3])) { 50 | $reason = implode(' ', array_slice($message, 3)); 51 | } 52 | 53 | $bot->network->ban($user->getID(), $hours, $reason ?? '', 'g', 176); 54 | } else { 55 | $bot->network->sendMessageAutoDetection($who, $bot->botlang('user.not.here'), $type); 56 | } 57 | }; 58 | -------------------------------------------------------------------------------- /src/Commands/richest.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'richest')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | $powers = xatbot\Bot\XatVariables::getPowers(); 12 | 13 | foreach ($bot->users as $user) { 14 | if (!is_object($user)) { 15 | continue; 16 | } 17 | 18 | if (!$user->hasDays()) { 19 | continue; 20 | } 21 | 22 | $doubles = $user->getDoubles(); 23 | $storeprice = 0; 24 | $minprice = 0; 25 | $maxprice = 0; 26 | $count = 0; 27 | 28 | if (isset($doubles)) { 29 | $pO = explode('|', $doubles); 30 | 31 | for ($i = 0; $i < sizeof($pO); $i++) { 32 | $pos = strpos($pO[$i], '='); 33 | if ($pos !== false) { 34 | $id = (int)substr($pO[$i], 0, $pos); 35 | $ammount = (int)substr($pO[$i], $pos + 1); 36 | } else { 37 | $id = (int)$pO[$i]; 38 | $ammount = 1; 39 | } 40 | 41 | if ($id == 0) { 42 | continue; 43 | } 44 | 45 | if (isset($powers[$id]['storeCost'])) { 46 | if (!$powers[$id]['isLimited']) { 47 | $storeprice += $powers[$id]['storeCost'] * $ammount; 48 | } 49 | } 50 | 51 | $minprice += $powers[$id]['minCost'] * $ammount; 52 | $maxprice += $powers[$id]['maxCost'] * $ammount; 53 | $count += $ammount; 54 | } 55 | } 56 | 57 | foreach ($powers as $id => $array) { 58 | if ($id == 95) { 59 | continue; 60 | } 61 | 62 | if ($user->hasPower($id)) { 63 | if (isset($array['storeCost'])) { 64 | if (!$array['isLimited']) { 65 | $storeprice += $array['storeCost']; 66 | } 67 | } 68 | 69 | $minprice += $array['minCost']; 70 | $maxprice += $array['maxCost']; 71 | $count++; 72 | } 73 | } 74 | 75 | $res[] = ['max' => $maxprice, 'min' => $minprice, 'user' => $user]; 76 | sort($res); 77 | } 78 | 79 | if (empty($res)) { 80 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('users.nodays'), $type); 81 | } 82 | 83 | $bot->network->sendMessageAutoDetection( 84 | $who, 85 | $bot->botlang('cmd.richest', [ 86 | $res[sizeof($res) - 1]['user']->getRegname(), 87 | $res[sizeof($res) - 1]['user']->getID() 88 | ]), 89 | $type 90 | ); 91 | }; 92 | -------------------------------------------------------------------------------- /src/Commands/say.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'say')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | unset($message[0]); 12 | $message = implode(' ', $message); 13 | 14 | if (empty($message)) { 15 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('message.cannotbeempty'), $type); 16 | } else { 17 | //$message = str_replace('/', '_/', $message); 18 | if ($type != 3) { 19 | return $bot->network->sendMessageAutoDetection($who, '_' . $message, $type); 20 | } else { 21 | if ($bot->flagToRank($who) < $bot->stringToRank('mod')) { 22 | return $bot->network->sendMessage('[' . $who . '] ' . $message); 23 | } else { 24 | return $bot->network->sendMessage('_' . $message); 25 | } 26 | } 27 | } 28 | }; 29 | -------------------------------------------------------------------------------- /src/Commands/scroll.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'scroll')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | if (in_array(strtolower($bot->chatInfo['rank']), ['guest', 'member', 'moderator'])) { 12 | return $bot->network->sendMessageAutoDetection($who, $bot->botLang('cmd.scroll.ownerplus'), $type); 13 | } 14 | 15 | if (!isset($message[1]) || empty($message[1])) { 16 | return $bot->network->sendMessageAutoDetection($who, 'Usage: !scroll [message/clear]', $type); 17 | } 18 | 19 | switch (strtolower($message[1])) { 20 | case 'clear': 21 | $bot->network->sendMessage('/s'); 22 | $bot->network->sendMessageAutoDetection($who, $bot->botlang('cmd.scroll.nowcleared'), $type); 23 | break; 24 | 25 | default: 26 | unset($message[0]); 27 | $bot->network->sendMessage('/s' . implode(' ', $message)); 28 | $bot->network->sendMessageAutoDetection( 29 | $who, 30 | $bot->botlang('cmd.scroll.isnow', [implode(' ', $message)]), 31 | $type 32 | ); 33 | break; 34 | } 35 | }; 36 | -------------------------------------------------------------------------------- /src/Commands/search.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'search')) { 8 | return $bot->network->sendMessageAutoDetection($who, $bot->botlang('not.enough.rank'), $type); 9 | } 10 | 11 | if (!isset($message[1]) || empty($message[1])) { 12 | return $bot->network->sendMessageAutoDetection($who, 'Usage: !search [word]', $type); 13 | } 14 | 15 | $r_regname = '\[([^\]]+)\]'; 16 | $r_message = '>([^<]+)'; 17 | $r_link = '>(xat.com/[^<]+)<'; 18 | $regex = '!' . $r_regname . '.+' . $r_message . '.+' . $r_link . '!Us'; 19 | 20 | $a = []; 21 | $a['http']['method'] = 'POST'; 22 | $a['http']['header'] = 'Content-Type: application/x-www-form-urlencoded'; 23 | $a['http']['content'] = 'search='.$message[1]; 24 | 25 | $fgc = file_get_contents('https://xat.com/web_gear/chat/search.php', false, stream_context_create($a)); 26 | preg_match_all($regex, $fgc, $matches); 27 | 28 | unset($matches[0]); 29 | $array = []; 30 | 31 | foreach ($matches as $match) { 32 | foreach ($match as $key => $val) { 33 | $array[$key][] = $val; 34 | } 35 | } 36 | 37 | if (sizeof($array) >= 3) { 38 | for ($i = 0; $i < 3; $i++) { 39 | $newMessage = '['.$array[$i][0] . '] - ' . $array[$i][1]. ' at ' . $array[$i][2]; 40 | 41 | if (sizeof($bot->packetsinqueue) > 0) { 42 | $bot->packetsinqueue[max(array_keys($bot->packetsinqueue)) + 2000] = [ 43 | 'who' => $who, 44 | 'message' => $newMessage, 45 | 'type' => $type 46 | ]; 47 | } else { 48 | $bot->packetsinqueue[round(microtime(true) * 1000) + 2000] = [ 49 | 'who' => $who, 50 | 'message' => $newMessage, 51 | 'type' => $type 52 | ]; 53 | } 54 | } 55 | } elseif (sizeof($array) > 0) { 56 | for ($i = 0; $i < sizeof($array); $i++) { 57 | $newMessage = '['.$array[$i][0] . '] - ' . $array[$i][1] . ' at ' . $array[$i][2]; 58 | 59 | if (sizeof($bot->packetsinqueue) > 0) { 60 | $bot->packetsinqueue[max(array_keys($bot->packetsinqueue)) + 2000] = [ 61 | 'who' => $who, 62 | 'message' => $newMessage, 63 | 'type' => $type 64 | ]; 65 | } else { 66 | $bot->packetsinqueue[round(microtime(true) * 1000) + 2000] = [ 67 | 'who' => $who, 68 | 'message' => $newMessage, 69 | 'type' => $type 70 | ]; 71 | } 72 | } 73 | } else { 74 | $bot->network->sendMessageAutoDetection($who, $bot->botlang('cmd.search.nothing'), $type); 75 | } 76 | }; 77 | -------------------------------------------------------------------------------- /src/Commands/shortname.php: -------------------------------------------------------------------------------- 1 | minrank($who, 'shortname')) { 7 | return $bot->network->sendMessageAutoDetection( 8 | $who, 9 | $bot->botlang('not.enough.rank'), 10 | $type 11 | ); 12 | } 13 | 14 | if (!isset($message[1]) || empty($message[1])) { 15 | return $bot->network->sendMessageAutoDetection( 16 | $who, 17 | 'Usage: !shortname [name]', 18 | $type, 19 | true 20 | ); 21 | } 22 | 23 | if (!ctype_alnum($message[1])) { 24 | return $bot->network->sendMessageAutoDetection( 25 | $who, 26 | $bot->botlang('cmd.shortname.badchars'), 27 | $type 28 | ); 29 | } 30 | 31 | if (strlen($message[1]) < 4) { 32 | return $bot->network->sendMessageAutoDetection( 33 | $who, 34 | $bot->botlang('cmd.shortname.tooshort'), 35 | $type 36 | ); 37 | } 38 | 39 | if (strlen($message[1]) > 9) { 40 | return $bot->network->sendMessageAutoDetection( 41 | $who, 42 | $bot->botlang('cmd.shortname.toolong'), 43 | $type 44 | ); 45 | } 46 | 47 | if (is_numeric($message[1][0])) { 48 | return $bot->network->sendMessageAutoDetection( 49 | $who, 50 | $bot->botlang('cmd.shortname.cantstartwithanumber'), 51 | $type 52 | ); 53 | } 54 | 55 | $stream = []; 56 | $stream['http']['method'] = 'POST'; 57 | $stream['http']['header'] = 'Content-Type: application/x-www-form-urlencoded'; 58 | $stream['http']['content'] = 'GroupName=' . $message[1] . '&Quote=Get+cost&agree=ON'; 59 | $stream['http']['timeout'] = 2; 60 | 61 | $res = file_get_contents('https://xat.com/web_gear/chat/BuyShortName.php', false, stream_context_create($stream)); 62 | 63 | if (!$res) { 64 | return $bot->network->sendMessageAutoDetection( 65 | $who, 66 | $bot->botlang('cmd.shortname.cantaccess'), 67 | $type 68 | ); 69 | } 70 | 71 | $res = explode('