shibdib /
Dramiel
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
| 1 | <?php |
||
| 2 | /** |
||
| 3 | * The MIT License (MIT). |
||
| 4 | * |
||
| 5 | * Copyright (c) 2016 Robert Sardinia |
||
| 6 | * |
||
| 7 | * Permission is hereby granted, free of charge, to any person obtaining a copy |
||
| 8 | * of this software and associated documentation files (the "Software"), to deal |
||
| 9 | * in the Software without restriction, including without limitation the rights |
||
| 10 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||
| 11 | * copies of the Software, and to permit persons to whom the Software is |
||
| 12 | * furnished to do so, subject to the following conditions: |
||
| 13 | * |
||
| 14 | * The above copyright notice and this permission notice shall be included in all |
||
| 15 | * copies or substantial portions of the Software. |
||
| 16 | * |
||
| 17 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||
| 18 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||
| 19 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||
| 20 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||
| 21 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||
| 22 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
||
| 23 | * SOFTWARE. |
||
| 24 | */ |
||
| 25 | use Discord\Discord; |
||
| 26 | use Discord\Parts\Channel\Channel; |
||
| 27 | use Discord\Parts\Channel\Message; |
||
| 28 | |||
| 29 | /** |
||
| 30 | * Class notifications. |
||
| 31 | * |
||
| 32 | * @property keyID |
||
| 33 | * @property vCode |
||
| 34 | */ |
||
| 35 | class notifications |
||
| 36 | { |
||
| 37 | /* |
||
| 38 | * @var |
||
| 39 | */ |
||
| 40 | public $config; |
||
| 41 | /* |
||
| 42 | * @var |
||
| 43 | */ |
||
| 44 | public $discord; |
||
| 45 | /* |
||
| 46 | * @var |
||
| 47 | */ |
||
| 48 | public $logger; |
||
| 49 | /* |
||
| 50 | * @var |
||
| 51 | */ |
||
| 52 | public $nextCheck; |
||
| 53 | /* |
||
| 54 | * @var |
||
| 55 | */ |
||
| 56 | public $keys; |
||
| 57 | /* |
||
| 58 | * @var |
||
| 59 | */ |
||
| 60 | public $keyCount; |
||
| 61 | /* |
||
| 62 | * @var |
||
| 63 | */ |
||
| 64 | public $toDiscordChannel; |
||
| 65 | /* |
||
| 66 | * @var |
||
| 67 | */ |
||
| 68 | public $newestNotificationID; |
||
| 69 | /* |
||
| 70 | * @var |
||
| 71 | */ |
||
| 72 | public $maxID; |
||
| 73 | /* |
||
| 74 | * @var |
||
| 75 | */ |
||
| 76 | public $charApi; |
||
| 77 | /* |
||
| 78 | * @var |
||
| 79 | */ |
||
| 80 | public $corpApi; |
||
| 81 | /* |
||
| 82 | * @var |
||
| 83 | */ |
||
| 84 | public $alliApi; |
||
| 85 | |||
| 86 | /** |
||
| 87 | * @param $config |
||
| 88 | * @param $discord |
||
| 89 | * @param $logger |
||
| 90 | */ |
||
| 91 | public function init($config, $discord, $logger) |
||
| 92 | { |
||
| 93 | $this->config = $config; |
||
| 94 | $this->discord = $discord; |
||
| 95 | $this->logger = $logger; |
||
| 96 | $this->toDiscordChannel = $config['plugins']['notifications']['channelID']; |
||
| 97 | $this->newestNotificationID = getPermCache('newestNotificationID'); |
||
| 98 | $this->maxID = 0; |
||
| 99 | $this->keyID = $config['eve']['apiKeys']['user1']['keyID']; |
||
| 100 | $this->vCode = $config['eve']['apiKeys']['user1']['vCode']; |
||
| 101 | $this->characterID = $config['eve']['apiKeys']['user1']['characterID']; |
||
| 102 | // Rena APIs |
||
| 103 | $this->charApi = 'http://rena.karbowiak.dk/api/character/information/'; |
||
| 104 | $this->corpApi = 'http://rena.karbowiak.dk/api/corporation/information/'; |
||
| 105 | $this->alliApi = 'http://rena.karbowiak.dk/api/alliance/information/'; |
||
| 106 | $lastCheck = getPermCache("notificationsLastChecked{$this->keyID}"); |
||
| 107 | if ($lastCheck == null) { |
||
| 108 | // Schedule it for right now if first run |
||
| 109 | setPermCache("notificationsLastChecked{$this->keyID}", time() - 5); |
||
| 110 | } |
||
| 111 | } |
||
| 112 | |||
| 113 | |||
| 114 | View Code Duplication | public function tick() |
|
|
0 ignored issues
–
show
|
|||
| 115 | { |
||
| 116 | $lastChecked = getPermCache("notificationsLastChecked{$this->keyID}"); |
||
| 117 | $keyID = $this->keyID; |
||
| 118 | $vCode = $this->vCode; |
||
| 119 | $characterID = $this->characterID; |
||
| 120 | |||
| 121 | if ($lastChecked <= time()) { |
||
| 122 | $this->logger->addInfo("Checking API Key {$keyID} for notifications.."); |
||
| 123 | $this->getNotifications($keyID, $vCode, $characterID); |
||
| 124 | } |
||
| 125 | } |
||
| 126 | |||
| 127 | /** |
||
| 128 | * @param $keyID |
||
| 129 | * @param $vCode |
||
| 130 | * @param $characterID |
||
| 131 | * |
||
| 132 | * @return null |
||
| 133 | */ |
||
| 134 | public function getNotifications($keyID, $vCode, $characterID) |
||
| 135 | { |
||
| 136 | try { |
||
| 137 | $url = "https://api.eveonline.com/char/Notifications.xml.aspx?keyID={$keyID}&vCode={$vCode}&characterID={$characterID}"; |
||
| 138 | $xml = makeApiRequest($url); |
||
| 139 | date_default_timezone_set('UTC'); |
||
| 140 | $cached = $xml->cachedUntil[0]; |
||
| 141 | $baseUnix = strtotime($cached); |
||
| 142 | $cacheClr = $baseUnix - 13500; |
||
| 143 | View Code Duplication | if ($cacheClr <= time()) { |
|
| 144 | $weirdTime = time() + 1830; |
||
| 145 | $cacheTimer = gmdate('Y-m-d H:i:s', $weirdTime); |
||
| 146 | setPermCache("notificationsLastChecked{$keyID}", $weirdTime); |
||
| 147 | } else { |
||
| 148 | $cacheTimer = gmdate('Y-m-d H:i:s', $cacheClr); |
||
| 149 | setPermCache("notificationsLastChecked{$keyID}", $cacheClr); |
||
| 150 | } |
||
| 151 | $data = json_decode(json_encode(simplexml_load_string(downloadData($url), |
||
| 152 | 'SimpleXMLElement', LIBXML_NOCDATA)), true); |
||
| 153 | $data = $data['result']['rowset']['row']; |
||
| 154 | // If there is no data, just quit.. |
||
| 155 | if (empty($data)) { |
||
| 156 | return; |
||
| 157 | } |
||
| 158 | $fixedData = []; |
||
| 159 | // Sometimes there is only ONE notification, so.. yeah.. |
||
| 160 | if (isset($data['@attributes'])) { |
||
| 161 | $fixedData[] = $data['@attributes']; |
||
| 162 | } |
||
| 163 | if (count($data) > 1) { |
||
| 164 | foreach ($data as $multiNotif) { |
||
| 165 | $fixedData[] = $multiNotif['@attributes']; |
||
| 166 | } |
||
| 167 | } |
||
| 168 | foreach ($fixedData as $notification) { |
||
| 169 | $notificationID = $notification['notificationID']; |
||
| 170 | $typeID = $notification['typeID']; |
||
| 171 | $sentDate = $notification['sentDate']; |
||
| 172 | if ($notificationID > $this->newestNotificationID) { |
||
| 173 | $notificationString = explode("\n", $this->getNotificationText($keyID, $vCode, $characterID, |
||
| 174 | $notificationID)); |
||
| 175 | switch ($typeID) { |
||
| 176 | case 5: // War Declared |
||
| 177 | $aggAllianceID = trim(explode(': ', $notificationString[2])[1]); |
||
| 178 | $aggAllianceName = $this->apiData('alli', $aggAllianceID)['allianceName']; |
||
| 179 | $delayHours = trim(explode(': ', $notificationString[3])[1]); |
||
| 180 | $msg = "@everyone | War declared by {$aggAllianceName}. Fighting begins in roughly {$delayHours} hours."; |
||
| 181 | break; |
||
| 182 | case 7: // War Declared corp |
||
| 183 | $aggCorpID = trim(explode(': ', $notificationString[2])[1]); |
||
| 184 | $aggCorpName = $this->apiData('corp', $aggCorpID)['corporationName']; |
||
| 185 | $msg = "@everyone | War declared by {$aggCorpName}. Fighting begins in roughly 24 hours."; |
||
| 186 | break; |
||
| 187 | case 8: // Alliance war invalidated by CONCORD |
||
| 188 | $aggAllianceID = trim(explode(': ', $notificationString[2])[1]); |
||
| 189 | $aggAllianceName = $this->apiData('alli', $aggAllianceID)['allianceName']; |
||
| 190 | $msg = "War declared by {$aggAllianceName} has been invalidated. Fighting ends in roughly 24 hours."; |
||
| 191 | break; |
||
| 192 | case 10: // Bill issued |
||
| 193 | $msg = 'skip'; |
||
| 194 | break; |
||
| 195 | case 14: // Bounty payment |
||
| 196 | $msg = 'skip'; |
||
| 197 | break; |
||
| 198 | case 16: // Mail |
||
| 199 | $msg = 'skip'; |
||
| 200 | break; |
||
| 201 | case 19: // corp tax changed |
||
| 202 | $corpID = trim(explode(': ', $notificationString[0])[1]); |
||
| 203 | $corpName = $this->apiData('corp', $corpID)['corporationName']; |
||
| 204 | $oldTax = trim(explode(': ', $notificationString[2])[1]); |
||
| 205 | $newTax = trim(explode(': ', $notificationString[1])[1]); |
||
| 206 | $msg = "{$corpName} tax changed from {$oldTax}% to {$newTax}%"; |
||
| 207 | break; |
||
| 208 | case 21: // member left corp |
||
| 209 | $msg = 'skip'; |
||
| 210 | break; |
||
| 211 | case 35: // Insurance payment |
||
| 212 | $msg = 'skip'; |
||
| 213 | break; |
||
| 214 | View Code Duplication | case 41: // System lost |
|
| 215 | $systemID = trim(explode(': ', $notificationString[2])[1]); |
||
| 216 | $systemName = dbQueryField('SELECT solarSystemName FROM mapSolarSystems WHERE solarSystemID = :id', |
||
| 217 | 'solarSystemName', [':id' => $systemID], 'ccp'); |
||
| 218 | $allianceID = trim(explode(': ', $notificationString[0])[1]); |
||
| 219 | $allianceName = $this->apiData('alli', $allianceID)['allianceName']; |
||
| 220 | $msg = "{$allianceName} has lost control of **{$systemName}**"; |
||
| 221 | break; |
||
| 222 | View Code Duplication | case 43: // System captured |
|
| 223 | $systemID = trim(explode(': ', $notificationString[2])[1]); |
||
| 224 | $systemName = dbQueryField('SELECT solarSystemName FROM mapSolarSystems WHERE solarSystemID = :id', |
||
| 225 | 'solarSystemName', [':id' => $systemID], 'ccp'); |
||
| 226 | $allianceID = trim(explode(': ', $notificationString[0])[1]); |
||
| 227 | $allianceName = $this->apiData('alli', $allianceID)['allianceName']; |
||
| 228 | $msg = "{$allianceName} now controls **{$systemName}**"; |
||
| 229 | break; |
||
| 230 | case 52: // clone revoked |
||
| 231 | $msg = 'skip'; |
||
| 232 | break; |
||
| 233 | case 57: // jump clone destruction |
||
| 234 | $msg = 'skip'; |
||
| 235 | break; |
||
| 236 | case 71: // Mission Expiration |
||
| 237 | $msg = 'skip'; |
||
| 238 | break; |
||
| 239 | case 75: // POS / POS Module under attack |
||
| 240 | $aggAllianceID = trim(explode(': ', $notificationString[0])[1]); |
||
| 241 | $aggAllianceName = $this->apiData('alli', $aggAllianceID)['allianceName']; |
||
| 242 | $aggCorpID = trim(explode(': ', $notificationString[1])[1]); |
||
| 243 | $aggCorpName = $this->apiData('corp', $aggCorpID)['corporationName']; |
||
| 244 | $aggID = trim(explode(': ', $notificationString[2])[1]); |
||
| 245 | $aggCharacterName = $this->apiData('char', $aggID)['characterName']; |
||
| 246 | $armorValue = trim(explode(': ', $notificationString[3])[1]); |
||
| 247 | $hullValue = trim(explode(': ', $notificationString[4])[1]); |
||
| 248 | $moonID = trim(explode(': ', $notificationString[5])[1]); |
||
| 249 | $moonName = dbQueryField('SELECT itemName FROM mapAllCelestials WHERE itemID = :id', |
||
| 250 | 'itemName', [':id' => $moonID], 'ccp'); |
||
| 251 | $shieldValue = trim(explode(': ', $notificationString[6])[1]); |
||
| 252 | $solarSystemID = trim(explode(': ', $notificationString[7])[1]); |
||
| 253 | $typeID = trim(explode(': ', $notificationString[8])[1]); |
||
| 254 | $typeName = dbQueryField('SELECT typeName FROM invTypes WHERE typeID = :id', |
||
| 255 | 'typeName', [':id' => $typeID], 'ccp'); |
||
| 256 | $systemName = dbQueryField('SELECT solarSystemName FROM mapSolarSystems WHERE solarSystemID = :id', |
||
| 257 | 'solarSystemName', [':id' => $solarSystemID], 'ccp'); |
||
| 258 | $msg = "{$typeName} under attack in **{$systemName} - {$moonName}** by {$aggCharacterName} ({$aggCorpName} / {$aggAllianceName}). Status: Hull: {$hullValue}, Armor: {$armorValue}, Shield: {$shieldValue}"; |
||
| 259 | break; |
||
| 260 | case 76: // Tower resource alert |
||
| 261 | $moonID = trim(explode(': ', $notificationString[2])[1]); |
||
| 262 | $moonName = dbQueryField('SELECT itemName FROM mapAllCelestials WHERE itemID = :id', |
||
| 263 | 'itemName', [':id' => $moonID], 'ccp'); |
||
| 264 | $solarSystemID = trim(explode(': ', $notificationString[3])[1]); |
||
| 265 | $systemName = dbQueryField('SELECT solarSystemName FROM mapSolarSystems WHERE solarSystemID = :id', |
||
| 266 | 'solarSystemName', [':id' => $solarSystemID], 'ccp'); |
||
| 267 | $blocksRemaining = trim(explode(': ', $notificationString[6])[1]); |
||
| 268 | $typeID = trim(explode(': ', $notificationString[7])[1]); |
||
| 269 | $typeName = dbQueryField('SELECT typeName FROM invTypes WHERE typeID = :id', |
||
| 270 | 'typeName', [':id' => $typeID], 'ccp'); |
||
| 271 | $msg = "POS in {$systemName} - {$moonName} needs fuel. Only {$blocksRemaining} {$typeName}'s remaining."; |
||
| 272 | break; |
||
| 273 | case 88: // IHUB is being attacked |
||
| 274 | $aggAllianceID = trim(explode(': ', $notificationString[0])[1]); |
||
| 275 | $aggAllianceName = $this->apiData('alli', $aggAllianceID)['allianceName']; |
||
| 276 | $aggCorpID = trim(explode(': ', $notificationString[0])[1]); |
||
| 277 | $aggCorpName = $this->apiData('corp', $aggCorpID)['corporationName']; |
||
| 278 | $aggID = trim(explode(': ', $notificationString[1])[1]); |
||
| 279 | $aggCharacterName = $this->apiData('char', $aggID)['characterName']; |
||
| 280 | $armorValue = trim(explode(': ', $notificationString[3])[1]); |
||
| 281 | $hullValue = trim(explode(': ', $notificationString[4])[1]); |
||
| 282 | $shieldValue = trim(explode(': ', $notificationString[5])[1]); |
||
| 283 | $solarSystemID = trim(explode(': ', $notificationString[6])[1]); |
||
| 284 | $systemName = dbQueryField('SELECT solarSystemName FROM mapSolarSystems WHERE solarSystemID = :id', |
||
| 285 | 'solarSystemName', [':id' => $solarSystemID], 'ccp'); |
||
| 286 | $msg = "IHUB under attack in **{$systemName}** by {$aggCharacterName} ({$aggCorpName} / {$aggAllianceName}). Status: Hull: {$hullValue}, Armor: {$armorValue}, Shield: {$shieldValue}"; |
||
| 287 | break; |
||
| 288 | case 93: // Customs office is being attacked |
||
| 289 | $aggAllianceID = trim(explode(': ', $notificationString[0])[1]); |
||
| 290 | $aggAllianceName = $this->apiData('alli', $aggAllianceID)['allianceName']; |
||
| 291 | $aggCorpID = trim(explode(': ', $notificationString[0])[1]); |
||
| 292 | $aggCorpName = $this->apiData('corp', $aggCorpID)['corporationName']; |
||
| 293 | $aggID = trim(explode(': ', $notificationString[2])[1]); |
||
| 294 | $aggCharacterName = $this->apiData('char', $aggID)['characterName']; |
||
| 295 | $planetID = trim(explode(': ', $notificationString[3])[1]); |
||
| 296 | $planetName = dbQueryField('SELECT itemName FROM mapAllCelestials WHERE itemID = :id', |
||
| 297 | 'itemName', [':id' => $planetID], 'ccp'); |
||
| 298 | $shieldValue = trim(explode(': ', $notificationString[5])[1]); |
||
| 299 | $solarSystemID = trim(explode(': ', $notificationString[6])[1]); |
||
| 300 | $systemName = dbQueryField('SELECT solarSystemName FROM mapSolarSystems WHERE solarSystemID = :id', |
||
| 301 | 'solarSystemName', [':id' => $solarSystemID], 'ccp'); |
||
| 302 | $msg = "Customs Office under attack in **{$systemName}** ($planetName) by {$aggCharacterName} ({$aggCorpName} / {$aggAllianceName}). Shield Status: {$shieldValue}"; |
||
| 303 | break; |
||
| 304 | case 94: // POCO Reinforced |
||
| 305 | $msg = 'Customs Office reinforced.'; |
||
| 306 | break; |
||
| 307 | case 95: // IHub Transfer |
||
| 308 | $msg = 'skip'; |
||
| 309 | break; |
||
| 310 | case 103: // War support offer? I think? |
||
| 311 | $msg = 'skip'; |
||
| 312 | break; |
||
| 313 | case 111: // Bounty |
||
| 314 | $msg = 'skip'; |
||
| 315 | break; |
||
| 316 | case 128: // Corp App |
||
| 317 | $msg = 'skip'; |
||
| 318 | break; |
||
| 319 | case 130: // Corp app withdrawn? |
||
| 320 | $msg = 'skip'; |
||
| 321 | break; |
||
| 322 | case 138: // Clone activation |
||
| 323 | $msg = 'skip'; |
||
| 324 | break; |
||
| 325 | case 140: // Kill report |
||
| 326 | $msg = 'skip'; |
||
| 327 | break; |
||
| 328 | case 141: // Kill report |
||
| 329 | $msg = 'skip'; |
||
| 330 | break; |
||
| 331 | View Code Duplication | case 147: // Entosis has stated |
|
| 332 | $systemID = trim(explode(': ', $notificationString[0])[1]); |
||
| 333 | $systemName = dbQueryField('SELECT solarSystemName FROM mapSolarSystems WHERE solarSystemID = :id', |
||
| 334 | 'solarSystemName', [':id' => $systemID], 'ccp'); |
||
| 335 | $typeID = trim(explode(': ', $notificationString[1])[1]); |
||
| 336 | $typeName = dbQueryField('SELECT typeName FROM invTypes WHERE typeID = :id', |
||
| 337 | 'typeName', [':id' => $typeID], 'ccp'); |
||
| 338 | $msg = "@everyone | Entosis has started in **{$systemName}** on **{$typeName}** (Date: **{$sentDate}**)"; |
||
| 339 | break; |
||
| 340 | View Code Duplication | case 148: // Entosis enabled a module ?????? |
|
| 341 | $systemID = trim(explode(': ', $notificationString[0])[1]); |
||
| 342 | $systemName = dbQueryField('SELECT solarSystemName FROM mapSolarSystems WHERE solarSystemID = :id', |
||
| 343 | 'solarSystemName', [':id' => $systemID], 'ccp'); |
||
| 344 | $typeID = trim(explode(': ', $notificationString[1])[1]); |
||
| 345 | $typeName = dbQueryField('SELECT typeName FROM invTypes WHERE typeID = :id', |
||
| 346 | 'typeName', [':id' => $typeID], 'ccp'); |
||
| 347 | $msg = "Entosis has enabled a module in **{$systemName}** on **{$typeName}** (Date: **{$sentDate}**)"; |
||
| 348 | break; |
||
| 349 | View Code Duplication | case 149: // Entosis disabled a module |
|
| 350 | $systemID = trim(explode(': ', $notificationString[0])[1]); |
||
| 351 | $systemName = dbQueryField('SELECT solarSystemName FROM mapSolarSystems WHERE solarSystemID = :id', |
||
| 352 | 'solarSystemName', [':id' => $systemID], 'ccp'); |
||
| 353 | $typeID = trim(explode(': ', $notificationString[1])[1]); |
||
| 354 | $typeName = dbQueryField('SELECT typeName FROM invTypes WHERE typeID = :id', |
||
| 355 | 'typeName', [':id' => $typeID], 'ccp'); |
||
| 356 | $msg = "Entosis has disabled a module in **{$systemName}** on **{$typeName}** (Date: **{$sentDate}**)"; |
||
| 357 | break; |
||
| 358 | View Code Duplication | case 160: // Entosis successful |
|
| 359 | $systemID = trim(explode(': ', $notificationString[2])[1]); |
||
| 360 | $systemName = dbQueryField('SELECT solarSystemName FROM mapSolarSystems WHERE solarSystemID = :id', 'solarSystemName', [':id' => $systemID], 'ccp'); |
||
| 361 | $msg = "Hostile entosis successful. A structure in **{$systemName}** has entered reinforced mode."; |
||
| 362 | break; |
||
| 363 | View Code Duplication | case 161: // Command Nodes Decloaking |
|
| 364 | $systemID = trim(explode(': ', $notificationString[2])[1]); |
||
| 365 | $systemName = dbQueryField('SELECT solarSystemName FROM mapSolarSystems WHERE solarSystemID = :id', |
||
| 366 | 'solarSystemName', [':id' => $systemID], 'ccp'); |
||
| 367 | $msg = "Command nodes decloaking for **{$systemName}**"; |
||
| 368 | break; |
||
| 369 | View Code Duplication | case 163: // Outpost freeport |
|
| 370 | $systemID = trim(explode(': ', $notificationString[1])[1]); |
||
| 371 | $systemName = dbQueryField('SELECT solarSystemName FROM mapSolarSystems WHERE solarSystemID = :id', |
||
| 372 | 'solarSystemName', [':id' => $systemID], 'ccp'); |
||
| 373 | $msg = "Station in **{$systemName}** has now entered freeport mode."; |
||
| 374 | break; |
||
| 375 | case 182: // Citadel being anchored |
||
| 376 | $corpName = trim(explode(': ', $notificationString[1])[1]); |
||
| 377 | $solarSystemID = trim(explode(': ', $notificationString[2])[1]); |
||
| 378 | $systemName = dbQueryField('SELECT solarSystemName FROM mapSolarSystems WHERE solarSystemID = :id', |
||
| 379 | 'solarSystemName', [':id' => $solarSystemID], 'ccp'); |
||
| 380 | $msg = "Citadel owned by **{$corpName}** is being anchored in **{$systemName}**."; |
||
| 381 | break; |
||
| 382 | case 184: // Citadel under attack |
||
| 383 | $aggID = trim(explode(': ', $notificationString[7])[1]); |
||
| 384 | $aggCharacterName = $this->apiData('char', $aggID)['characterName']; |
||
| 385 | $solarSystemID = trim(explode(': ', $notificationString[15])[1]); |
||
| 386 | $aggAllianceID = trim(explode(': ', $notificationString[0])[1]); |
||
| 387 | $aggAllianceName = $this->apiData('alli', $aggAllianceID)['allianceName']; |
||
| 388 | $aggCorpID = trim(explode('- ', $notificationString[11])[1]); |
||
| 389 | $aggCorpName = $this->apiData('corp', $aggCorpID)['corporationName']; |
||
| 390 | $systemName = dbQueryField('SELECT solarSystemName FROM mapSolarSystems WHERE solarSystemID = :id', |
||
| 391 | 'solarSystemName', [':id' => $solarSystemID], 'ccp'); |
||
| 392 | $msg = "@everyone | Citadel under attack in **{$systemName}** by **{$aggCharacterName}** ({$aggCorpName} / {$aggAllianceName})."; |
||
| 393 | break; |
||
| 394 | View Code Duplication | case 185: // Citadel online |
|
| 395 | $solarSystemID = trim(explode(': ', $notificationString[0])[1]); |
||
| 396 | $systemName = dbQueryField('SELECT solarSystemName FROM mapSolarSystems WHERE solarSystemID = :id', |
||
| 397 | 'solarSystemName', [':id' => $solarSystemID], 'ccp'); |
||
| 398 | $msg = "Citadel now online in **{$systemName}**."; |
||
| 399 | break; |
||
| 400 | View Code Duplication | case 188: // Citadel destroyed |
|
| 401 | $corpID = trim(explode('- ', $notificationString[3])[1]); |
||
| 402 | $corpName = $this->apiData('corp', $corpID)['corporationName']; |
||
| 403 | $solarSystemID = trim(explode(': ', $notificationString[5])[1]); |
||
| 404 | $systemName = dbQueryField('SELECT solarSystemName FROM mapSolarSystems WHERE solarSystemID = :id', |
||
| 405 | 'solarSystemName', [':id' => $solarSystemID], 'ccp'); |
||
| 406 | $msg = "Citadel owned by **{$corpName}** in **{$systemName}** has been destroyed."; |
||
| 407 | break; |
||
| 408 | case 199: // citadel delivery |
||
| 409 | $msg = 'skip'; |
||
| 410 | break; |
||
| 411 | default: // Unknown typeID |
||
| 412 | $string = implode(' ', $notificationString); |
||
| 413 | $msg = "typeID {$typeID} is an unmapped notification, send Mr Twinkie this whole message via evemail or github issue. {$string}"; |
||
| 414 | break; |
||
| 415 | } |
||
| 416 | |||
| 417 | if ($msg == 'skip') { |
||
| 418 | return; |
||
| 419 | } |
||
| 420 | if ($msg == '') { |
||
| 421 | } |
||
| 422 | $this->logger->addInfo("Notification sent to channel {$this->toDiscordChannel}, Message - {$msg}"); |
||
| 423 | $channelID = $this->toDiscordChannel; |
||
| 424 | $channel = Channel::find($channelID); |
||
| 425 | $channel->sendMessage($msg, false); |
||
| 426 | // Find the maxID so we don't output this message again in the future |
||
| 427 | $this->maxID = max($notificationID, $this->maxID); |
||
| 428 | $this->newestNotificationID = $this->maxID; |
||
| 429 | setPermCache('newestNotificationID', $this->maxID); |
||
| 430 | } |
||
| 431 | } |
||
| 432 | |||
| 433 | $this->logger->addInfo("Next Notification Check At: {$cacheTimer} EVE Time"); |
||
| 434 | } catch (Exception $e) { |
||
| 435 | $this->logger->addInfo('Notification Error: '.$e->getMessage()); |
||
| 436 | } |
||
| 437 | } |
||
| 438 | |||
| 439 | /** |
||
| 440 | * @param $keyID |
||
| 441 | * @param $vCode |
||
| 442 | * @param $characterID |
||
| 443 | * @param $notificationID |
||
| 444 | * |
||
| 445 | * @return string |
||
| 446 | */ |
||
| 447 | public function getNotificationText($keyID, $vCode, $characterID, $notificationID) |
||
| 448 | { |
||
| 449 | $url = "https://api.eveonline.com/char/NotificationTexts.xml.aspx?keyID={$keyID}&vCode={$vCode}&characterID={$characterID}&IDs={$notificationID}"; |
||
| 450 | $data = json_decode(json_encode(simplexml_load_string(downloadData($url), |
||
| 451 | 'SimpleXMLElement', LIBXML_NOCDATA)), true); |
||
| 452 | $data = $data['result']['rowset']['row']; |
||
| 453 | |||
| 454 | return $data; |
||
| 455 | } |
||
| 456 | |||
| 457 | |||
| 458 | public function onMessage() |
||
| 459 | { |
||
| 460 | } |
||
| 461 | |||
| 462 | /** |
||
| 463 | * @param string $type |
||
| 464 | * @param string $typeID |
||
| 465 | * |
||
| 466 | * @return mixed |
||
| 467 | */ |
||
| 468 | public function apiData($type, $typeID) |
||
| 469 | { |
||
| 470 | $downloadFrom = ''; |
||
| 471 | switch ($type) { |
||
| 472 | case 'char': |
||
| 473 | $downloadFrom = $this->charApi; |
||
| 474 | break; |
||
| 475 | case 'corp': |
||
| 476 | $downloadFrom = $this->corpApi; |
||
| 477 | break; |
||
| 478 | case 'alli': |
||
| 479 | $downloadFrom = $this->alliApi; |
||
| 480 | break; |
||
| 481 | } |
||
| 482 | |||
| 483 | return json_decode(downloadData($downloadFrom.$typeID.'/'), true); |
||
| 484 | } |
||
| 485 | |||
| 486 | /** |
||
| 487 | * @return array |
||
| 488 | */ |
||
| 489 | public function information() |
||
| 490 | { |
||
| 491 | return [ |
||
| 492 | 'name' => '', |
||
| 493 | 'trigger' => [''], |
||
| 494 | 'information' => '', ]; |
||
| 495 | } |
||
| 496 | } |
||
| 497 |
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.