mirror of
				https://gitlab.com/ceda_ei/Quadnite-Bot
				synced 2025-10-31 17:20:05 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			476 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			476 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| $bot_name = "quadnite_bot";
 | |
| $bot_api = require('api_key.php');
 | |
| 
 | |
| // Checks whether the given command is the same as the entered command
 | |
| function check_command($command) {
 | |
|   global $bot_name;
 | |
|   global $decoded;
 | |
|   $command_list = explode(" ", $decoded->{"message"}->{"text"});
 | |
|   if ($command_list[0] == $command || $command_list[0] == $command . "@" . $bot_name) {
 | |
|     return True;
 | |
|   }
 | |
|   else {
 | |
|     return False;
 | |
|   }
 | |
| }
 | |
| 
 | |
| // Send code back to the sender.
 | |
| function send_code($post_message, $reply=false) {
 | |
|   global $decoded;
 | |
|   global $bot_api;
 | |
|   global $chat_id;
 | |
|   $url = 'https://api.telegram.org/bot' . $bot_api . '/sendMessage';
 | |
|   $post_msg = array('chat_id' => $chat_id, 'text' => '```\n ' . $post_message . '```', 'parse_mode' => 'markdown' );
 | |
|   if ($reply != false) {
 | |
|     if ($reply === true){
 | |
|       $post_msg['reply_to_message_id'] = $decoded->{'message'}->{'message_id'};
 | |
|     }
 | |
|     else {
 | |
|       $post_msg['reply_to_message_id'] = $reply;
 | |
|     }
 | |
|   }
 | |
|   $options = array(
 | |
|     'http' => array(
 | |
|       'header' => "Content-type: application/x-www-form-urlencoded\r\n",
 | |
|       'method' => 'POST',
 | |
|       'content' => http_build_query($post_msg)
 | |
|     )
 | |
|   );
 | |
|   $context = stream_context_create($options);
 | |
|   $result = file_get_contents($url, false, $context);
 | |
| }
 | |
| 
 | |
| // Send text back to the sender.
 | |
| function send_text($post_message, $reply=false) {
 | |
|   global $decoded;
 | |
|   global $bot_api;
 | |
|   global $chat_id;
 | |
|   $url = 'https://api.telegram.org/bot' . $bot_api . '/sendMessage';
 | |
|   $post_msg = array('chat_id' => $chat_id, 'text' =>$post_message );
 | |
|   if ($reply != false) {
 | |
|     if ($reply === true){
 | |
|       $post_msg['reply_to_message_id'] = $decoded->{'message'}->{'message_id'};
 | |
|     }
 | |
|     else {
 | |
|       $post_msg['reply_to_message_id'] = $reply;
 | |
|     }
 | |
|   }
 | |
|   $options = array(
 | |
|     'http' => array(
 | |
|       'header' => "Content-type: application/x-www-form-urlencoded\r\n",
 | |
|       'method' => 'POST',
 | |
|       'content' => http_build_query($post_msg)
 | |
|     )
 | |
|   );
 | |
|   $context = stream_context_create($options);
 | |
|   $result = file_get_contents($url, false, $context);
 | |
| }
 | |
| 
 | |
| // Send html back to the sender.
 | |
| function send_html($post_message, $reply=false) {
 | |
|   global $decoded;
 | |
|   global $bot_api;
 | |
|   global $chat_id;
 | |
|   $url = 'https://api.telegram.org/bot' . $bot_api . '/sendMessage';
 | |
|   $post_msg = array('chat_id' => $chat_id, 'text' =>$post_message, 'parse_mode' => 'html');
 | |
|   if ($reply != false) {
 | |
|     if ($reply === true){
 | |
|       $post_msg['reply_to_message_id'] = $decoded->{'message'}->{'message_id'};
 | |
|     }
 | |
|     else {
 | |
|       $post_msg['reply_to_message_id'] = $reply;
 | |
|     }
 | |
|   }
 | |
|   $options = array(
 | |
|     'http' => array(
 | |
|       'header' => "Content-type: application/x-www-form-urlencoded\r\n",
 | |
|       'method' => 'POST',
 | |
|       'content' => http_build_query($post_msg)
 | |
|     )
 | |
|   );
 | |
|   $context = stream_context_create($options);
 | |
|   $result = file_get_contents($url, false, $context);
 | |
| }
 | |
