/** * When a message arrives that contains a trigger, this is started * * @param $msgData */ public function onMessage(stdClass $msgData) { $message = $msgData->message->message; $data = $this->trigger->trigger($message, $this->information()["trigger"]); if (isset($data["trigger"])) { $channelName = $msgData->channel->name; $guildName = $msgData->guild->name; $guildID = $msgData->guild->id; $switch = $data["messageArray"][0]; switch ($switch) { case "save": $fittingURL = $data["messageArray"][1]; unset($data["messageArray"][0]); unset($data["messageArray"][1]); $fittingName = implode(" ", $data["messageArray"]); $this->sluggardDB->execute("REPLACE INTO fittings (guildID, fittingName, fittingURL) VALUES (:guildID, :fittingName, :fittingURL)", array(":guildID" => $guildID, ":fittingName" => $fittingName, ":fittingURL" => $fittingURL)); $this->log->info("Saved fitting ({$fittingName}) on {$guildName}"); $msg = "Fitting saved, you can now call upon it by using !fit {$fittingName}"; $msgData->user->reply($msg); break; case "delete": unset($data["messageArray"][0]); $fittingName = implode(" ", $data["messageArray"]); if (strlen($fittingName) > 1) { $fittingData = $this->sluggardDB->queryField("SELECT fittingURL FROM fittings WHERE fittingName = :fittingName AND guildID = :guildID", "fittingURL", array(":fittingName" => $fittingName, ":guildID" => $guildID)); if ($fittingData) { $this->sluggardDB->execute("DELETE FROM fittings WHERE fittingName = :fittingName AND guildID = :guildID", array(":fittingName" => $fittingName, ":guildID" => $guildID)); $msg = "Fitting {$fittingName} was deleted"; } else { $msg = "Fitting {$fittingName} not found for this server"; } } else { $msg = "Error with your search"; } $msgData->user->reply($msg); break; default: $search = $data["messageString"]; if (strlen($search) > 1) { $fittingData = $this->sluggardDB->queryField("SELECT fittingURL FROM fittings WHERE fittingName = :fittingName AND guildID = :guildID", "fittingURL", array(":fittingName" => $search, ":guildID" => $guildID)); if ($fittingData) { $msg = "Fitting {$search} can be seen here: {$fittingData}"; } else { $msg = "Fitting {$search} not found for this server"; } } else { $msg = "Error with your search"; } $msgData->user->reply($msg); break; } } }
/** * When a message arrives that contains a trigger, this is started * * @param $msgData */ public function onMessage(stdClass $msgData) { $message = $msgData->message->message; $data = $this->trigger->trigger($message, $this->information()["trigger"]); $username = $msgData->message->from; $channelName = $msgData->channel->name; $guildName = $msgData->guild->name; if (isset($data["trigger"])) { $this->log->info("Sending log stats info to {$username} in {$channelName} on {$guildName}"); $msg = "To view the log stats for this channel, look at: http://pisg.karbowiak.dk/" . urlencode(urlencode($guildName) . "." . urlencode($channelName)) . ".html"; $msgData->user->reply($msg); } }
/** * When a message arrives that contains a trigger, this is started * * @param $msgData */ public function onMessage($msgData) { $message = $msgData->message->message; $data = $this->trigger->trigger($message, $this->information()["trigger"]); if (isset($data["trigger"])) { $channelName = $msgData->channel->name; $guildName = $msgData->guild->name; $crestData = json_decode($this->curl->getData("https://public-crest.eveonline.com/"), true); $tqStatus = isset($crestData["serviceStatus"]["eve"]) ? $crestData["serviceStatus"]["eve"] : "offline"; $tqOnline = (int) $crestData["userCounts"]["eve"]; $msg = "**TQ Status:** {$tqStatus} with {$tqOnline} users online."; $this->log->info("Sending eveStatus info to {$channelName} on {$guildName}"); $msgData->user->reply($msg); } }
/** * When a message arrives that contains a trigger, this is started * * @param $msgData */ public function onMessage($msgData) { $message = $msgData->message->message; $data = $this->trigger->trigger($message, $this->information()["trigger"]); if (isset($data["trigger"])) { $channelName = $msgData->channel->name; $guildName = $msgData->guild->name; $date = date("d-m-Y"); $fullDate = date("Y-m-d H:i:s"); $dateTime = new DateTime($fullDate); $et = $dateTime->setTimezone(new DateTimeZone("America/New_York")); $et = $et->format("H:i:s"); $pt = $dateTime->setTimezone(new DateTimeZone("America/Los_Angeles")); $pt = $pt->format("H:i:s"); $utc = $dateTime->setTimezone(new DateTimeZone("UTC")); $utc = $utc->format("H:i:s"); $cet = $dateTime->setTimezone(new DateTimeZone("Europe/Copenhagen")); $cet = $cet->format("H:i:s"); $msk = $dateTime->setTimezone(new DateTimeZone("Europe/Moscow")); $msk = $msk->format("H:i:s"); $aest = $dateTime->setTimezone(new DateTimeZone("Australia/Sydney")); $aest = $aest->format("H:i:s"); $msg = "**Current EVE Time:** {$utc} / **EVE Date:** {$date} / **PT:** {$pt} / **ET:** {$et} / **CET:** {$cet} / **MSK:** {$msk} / **AEST:** {$aest}"; $this->log->info("Sending time info to {$channelName} on {$guildName}"); $msgData->user->reply($msg); } }
/** * When the bot does a tick (every second), this is started */ public function onTick() { $check = true; foreach ($this->keys as $keyOwner => $api) { try { if ($check == false) { continue; } $keyID = $api["keyID"]; $vCode = $api["vCode"]; if (@$api["corpKey"] == true) { continue; } $characterID = $api["characterID"]; $lastChecked = $this->storage->get("notificationCheck{$keyID}{$keyOwner}{$characterID}"); if ($lastChecked <= time()) { $this->log->info("Checking API Key {$keyID} belonging to {$keyOwner} for new notifications"); $this->getNotifications($keyID, $vCode, $characterID); $this->storage->set("notificationCheck{$keyID}{$keyOwner}{$characterID}", time() + 1805); // Reschedule it's check for 30minutes from now (Plus 5s, ~CCP~) $check = false; } } catch (\Exception $e) { $this->log->err("Error with eve notification checker: " . $e->getMessage()); } } }
/** * When the bot does a tick (every second), this is started */ public function onTick() { $check = true; foreach ($this->keys as $keyOwner => $api) { try { if ($check == false) { return; } $keyID = $api["keyID"]; $vCode = $api["vCode"]; if (@$api["corpKey"] == true) { continue; } $characterID = $api["characterID"]; $lastChecked = $this->storage->get("corpMailCheck{$keyID}{$keyOwner}{$characterID}"); if ($lastChecked <= time()) { $this->log->info("Checking API Key {$keyID} belonging to {$keyOwner} for new corp mails"); $this->checkMails($keyID, $vCode, $characterID); $this->storage->set("corpMailCheck{$keyID}{$keyOwner}{$characterID}", time() + 1807); // Reschedule it's check for 30minutes from now (plus 7 seconds, because CCP isn't known to adhere strictly to timeouts, lol) $check = false; } } catch (\Exception $e) { $this->log->err("Error with eve mail checker: " . $e->getMessage()); } } }
/** * When the bot does a tick (every second), this is started */ public function onTick() { // If there are no corp api keys, don't run.. if ($this->run == false) { return; } $check = true; foreach ($this->keys as $keyOwner => $api) { try { if ($check == false) { continue; } $keyID = $api["keyID"]; $vCode = $api["vCode"]; if ($api["corpKey"] == false) { continue; } $lastChecked = $this->storage->get("siphonCheck{$keyID}{$keyOwner}"); if ($lastChecked <= time()) { $this->log->info("Checking API Key {$keyID} belonging to {$keyOwner} for Siphons"); $this->checkForSiphons($keyID, $vCode); $this->storage->set("siphonCheck{$keyID}{$keyOwner}", time() + 21602); // Reschedule it's check for new data in 6 hours (plus 2 seconds) $check = false; } } catch (\Exception $e) { $this->log->err("Error with eve siphon checker: " . $e->getMessage()); } } }
/** * When a message arrives that contains a trigger, this is started * * @param $msgData */ public function onMessage(stdClass $msgData) { $message = $msgData->message->message; $data = $this->trigger->trigger($message, $this->information()["trigger"]); if (isset($data["trigger"])) { $channelName = $msgData->channel->name; $guildName = $msgData->guild->name; $systemName = $data["trigger"]; $itemName = $data["messageString"]; if ($itemName) { // Quick lookups if (isset($this->quickLookUps[$itemName])) { $single = $this->quickLookUps[$itemName]; $multiple = null; } else { $single = $this->ccpDB->queryRow("SELECT typeID, typeName FROM invTypes WHERE typeName = :item COLLATE NOCASE", array(":item" => ucfirst($itemName))); $multiple = $this->ccpDB->query("SELECT typeID, typeName FROM invTypes WHERE typeName LIKE :item COLLATE NOCASE LIMIT 5", array(":item" => "%" . ucfirst($itemName) . "%")); } // Sometimes the multiple lookup is returning just one if (count($multiple) == 1) { $single = $multiple[0]; } // If there are multiple results, and not a single result, it's an error if (empty($single) && !empty($multiple)) { $items = array(); foreach ($multiple as $item) { $items[] = $item["typeName"]; } $items = implode(", ", $items); return $msgData->user->reply("**Multiple results found:** {$items}"); } // If there is a single result, we'll get data now! if ($single) { $typeID = $single["typeID"]; $typeName = $single["typeName"]; $solarSystemID = $systemName == "pc" ? "global" : $this->solarSystems[$systemName]; // Get pricing data if ($solarSystemID == "global") { $data = new SimpleXMLElement($this->curl->getData("https://api.eve-central.com/api/marketstat?typeid={$typeID}")); } else { $data = new SimpleXMLElement($this->curl->getData("https://api.eve-central.com/api/marketstat?usesystem={$solarSystemID}&typeid={$typeID}")); } $lowBuy = number_format((double) $data->marketstat->type->buy->min, 2); $avgBuy = number_format((double) $data->marketstat->type->buy->avg, 2); $highBuy = number_format((double) $data->marketstat->type->buy->max, 2); $lowSell = number_format((double) $data->marketstat->type->sell->min, 2); $avgSell = number_format((double) $data->marketstat->type->sell->avg, 2); $highSell = number_format((double) $data->marketstat->type->sell->max, 2); $this->log->info("Sending pricing info to {$channelName} on {$guildName}"); $solarSystemName = $systemName == "pc" ? "Global" : ucfirst($systemName); $messageData = "```\r\ntypeName: {$typeName}\r\nsolarSystemName: {$solarSystemName}\r\nBuy:\r\n Low: {$lowBuy}\r\n Avg: {$avgBuy}\r\n High: {$highBuy}\r\nSell:\r\n Low: {$lowSell}\r\n Avg: {$avgSell}\r\n High: {$highSell}```"; $msgData->user->reply($messageData); } else { $msgData->user->reply("**Error:** ***{$itemName}*** not found"); } } else { $msgData->user->reply("**Error:** No itemName set.."); } } }
/** * When a message arrives that contains a trigger, this is started * * @param $msgData */ public function onMessage(stdClass $msgData) { $message = $msgData->message->message; $data = $this->trigger->trigger($message, $this->information()["trigger"]); if (isset($data["trigger"])) { $channelName = $msgData->channel->name; $guildName = $msgData->guild->name; $startTime = $this->app->startTime; $time1 = new DateTime(date("Y-m-d H:i:s", $startTime)); $time2 = new DateTime(date("Y-m-d H:i:s")); $interval = $time1->diff($time2); $gitRevision = $this->app->gitrevision->getRevision(); $msg = "```Hello, i am Sluggard - i am a bot created for EVE Online related Discord servers.\r\nAlso, i am the half-brother of Sovereign, atleast in the Blasto 7 movie..\r\n\r\nAbout Me:\r\nAuthor: Karbowiak (Discord ID: 118440839776174081)\r\nLibrary: DiscordPHP (https://github.com/teamreflex/DiscordPHP\\)\r\nCurrent version: " . $gitRevision["short"] . " (Last Update: " . $gitRevision["lastChangeDate"] . ")\r\nGithub Repo: https://github.com/karbowiak/Sluggard\\\r\n\r\nStatistics:\r\nUptime: " . $interval->y . " Year(s), " . $interval->m . " Month(s), " . $interval->d . " Days, " . $interval->h . " Hours, " . $interval->i . " Minutes, " . $interval->s . " seconds.\r\nMemory Usage: ~" . round(memory_get_usage() / 1024 / 1024, 3) . "MB```"; $this->log->info("Sending about info to {$channelName} on {$guildName}"); $msgData->user->reply($msg); } }
/** * When a message arrives that contains a trigger, this is started * * @param $msgData */ public function onMessage(stdClass $msgData) { $message = $msgData->message->message; $data = $this->trigger->trigger($message, $this->information()["trigger"]); if (isset($data["trigger"])) { $channelName = $msgData->channel->name; $guildName = $msgData->guild->name; // Most EVE players on Discord use their ingame name, so lets support @highlights $messageString = stristr($data["messageString"], "@") ? str_replace("<@", "", str_replace(">", "", $data["messageString"])) : $data["messageString"]; if (is_numeric($messageString)) { // The person used @highlighting, so now we got a discord id, lets map that to a name $messageString = $this->sluggardDB->queryField("SELECT name FROM usersSeen WHERE id = :id", "name", array(":id" => $messageString)); } $url = "http://rena.karbowiak.dk/api/search/character/{$messageString}/"; $data = @json_decode($this->curl->getData($url), true)["character"]; if (empty($msgData)) { return $msgData->user->reply("**Error:** no results was returned."); } if (count($msgData) > 1) { $results = array(); foreach ($msgData as $char) { $results[] = $char["characterName"]; } return $msgData->user->reply("**Error:** more than one result was returned: " . implode(", ", $results)); } // Get stats $characterID = $data[0]["characterID"]; $statsURL = "https://beta.eve-kill.net/api/charInfo/characterID/" . urlencode($characterID) . "/"; $stats = json_decode($this->curl->getData($statsURL), true); if (empty($stats)) { return $msgData->user->reply("**Error:** no data available"); } $characterName = @$stats["characterName"]; $corporationName = @$stats["corporationName"]; $allianceName = isset($stats["allianceName"]) ? $stats["allianceName"] : "None"; $factionName = isset($stats["factionName"]) ? $stats["factionName"] : "None"; $securityStatus = @$stats["securityStatus"]; $lastSeenSystem = @$stats["lastSeenSystem"]; $lastSeenRegion = @$stats["lastSeenRegion"]; $lastSeenShip = @$stats["lastSeenShip"]; $lastSeenDate = @$stats["lastSeenDate"]; $corporationActiveArea = @$stats["corporationActiveArea"]; $allianceActiveArea = @$stats["allianceActiveArea"]; $soloKills = @$stats["soloKills"]; $blobKills = @$stats["blobKills"]; $lifeTimeKills = @$stats["lifeTimeKills"]; $lifeTimeLosses = @$stats["lifeTimeLosses"]; $amountOfSoloPVPer = @$stats["percentageSoloPVPer"]; $ePeenSize = @$stats["ePeenSize"]; $facepalms = @$stats["facepalms"]; $lastUpdated = @$stats["lastUpdatedOnBackend"]; $url = "https://beta.eve-kill.net/character/" . $stats["characterID"] . "/"; $msg = "```characterName: {$characterName}\r\ncorporationName: {$corporationName}\r\nallianceName: {$allianceName}\r\nfactionName: {$factionName}\r\nsecurityStatus: {$securityStatus}\r\nlastSeenSystem: {$lastSeenSystem}\r\nlastSeenRegion: {$lastSeenRegion}\r\nlastSeenShip: {$lastSeenShip}\r\nlastSeenDate: {$lastSeenDate}\r\ncorporationActiveArea: {$corporationActiveArea}\r\nallianceActiveArea: {$allianceActiveArea}\r\nsoloKills: {$soloKills}\r\nblobKills: {$blobKills}\r\nlifeTimeKills: {$lifeTimeKills}\r\nlifeTimeLosses: {$lifeTimeLosses}\r\npercentageSoloPVPer: {$amountOfSoloPVPer}\r\nePeenSize: {$ePeenSize}\r\nfacepalms: {$facepalms}\r\nlastUpdated: {$lastUpdated}```\r\nFor more info, visit: {$url}"; $this->log->info("Sending char info to {$channelName} on {$guildName}"); $msgData->user->reply($msg); } }
/** * When a message arrives that contains a trigger, this is started * * @param $msgData */ public function onMessage(stdClass $msgData) { $message = $msgData->message->message; $data = $this->trigger->trigger($message, $this->information()["trigger"]); if (isset($data["trigger"])) { $channelName = $msgData->channel->name; $guildName = $msgData->guild->name; $user = stristr($data["messageString"], "@") ? str_replace("<@", "", str_replace(">", "", $data["messageString"])) : $data["messageString"]; // Get data for user $userData = $this->sluggardDB->queryRow("SELECT * FROM usersSeen WHERE (name = :name COLLATE NOCASE OR id = :name)", array(":name" => $user)); if ($userData) { $msg = "```ID: {$userData["id"]}\nName: {$userData["name"]}\nisAdmin: {$userData["isAdmin"]}\nLast Seen: {$userData["lastSeen"]}\nLast Spoken: {$userData["lastSpoke"]}\nLast Status: {$userData["lastStatus"]}```"; $this->log->info("Sending time info to {$channelName} on {$guildName}"); $msgData->user->reply($msg); } else { $msgData->user->reply("**Error:** no such user in the users table"); } } }
/** * When the bot's tick hits a specified time, this is started * * Runtime is defined in $this->information(), timerFrequency */ public function onTimer() { // Fetch all the characterIDs from the database $users = $this->sluggardDB->query("SELECT * FROM authentications"); foreach ($users as $user) { $discordID = $user["discordID"]; $guildID = $user["guildID"]; $characterID = $user["characterID"]; $corporationID = $user["corporationID"]; $allianceID = $user["allianceID"]; // Get the information for this user from CCP try { $ccpData = json_decode(json_encode(new SimpleXMLElement($this->curl->getData("https://api.eveonline.com/eve/CharacterAffiliation.xml.aspx?ids={$characterID}"))), true); $data = $ccpData["result"]["rowset"]["row"]["@attributes"]; $currentCharacterID = $data["characterID"]; $currentCorporationID = $data["corporationID"]; $currentAllianceID = $data["allianceID"]; // Lets just be sure we're doing this for the correct character.. CCP is weird sometimes if ($currentCharacterID == $characterID) { $remove = false; // Remove if the guy switched corp if ($currentCorporationID != $corporationID) { $remove = true; } // Remove if the guy switched alliance if ($currentAllianceID != $allianceID) { $remove = true; } // Lets remove the groups from this user (Every single role!) if ($remove == true) { $guild = $this->discord->guilds->first(); $guildName = $guild->name; $member = $guild->members->get("id", $discordID); $memberName = $member->user->username; $roles = $member->roles; // Remove all roles, we don't care what roles they are, remove them all.. // Can't remove server owner tho, so.. mehe.. foreach ($roles as $role) { $member->removeRole($role); } // Delete the auth info from the db $this->sluggardDB->execute("DELETE FROM authentications WHERE discordID = :discordID", array(":discordID" => $discordID)); $this->log->info("Deleted all roles for {$memberName} on {$guildName}"); } } } catch (\Exception $e) { $this->log->err("Error with character check: " . $e->getMessage()); } } }
/** * When a message arrives that contains a trigger, this is started * * @param $msgData */ public function onMessage($msgData) { $message = $msgData->message->message; $data = $this->trigger->trigger($message, $this->information()["trigger"]); if (isset($data["trigger"])) { $channelName = $msgData->channel->name; $guildName = $msgData->guild->name; $item = $data["messageString"]; if (is_numeric($item)) { $data = $this->ccpDB->queryRow("SELECT * FROM invTypes WHERE typeID = :item", array(":item" => $item)); } else { $data = $this->ccpDB->queryRow("SELECT * FROM invTypes WHERE typeName = :item COLLATE NOCASE", array(":item" => $item)); } if ($data) { $msg = "```"; foreach ($data as $key => $value) { $msg .= $key . ": " . $value . "\n"; } $msg .= "```"; $this->log->info("Sending item info to {$channelName} on {$guildName}"); $msgData->user->reply($msg); } } }
/** * When a message arrives that contains a trigger, this is started * * @param $msgData */ public function onMessage(stdClass $msgData) { $message = $msgData->message->message; $data = $this->trigger->trigger($message, $this->information()["trigger"]); if (isset($data["trigger"])) { $channelName = $msgData->channel->name; $guildName = $msgData->guild->name; $messageString = $data["messageString"]; $url = "http://rena.karbowiak.dk/api/search/corporation/{$messageString}/"; $data = @json_decode($this->curl->getData($url), true)["corporation"]; if (empty($data)) { return $msgData->user->reply("**Error:** no results was returned."); } if (count($data) > 1) { $results = array(); foreach ($data as $corp) { $results[] = $corp["corporationName"]; } return $msgData->user->reply("**Error:** more than one result was returned: " . implode(", ", $results)); } // Get stats $corporationID = $data[0]["corporationID"]; $statsURL = "https://beta.eve-kill.net/api/corpInfo/corporationID/" . urlencode($corporationID) . "/"; $stats = json_decode($this->curl->getData($statsURL), true); if (empty($stats)) { return $msgData->user->reply("**Error:** no data available"); } $corporationName = @$stats["corporationName"]; $allianceName = isset($stats["allianceName"]) ? $stats["allianceName"] : "None"; $factionName = isset($stats["factionName"]) ? $stats["factionName"] : "None"; $ceoName = @$stats["ceoName"]; $homeStation = @$stats["stationName"]; $taxRate = @$stats["taxRate"]; $corporationActiveArea = @$stats["corporationActiveArea"]; $allianceActiveArea = @$stats["allianceActiveArea"]; $lifeTimeKills = @$stats["lifeTimeKills"]; $lifeTimeLosses = @$stats["lifeTimeLosses"]; $memberCount = @$stats["memberArrayCount"]; $superCaps = @count($stats["superCaps"]); $ePeenSize = @$stats["ePeenSize"]; $url = "https://beta.eve-kill.net/corporation/" . @$stats["corporationID"] . "/"; $msg = "```corporationName: {$corporationName}\r\nallianceName: {$allianceName}\r\nfactionName: {$factionName}\r\nceoName: {$ceoName}\r\nhomeStation: {$homeStation}\r\ntaxRate: {$taxRate}\r\ncorporationActiveArea: {$corporationActiveArea}\r\nallianceActiveArea: {$allianceActiveArea}\r\nlifeTimeKills: {$lifeTimeKills}\r\nlifeTimeLosses: {$lifeTimeLosses}\r\nmemberCount: {$memberCount}\r\nsuperCaps: {$superCaps}\r\nePeenSize: {$ePeenSize}\r\n```\r\nFor more info, visit: {$url}"; $this->log->info("Sending corp info to {$channelName} on {$guildName}"); $msgData->user->reply($msg); } }
/** * When a message arrives that contains a trigger, this is started * * @param $msgData */ public function onMessage(stdClass $msgData) { $message = $msgData->message->message; $data = $this->trigger->trigger($message, $this->information()["trigger"]); if (isset($data["trigger"])) { $channelName = $msgData->channel->name; $guildName = $msgData->guild->name; $authString = trim($data["messageString"]); $private = (bool) $msgData->channel->is_private; $authData = $this->authData->queryRow("SELECT * FROM registrations WHERE authString = :authString AND active = 1", array(":authString" => $authString)); if ($private) { return $msgData->user->reply("**Error:** you are trying to send your auth token in private. This won't work because i need Guild information. Post it in a channel on the server where you want to be authed"); } // Someone had a valid auth string, amazing if (!empty($authData)) { $groups = json_decode($authData["groups"], true); $roles = $msgData->guild->roles; $guild = $this->discord->guilds->first(); //$guild = $this->discord->guilds->get("id", $msgData->guild->id); $member = $guild->members->get("id", $msgData->user->author->id); $username = $msgData->user->author->username; $discordID = $msgData->user->author->id; $characterID = $authData["characterID"]; $corporationID = $authData["corporationID"]; $allianceID = $authData["allianceID"]; foreach ($roles as $role) { $roleName = $role->name; if (in_array($roleName, $groups)) { // Add user to group $member->addRole($role); $member->save(); } } // Add the user data to the local database so we can recheck it $this->sluggardDB->execute("REPLACE INTO authentications (discordID, characterID, corporationID, allianceID) VALUES (:discordID, :characterID, :corporationID, :allianceID)", array("discordID" => $discordID, ":characterID" => $characterID, ":corporationID" => $corporationID, ":allianceID" => $allianceID)); // Now set the auth to inactive, and we'll be golden $this->authData->execute("UPDATE registrations SET active = 0 WHERE authString = :authString", array(":authString" => $authString)); $this->log->info("Authenticating {$username} in {$channelName} on {$guildName}"); $msgData->user->reply("You have now been added to the following groups: " . implode(", ", $groups)); } else { $msgData->user->reply("**Error:** you are trying to use an already used auth code, or a non-existing auth code. Either way, prepare to get #rekt"); } } }
/** * When the bot's tick hits a specified time, this is started * * Runtime is defined in $this->information(), timerFrequency */ public function onTimer() { $this->log->info("Memory in use: " . memory_get_usage() / 1024 / 1024 . "MB"); gc_collect_cycles(); $this->log->info("Memory in use after garbage collection: " . memory_get_usage() / 1024 / 1024 . "MB"); }