*/ if (isset($_GET['src']) || !getenv('NBRIO')) { header('Content-Type: text/plain'); die(file_get_contents(__FILE__)); } function fjson($f, $x) { file_put_contents($f, json_encode($x, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE)."\n", FILE_APPEND); } function fpost($f, $x) { file_put_contents("$f.url", "url=$x\n"); exec('curl -s -d '.escapeshellarg("@$f"). ' -H "Content-Type: application/json" -X POST'. ' -K '.escapeshellarg("$f.url"), $o); fjson("$f.res", json_decode(($o = implode("\n", $o))) ?: $o); } $now = time(); $self = __DIR__.'/.'.basename(__FILE__); $url = getenv('NBRIO'); file_put_contents("$self.url", "url=$url/getUpdates?offset=".(@file_get_contents("$self.id")+1)."\n"); $j = []; exec('curl -s -K '.escapeshellarg("$self.url"), $j); $j = json_decode(implode('', $j)); foreach ($j->result as $x) { $id = (float)$x->update_id; file_put_contents("$self.id", $id); fjson("$self.$id", $x); if (isset($x->message)) { $chat = $x->message->chat; $new = in_array($chat->id, [ -1001302220953, -1001339115445, -1001405136925, -1001582108010]) ? '%s, привіт. Напиши "%s", щоб погодитися з правилами чату.' : '%s, hello. Say %s to agree with chat rules.'; $pass = in_array($chat->id, [-1001339115445, -1001582108010]) ? 'Вегань!' : 'trans rights'; if (isset($x->message->left_chat_member)) { $usr = $x->message->left_chat_member; foreach (scandir(__DIR__) as $f) if (strpos(($f = __DIR__."/$f"), ($pre = "$self.")) === 0 && preg_match('/([0-9-]+)\.([0-9-]+)\.new\.POSTsendMessage\.res/', substr($f, strlen($pre)), $y) && $y[1] == $chat->id && $y[2] == $usr->id && ($j_ = json_decode(file_get_contents($f))) && isset($j_->result) && isset($j_->result->message_id)) { $f = "$self.$id.msg.$chat->id.$usr->id.left.POSTdeleteMessage.".$j_->result->message_id; fjson($f, [ 'chat_id' => $chat->id, 'message_id' => $j_->result->message_id ]); fpost($f, "$url/deleteMessage"); } } elseif (isset($x->message->new_chat_members)) foreach ($x->message->new_chat_members as $usr) { if ($usr->is_bot) { fjson("$self.$id.msg.$chat->id.$usr->id.bot", 0); continue; } $fail = 0; $states = []; foreach (scandir(__DIR__) as $f) if (strpos(__DIR__."/$f", "$self.") === 0 && preg_match('/([0-9-]+)\.([0-9-]+)\.(bot|fail|left|new|pass)/', substr(__DIR__."/$f", strlen("$self.")), $y) && $y[1] == $chat->id && $y[2] == $usr->id) { if ($y[3] == 'fail') $fail++; $states[] = [$f, $y]; } /* if ($states) fjson("$self.$id.msg.$chat->id.$usr->id.state", $states); */ if ($fail) { $f = "$self.$id.msg.$chat->id.$usr->id.fail.POSTbanChatMember"; fjson($f, ['chat_id' => $chat, 'user_id' => $usr]); fpost($f, "$url/banChatMember"); continue; } $f = "$self.$id.msg.$chat->id.$usr->id.new.POSTrestrictChatMember"; fjson($f, [ 'chat_id' => $chat->id, 'permissions' => [ 'can_add_web_page_previews' => false, 'can_change_info' => false, 'can_invite_users' => false, 'can_pin_messages' => false, 'can_send_media_messages' => false, 'can_send_messages' => true, 'can_send_other_messages' => false, 'can_send_polls' => false ], 'user_id' => $usr->id ]); fpost($f, "$url/restrictChatMember"); $f = "$self.$id.msg.$chat->id.$usr->id.new.POSTsendMessage"; fjson($f, array_merge( [ 'chat_id' => $chat->id, 'text' => sprintf($new, "$usr->first_name ($usr->id)", $pass) ], !empty($x->message->message_thread_id) ? ['message_thread_id' => $x->message->message_thread_id] : [])); fpost($f, "$url/sendMessage"); } elseif (isset($x->message->from) && $x->message->from->is_bot) { $usr = $x->message->from; fjson("$self.$id.msg.$chat->id.$usr->id.bot", 0); } elseif (isset($x->message->from)) { $usr = $x->message->from; $state = 'left'; $states = []; foreach (scandir(__DIR__) as $f) if (strpos(__DIR__."/$f", "$self.") === 0 && preg_match('/([0-9-]+)\.([0-9-]+)\.(bot|fail|left|new|pass)/', substr(__DIR__."/$f", strlen("$self.")), $y) && $y[1] == $chat->id && $y[2] == $usr->id) { $state = $y[3]; $states[] = [$f, $y]; } /* if ($states) fjson("$self.$id.msg.$chat->id.$usr->id.state", $states); */ if ($state == 'new' && isset($x->message->text) && mb_stripos($x->message->text, $pass) !== false) { $f = "$self.$id.msg.$chat->id.$usr->id.pass.POSTrestrictChatMember"; fjson($f, [ 'chat_id' => $chat->id, 'permissions' => ['can_send_other_messages' => true], 'user_id' => $usr->id ]); fpost($f, "$url/restrictChatMember"); foreach (scandir(__DIR__) as $f) if (strpos(($f = __DIR__."/$f"), ($pre = "$self.")) === 0 && preg_match('/([0-9-]+)\.([0-9-]+)\.new\.POSTsendMessage\.res/', substr($f, strlen($pre)), $y) && $y[1] == $chat->id && $y[2] == $usr->id && ($j_ = json_decode(file_get_contents($f))) && isset($j_->result) && isset($j_->result->message_id)) { $f = "$self.$id.msg.$chat->id.$usr->id.pass.POSTdeleteMessage.".$j_->result->message_id; fjson($f, [ 'chat_id' => $chat->id, 'message_id' => $j_->result->message_id ]); fpost($f, "$url/deleteMessage"); } } elseif ($state == 'new') { $f = "$self.$id.msg.$chat->id.$usr->id.POSTdeleteMessage"; fjson($f, [ 'chat_id' => $chat->id, 'message_id' => $x->message->message_id ]); fpost($f, "$url/deleteMessage"); } } } $state = []; foreach (scandir(__DIR__) as $f) if (strpos(__DIR__."/$f", "$self.") === 0 && preg_match('/([0-9-]+\.[0-9-]+)\.(bot|fail|left|new|pass)/', substr(__DIR__."/$f", strlen("$self.")), $y)) $state[$y[1]] = [filemtime($f), $y[2]]; foreach ($state as $k => list($t, $x)) if ($x == 'new' && $t < $now - 86400) { list($chat, $usr) = explode('.', $k); $f = "$self.$id.msg.$k.fail.POSTbanChatMember"; fjson($f, ['chat_id' => $chat, 'user_id' => $usr]); fpost($f, "$url/banChatMember"); } }