| 
 | |
| // Send gif back to the sender.
 | |
| function send_gif($gif_url, $reply=false) {
 | |
|   global $decoded;
 | |
|   global $bot_api;
 | |
|   global $chat_id;
 | |
|   $url = 'https://api.telegram.org/bot' . $bot_api . '/sendAnimation';
 | |
|   $post_msg = array('chat_id' => $chat_id, 'animation' => $gif_url );
 | |
|   if ($reply != false) {
 | |
|     if ($reply === true){
 | |
|       $post_msg['reply_to_message_id'] = $decoded->{'message'}->{'message_id'};
 | |
|     }
 | |
|     else {
 | |
|       $post_msg['reply_to_message_id'] = $reply;
 | |
|     }
 | |
|   }
 | |
|   $options = array(
 | |
|     'http' => array(
 | |
|       'header' => "Content-type: application/x-www-form-urlencoded\r\n",
 | |
|       'method' => 'POST',
 | |
|       'content' => http_build_query($post_msg)
 | |
|     )
 | |
|   );
 | |
|   $context = stream_context_create($options);
 | |
|   $result = file_get_contents($url, false, $context);
 | |
|   return $result;
 | |
| }
 | |
| 
 | |
| function forward_message($to_chat_id) {
 | |
|   global $decoded;
 | |
|   global $bot_api;
 | |
|   global $chat_id;
 | |
|   $message_id = $decoded->{"message"}->{"message_id"};
 | |
|   $url = 'https://api.telegram.org/bot' . $bot_api . '/forwardMessage';
 | |
|   $post_msg = array('chat_id' => $to_chat_id, 'message_id' => $message_id, 'from_chat_id' => $chat_id);
 | |
|   $options = array(
 | |
|     'http' => array(
 | |
|       'header' => "Content-type: application/x-www-form-urlencoded\r\n",
 | |
|       'method' => 'POST',
 | |
|       'content' => http_build_query($post_msg)
 | |
|     )
 | |
|   );
 | |
|   $context = stream_context_create($options);
 | |
|   $result = file_get_contents($url, false, $context);
 | |
| }
 | |
| 
 | |
| // Generates random words
 | |
| function rand_words($onewordmode) {
 | |
|   global $command_list;
 | |
|   if($onewordmode == 1){
 | |
|     $num = 1;
 | |
|   }
 | |
|   else {
 | |
|     if (isset($command_list[1])) {
 | |
|       $num = $command_list[1];
 | |
|     }
 | |
|     else {
 | |
|       $num = 10;
 | |
|     }
 | |
|   }
 | |
|   $num++;
 | |
|   $words = array();
 | |
|   if (is_integer($num)) {
 | |
|     $wordlist = file("/usr/share/dict/words");
 | |
|     for ($word=1; $word < $num; $word++) {
 | |
|       $words[] = $wordlist[rand(0,count($wordlist))];
 | |
|     }
 | |
|     send_text(implode(' ', $words));
 | |
|   }
 | |
|   else {
 | |
|     send_text("Ever heard of numbers?", true);
 | |
|   }
 | |
| }
 | |
| 
 | |
| function rand_question() {
 | |
|   $questions = file('rand_questions.txt');
 | |
|   $question = $questions[rand(0,count($questions))];
 | |
|   send_text($question);
 | |
| }
 | |
| 
 | |
