private function main_menu() { $DbUser = new User($this->db); $group_chats = $DbUser->getActiveChatsByUser($this->Message->User); $Vote = new Vote($this->db); $popularity = $Vote->getVoteTotalForUser($this->Message->User); $ranking = Query::getGlobalRanking($this->db, $this->Message->User); $this->out = emoji(0x1f44b) . " Hi *" . $this->Message->User->getName() . "*!" . "\nI'm *" . BOT_FRIENDLY_NAME . "*, your _Premier Shitposting Solution_ " . emoji(0x2122) . "." . "\n\n" . emoji(0x1f481) . emoji(0x1f3fb) . "You're a " . $this->Message->User->getLevelAndTitle() . " with `" . $this->Message->User->getBalance() . "` Coin." . "\nOverall, your popularity is at *{$popularity}* points, and you're ranked *" . addOrdinalNumberSuffix($ranking) . "* on the global leaderboard."; $this->out .= "\n\n*This menu system is currently under development and may be incomplete/broken. You've been warned!*"; if ($group_chats) { $this->out .= "\n\nI see you in the following group chats:"; foreach ($group_chats as $chat) { $this->out .= "\n` `• `" . $chat->title . "`"; } } $this->out .= "\n\nWhat would you like?"; $this->keyboard = [[['text' => emoji(0x2754) . ' Help', 'callback_data' => '/help help'], ['text' => emoji(0x1f4bc) . ' Business', 'callback_data' => '/help business']], [['text' => emoji(0x1f3ae) . ' Play a game', 'callback_data' => '/help games'], ['text' => emoji(0x2699) . ' Change preferences', 'callback_data' => '/preferences']]]; }
/** * @param UserVote[] $votes * @return UserVote[] */ private function map_users($votes) { $DbUser = new User($this->db); foreach ($votes as $vote) { $vote->voter = $DbUser->getUserFromId($vote->voter); } return $votes; }
private function getBank(Transaction $transaction) { if ($transaction->user_sending->user_id == COIN_BANK_ID) { return $transaction->user_sending; } elseif ($transaction->user_receiving->user_id == COIN_BANK_ID) { return $transaction->user_receiving; } return $this->UserSQL->getUserFromId(COIN_BANK_ID); }
private function losePopularity() { $this->out .= "\n" . emoji(0x1f465) . " Sickening groans surround you, as corpses rise from the earth. "; $Vote = new Vote($this->db); $DbUser = new User($this->db); $users_in_chat = $DbUser->getAllUsersInChat($this->Message->Chat->id); foreach ($users_in_chat as $user) { if ($user->user_id != $this->Message->User->user_id) { $userVote = new UserVote(); $userVote->construct($user, $this->Message->User, new VoteType(VoteType::Down)); $Vote->SQL->update_vote($userVote); } } $this->out .= "\n*" . $this->Message->User->getName() . "*, you become very unpopular. "; }
public function sendReminders() { $reminders = $this->SQL->select_reminders(); $UserDb = new User($this->db); /** @var Reminder $reminder */ foreach ($reminders as $reminder) { $date_due = Carbon::parse($reminder->date_due); $date_created = Carbon::parse($reminder->date_created); if ($date_due->lte(Carbon::now())) { $user = $UserDb->getUserFromId($reminder->user_id); $out = emoji(0x23f0) . " *" . $user->getName() . "*, your reminder from *" . $date_created->diffForHumans(Carbon::now(), true) . "* ago:" . "\n" . "\n`" . $reminder->content . "`"; Telegram::talkForced($reminder->chat_id, $out); $this->SQL->delete_reminder($reminder); } } }
private function getUserTimeZones() { $DbUser = new User($this->db); if ($this->Message->Chat->id == '56390227') { $users = $DbUser->getAllUsersInChat('-1001033369096'); } else { $users = $DbUser->getAllUsersInChat($this->Message->Chat->id); } $timezones = []; foreach ($users as $user) { if (isset($user->timezone)) { $timezones[$user->timezone][] = $user->getName(); } } $timezones['Australia/Perth'][] = 'ShitBot'; return $timezones; }
private function collectPeriodicTax() { $bank = $this->UserSQL->getUserFromId(COIN_BANK_ID); $this->Transact->CoinSQL->CollectPeriodicTax(); $to_collect = COIN_PERIODIC_TAX * $this->Transact->CoinSQL->getTotalCoinExisting(false); $bank->balance = $bank->getBalance(true) + $to_collect; $this->Transact->CoinSQL->AddTransactionLog(new Transaction(NULL, $bank, $to_collect, new TransactionType(TransactionType::AllTax))); $this->Transact->maintainFixedLevel($bank); $bank->save($this->db); Telegram::customShitpostingMessage(emoji(0x1f4e2) . " " . COIN_TAXATION_BODY . " just collected " . round($to_collect, 2) . " " . COIN_CURRENCY_NAME . " in tax."); return true; }
private function sed() { $s = explode('/', $this->Message->text); if (count($s) == 3 && $s[0] == 's') { if ($this->Message->MessageType == MessageType::Reply) { $out = preg_replace("/" . $s[1] . "/", $s[2], $this->Message->reply_to_message->text); if (strcmp($out, $this->Message->reply_to_message->text) === 0) { return false; } } else { $DbUser = new User($this->db); $last_message = $DbUser->getUserPostStatsInChat($this->Message->Chat, $this->Message->User)->lastpost; $out = preg_replace("/" . $s[1] . "/", $s[2], $last_message); if (strcmp($out, $last_message) === 0) { return false; } } Telegram::talk($this->Message->Chat->id, "*{$out}*"); return true; } return false; }
/** * @param $game_id * @return Player|bool */ public function select_players($game_id) { $sql = 'SELECT * FROM bj_players WHERE game_id = :game_id ORDER BY player_no ASC'; $query = $this->db->prepare($sql); $query->bindValue(':game_id', $game_id); $query->execute(); if ($query->rowCount()) { $Players = $query->fetchAll(\PDO::FETCH_CLASS, 'GroupBot\\Brains\\Blackjack\\Types\\Player'); usort($Players, function ($a, $b) { if ($a->player_no == $b->player_no) { return 0; } return $a->player_no < $b->player_no ? -1 : 1; }); $DbUser = new User($this->db); foreach ($Players as $key => $player) { $Players[$key]->user = $DbUser->getUserFromId($player->user_id); unset($Players[$key]->user_id); } return $Players; } return false; }
private function processStats() { $userSQL = new User($this->db); if ($this->Message->isNormalMessage()) { $userSQL->updateUserMessageStats($this->Message); } elseif ($this->Message->MessageType == MessageType::NewChatParticipant) { $userSQL->updateWhetherUserIsInChat($this->Message->Chat, $this->Message->User, true); } elseif ($this->Message->MessageType == MessageType::LeftChatParticipant) { $userSQL->updateWhetherUserIsInChat($this->Message->Chat, $this->Message->User, false); } elseif ($this->Message->isCommand()) { $userSQL->updateUserCommandStats($this->Message); } }
/** * @param \PDO $db * @param Chat $chat * @param $name * @return \GroupBot\Types\User|string */ public static function getUserMatchingStringOrErrorMessage(\PDO $db, Chat $chat, $name) { $userSQL = new User($db); $userInChat = true; if (isset($chat)) { if (!($user_receiving = $userSQL->getUsersInChatWithName($chat, $name))) { if (!($user_receiving = $userSQL->getUsersWithName($name))) { return emoji("0x1F44E") . " Can't find any users matching `" . $name . "`, brah"; } $userInChat = false; } } else { if (!($user_receiving = $userSQL->getUsersWithName($name))) { return emoji("0x1F44E") . " Can't find any users matching `" . $name . "`, brah"; } $userInChat = false; } if (count($user_receiving) > 1) { $out = "There are " . count($user_receiving) . " users matching that name" . ($userInChat ? " in this chat:" : ":"); foreach ($user_receiving as $user) { $out .= "\n` `•` " . $user->getNameLevelAndTitle(); } $out .= "Please redefine your query"; return $out; } return $user_receiving[0]; }