deCloudflare/tool/altlinkIRC/code.php
2022-04-04 02:55:35 +02:00

124 lines
4.5 KiB
PHP

<?php
set_time_limit(0);
require '/collaboration/your_collaboration_matters.pr';
require '/collaboration/gitlab.pr';
require '/collaboration/irc.pr';
require '/collaboration/domains.pr';
//-
define('OBSERVE_SERVER', $argv[1]);
define('OBSERVE_CHAN', explode(',', $argv[2]));
define('MY_NAME', 'altlink_' . randBytes(9));
define('MAX_CONNECT_RETRY', 100);
//-
irc_connect();
$irc_connectcnt = 0;
$irc_lastACK = gmdate('U');
while (1) {
if ($irc_lastACK < gmdate('U', strtotime('9 minutes ago'))) {
$sox = false;
debugatme('[INFO] last PING was not heard.', false);
}
if ($sox === false) {
$irc_connectcnt++;
if ($irc_connectcnt < MAX_CONNECT_RETRY) {
debugatme('reconnect ' . OBSERVE_SERVER);
sleep(5);
irc_connect();
} else {
debugatme('[WARN] tried enough, disconnecting ' . OBSERVE_SERVER, true);
}
}
while ($data = fgets($sox, 2048)) {
flush();
$dataP = explode(' ', $data);
if ($dataP[0] == 'PING') {
$irc_connectcnt = 0;
$irc_lastACK = gmdate('U');
fwrite($sox, "PONG {$dataP[1]}\n");
continue;
}
if (strpos($dataP[0], ':') !== 0) {
continue;
}
$user_who = ltrim(explode('!', $dataP[0], 2)[0], ':');
if ($user_who == MY_NAME) {
continue;
}
if ($dataP[1] == 'KICK' && $dataP[3] == MY_NAME) {
debugatme("Murder {$dataP[2]} by {$user_who}", true);
}
if ($dataP[1] != 'PRIVMSG') {
continue;
}
$irc_connectcnt = 0;
$irc_lastACK = gmdate('U');
if (strpos($dataP[2], '#') === 0) {
$user_said = str_clnspace(explode($dataP[2] . ' :', $data, 2)[1]);
if (strpos($user_said, MY_NAME) !== false) {
$user_said = str_clean_str($user_said, MY_NAME);
if (strlen($user_said) < 10 || string_has_bitch($user_said)) {
continue;
}
debugatme(' sending to git!');
$got = @json_decode(gitlab_create_anonymous('[scrubbed]@' . OBSERVE_SERVER, get_clean_title($user_said), $user_said, 'IRC'), true);
if (isset($got['web_url'])) {
fwrite($sox, "PRIVMSG {$dataP[2]} :👍 {$got['web_url']}\n");
}
continue;
}
if (strlen($user_said) < 11 || strpos($user_said, '://') === false) {
continue;
}
$urls = array_values(
array_unique(
array_filter(
array_map(function ($l) {
return is_valid_url($l) ? $l : '';
}, explode(' ', $user_said))
)
)
);
if (count($urls) == 0) {
continue;
}
$kvs = [];
foreach ($urls as $url) {
$fqdn = explode('/', explode('://', $url, 2)[1], 2)[0];
if (strlen($fqdn) < 4) {
continue;
}
$domain = toBaseDomain($fqdn);
if (domain_typeWhite($domain)) {
continue;
}
dbcall_hi();
$yesCloudFlare = domain_typeCloudflare($domain);
dbcall_bye();
if (!$yesCloudFlare) {
continue;
}
if (!isset($kvs[$domain])) {
$kvs[$domain] = $url;
}
}
if (count(array_keys($kvs)) == 0) {
continue;
}
foreach ($kvs as $k => $v) {
fwrite($sox, "NOTICE {$dataP[2]} :📣 CloudFlare: {$k} | 🙆 Alternative: https://web.archive.org/web/{$v} , https://timetravel.mementoweb.org/list/" . gmdate('Ym') . "/{$v}\n");
}
} elseif ($dataP[2] == MY_NAME) {
$user_said = str_clean_str($data, MY_NAME);
if (strlen($user_said) < 10 || string_has_bitch($user_said)) {
continue;
}
debugatme(' sending to git!');
$got = @json_decode(gitlab_create_anonymous('[scrubbed]@' . OBSERVE_SERVER, get_clean_title($user_said), $user_said, 'IRC'), true);
if (isset($got['web_url'])) {
fwrite($sox, "PRIVMSG {$user_who} :👍 {$got['web_url']}\n");
}
} else {
continue;
}
}
}