| function media_wiki($base_url) {
 | |
|   global $command_list;
 | |
|   $search_query = "";
 | |
|   for ($i=1; $i < count($command_list); $i++) {
 | |
|     $search_query .= $command_list[$i];
 | |
|     if ($i < count($command_list) - 1) {
 | |
|       $search_query .= " ";
 | |
|     }
 | |
|   }
 | |
|   if (preg_match('/^\s*$/', $search_query)) {
 | |
|     send_text('Missing search query');
 | |
|     return;
 | |
|   }
 | |
|   $url = $base_url . "?action=opensearch&format=json&search=" . urlencode($search_query);
 | |
|   $a = json_decode(file_get_contents($url));
 | |
|   $names = $a[1];
 | |
|   $urls = $a[3];
 | |
|   if (count($names) == 0) {
 | |
|     send_text("No result found", true);
 | |
|     return false;
 | |
|   }
 | |
|   $text = "Results\n";
 | |
|   for ($i = 0 ; $i < count($names) ; $i++){
 | |
|     $text .= "<a href='" . $urls[$i] . "'>" . $names[$i] . "</a>\n";
 | |
|   }
 | |
|   send_html($text);
 | |
| }
 | |
| 
 | |
| function coin() {
 | |
|    $random = rand(0,1);
 | |
|    if ($random == 1) {
 | |
|       send_text('Heads', true);
 | |
|    }
 | |
|    else {
 | |
|       send_text('Tails', true);
 | |
|    }
 | |
| }
 | |
| 
 | |
| function get_gif($force) {
 | |
|   if ($force){
 | |
|     $param = "yes";
 | |
|   }
 | |
|   else {
 | |
|     $param = "no";
 | |
|   }
 | |
|   $url = "https://yesno.wtf/api?force=" . $param;
 | |
|   $result = file_get_contents($url);
 | |
|   $json = json_decode($result);
 | |
|   $image_url = $json->{"image"};
 | |
|   return $image_url;
 | |
| }
 | |
| 
 | |
| function yes_or_no() {
 | |
|   global $command_list;
 | |
|   if (!isset($command_list[1])){
 | |
|     send_text('You know, you also have to ask the question.', true);
 | |
|     return false;
 | |
|   }
 | |
|   $yes_replies = array("Yes", "Yep", "Yeah", "Yus", "Ja", "Ya", "Aye", "Ay", "Oui");
 | |
|   $no_replies = array("No", "Nopes", "Nu", "Nah", "Nein", "Naw", "Nay", "Yesn't");
 | |
|   $random = rand(0,1);
 | |
|   $random2 = rand(0, 10);
 | |
|   if ($random == 1) {
 | |
|     $yes = $yes_replies[array_rand($yes_replies)];
 | |
|     send_text($yes, true);
 | |
|     if ($random2 == 5){
 | |
|       send_gif(get_gif(True));
 | |
|     }
 | |
|   }
 | |
|   else {
 | |
|     $no = $no_replies[array_rand($no_replies)];
 | |
|     send_text($no, true);
 | |
|     if ($random2 == 33){
 | |
|       send_gif(get_gif(False));
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| // Kill yourself
 | |
| function kys() {
 | |
|   global $decoded;
 | |
|   global $bot_name;
 | |
|   global $command_list;
 | |
|   $kys = file('kys.txt');
 | |
|   $random_kys = $kys[rand(0,count($kys)-1)];
 | |
|   if ($decoded->{'message'}->{'reply_to_message'}->{'from'}->{'username'} == $bot_name){
 | |
|     send_text("I can't be killed.", true);
 | |
|     return;
 | |
|   }
 | |
|   if (isset($decoded->{'message'}->{'reply_to_message'})) {
 | |
|     if (isset($decoded->{'message'}->{'reply_to_message'}->{'from'}->{'username'})){
 | |
|       $username = '@' . $decoded->{'message'}->{'reply_to_message'}->{'from'}->{'username'};
 | |
|       $random_kys = preg_replace('/##name##/', $username, $random_kys);
 | |
|     }
 | |
|     else {
 | |
|       $first_name = $decoded->{'message'}->{'reply_to_message'}->{'from'}->{'first_name'};
 | |
|       $random_kys = preg_replace('/##name##/', $first_name, $random_kys);
 | |
|     }
 | |
|     send_text($random_kys);
 | |
|   }
 | |
|   elseif (isset($command_list[1])){
 | |
|     $username = $command_list[1];
 | |
|     if ($username == "@quadnite_bot" || $username == "Quadnite" || $username == "quadnite"){
 | |
|       send_text("I can't be killed.", true);
 | |
|     }
 | |
|     else {
 | |
|       $random_kys = preg_replace('/##name##/', $username, $random_kys);
 | |
|       send_text($random_kys);
 | |
|     }
 | |
|   }
 | |
|   else {
 | |
|     send_text("Do you want to kill yourself?\nIf no, reply to someone with /kys to kill them or run /kys username/name.\nYou can suggest more /kys replies using /feedback", true);
 | |
|   }
 | |
| }
 | |
| 
 | |
| // Insult
 | |
| function send_insult() {
 | |
|   global $decoded;
 | |
|   global $bot_name;
 | |
|   global $command_list;
 | |
|   $insults = file('insults.txt');
 | |
|   $random_insult = $insults[rand(0,count($insults)-1)];
 | |
|   if ($decoded->{'message'}->{'reply_to_message'}->{'from'}->{'username'} == $bot_name){
 | |
|     send_text("Watch who you talk to.", true);
 | |
|     return;
 | |
|   }
 | |
|   if (isset($decoded->{'message'}->{'reply_to_message'})) {
 | |
|     if (isset($decoded->{'message'}->{'reply_to_message'}->{'from'}->{'username'})){
 | |
|       $username = '@' . $decoded->{'message'}->{'reply_to_message'}->{'from'}->{'username'};
 | |
|       $random_insult = preg_replace('/##name##/', $username, $random_insult);
 | |
|     }
 | |
|     else {
 | |
|       $first_name = $decoded->{'message'}->{'reply_to_message'}->{'from'}->{'first_name'};
 | |
|       $random_insult = preg_replace('/##name##/', $first_name, $random_insult);
 | |
|     }
 | |
|     send_text($random_insult);
 | |
|   }
 | |
|   elseif (isset($command_list[1])){
 | |
|     $username = $command_list[1];
 | |
|     if ($username == "@quadnite_bot" || $username == "Quadnite" || $username == "quadnite"){
 | |
|       send_text("Watch who you talk to.", true);
 | |
|     }
 | |
|     else {
 | |
|       $random_insult = preg_replace('/##name##/', $username, $random_insult);
 | |
|       send_text($random_insult);
 | |
|     }
 | |
|   }
 | |
|   else {
 | |
|     send_text("Do you want to insult yourself?\nIf no, reply to someone with /insult to insult them or run /insult username/name.\nYou can suggest more /kys replies using /feedback", true);
 | |
|   }
 | |
| }
 | |
| 
 | |
| function feedback(){
 | |
|   global $command_list;
 | |
|   if (isset($command_list[1])){
 | |
|     forward_message(-1001168939936);
 | |
|     send_text("Thank you for the feedback");
 | |
|   }
 | |
|   else {
 | |
|     send_text("To send feedback type in /feedback followed by the feedback", true);
 | |
|   }
 | |
| }
 | |
| 
 | |
| // Sends back JSON
 | |
| function json() {
 | |
|   global $var;
 | |
|   $pretty_json = json_encode(json_decode($var), JSON_PRETTY_PRINT);
 | |
|   send_text($pretty_json);
 | |
| }
 | |
| // Start Message
 | |
| function start() {
 | |
|   send_text('Hi, I am Quadnite. If you are chatting with me in private, you are most likely doing it wrong. Add me to a group for fun. To give feedback, use /feedback');
 | |
| }
 | |
| 
 | |
| function rate() {
 | |
| 	send_html('<a href="https://t.me/tgdrbot?start=questable_bot">Vote for me on Telegram Directory!</a>');
 | |
| }
 | |
| 
 | |
| function help() {
 | |
|   send_html('<a href="https://t.me/quadnite/9">Help Page</a>');
 | |
| }
 | |
| 
 | |
| // Get JSON from post, store it and decode it.
 | |
| $var = file_get_contents('php://input');
 | |
| $decoded = json_decode($var);
 | |
| 
 | |
| // Store the chat ID
 | |
| $chat_id = $decoded->{"message"}->{"chat"}->{"id"};
 | |
| 
 | |
| $modules = array(
 | |
|   array(
 | |
|     "command" => "/start",
 | |
|     "function" => "start();"
 | |
|   ),
 | |
|   array(
 | |
|     "command" => "/word",
 | |
|     "function" => "rand_words(1);"
 | |
|   ),
 | |
|   array(
 | |
|     "command" => "/words",
 | |
|     "function" => "rand_words(0);"
 | |
|   ),
 | |
|   array(
 | |
|     "command" => "/question",
 | |
|     "function" => "rand_question();"
 | |
|   ),
 | |
|   array(
 | |
|     "command" => "/arch_wiki",
 | |
|     "function" => "media_wiki('https://wiki.archlinux.org/api.php');"
 | |
|   ),
 | |
|   array(
 | |
|     "command" => "/wiki",
 | |
|     "function" => "media_wiki('https://en.wikipedia.org/w/api.php');"
 | |
|   ),
 | |
|   array(
 | |
|     "command" => "/coin",
 | |
|     "function" => "coin();"
 | |
|   ),
 | |
|   array(
 | |
|     "command" => "/is",
 | |
|     "function" => "yes_or_no();"
 | |
|   ),
 | |
|   array(
 | |
|     "command" => "/are",
 | |
|     "function" => "yes_or_no();"
 | |
|   ),
 | |
|   array(
 | |
|     "command" => "/can",
 | |
|     "function" => "yes_or_no();"
 | |
|   ),
 | |
|   array(
 | |
|     "command" => "/will",
 | |
|     "function" => "yes_or_no();"
 | |
|   ),
 | |
|   array(
 | |
|     "command" => "/shall",
 | |
|     "function" => "yes_or_no();"
 | |
|   ),
 | |
|   array(
 | |
|     "command" => "/was",
 | |
|     "function" => "yes_or_no();"
 | |
|   ),
 | |
|   array(
 | |
|     "command" => "/does",
 | |
|     "function" => "yes_or_no();"
 | |
|   ),
 | |
|   array(
 | |
|     "command" => "/did",
 | |
|     "function" => "yes_or_no();"
 | |
|   ),
 | |
|   array(
 | |
|     "command" => "/should",
 | |
|     "function" => "yes_or_no();"
 | |
|   ),
 | |
|   array(
 | |
|     "command" => "/do",
 | |
|     "function" => "yes_or_no();"
 | |
|   ),
 | |
|   array(
 | |
|     "command" => "/kys",
 | |
|     "function" => "kys();"
 | |
|   ),
 | |
|   array(
 | |
|     "command" => "/json",
 | |
|     "function" => "json();"
 | |
|   ),
 | |
|   array(
 | |
|     "command" => "/help",
 | |
|     "function" => "help();"
 | |
|   ),
 | |
|   array(
 | |
|     "command" => "/insult",
 | |
|     "function" => "send_insult();"
 | |
|   ),
 | |
|   array(
 | |
|     "command" => "/feedback",
 | |
|     "function" => "feedback();"
 | |
|   ),
 | |
|   array(
 | |
|     "command" => "/rate",
 | |
|     "function" => "rate();"
 | |
|   )
 | |
| );
 | |
| 
 | |
| if (!isset($decoded->{"message"}->{"text"})){
 | |
|    exit();
 | |
| }
 | |
| 
 | |
| if (isset($decoded->{"message"}->{"pinned_message"})){
 | |
|    exit();
 | |
| }
 | |
| 
 | |
| $command_list = explode(" ", $decoded->{"message"}->{"text"});
 | |
| 
 | |
| foreach ($modules as $module ) {
 | |
|   if (check_command($module["command"])) {
 | |
|     eval($module["function"]);
 | |
|     exit();
 | |
|   }
 | |
| }
 | |
| ?>
 |