Last active
June 14, 2020 12:18
-
-
Save webbson/af15741f027b1b59f0c755fa0f9a8169 to your computer and use it in GitHub Desktop.
Telegram bot for Sonarr/Radarr
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
function processMessage($message) { | |
$groupchat = '-XXXX'; // Group chat id | |
// process incoming message | |
$message_id = $message["message_id"]; | |
$chat_id = $message["chat"]["id"]; | |
$response = array("chat_id" => $chat_id); | |
$plextoken = "YYYY"; // Plex token | |
$plexbaseurl = "https://ASFASFASF.plex.direct:32400"; // PLEX DIRECT URL | |
$eol = PHP_EOL; | |
if (isset($message["text"])) { | |
$message["text"] = str_replace("@BOT_NAME", "", $message["text"]); | |
// incoming text message | |
$args = explode(" ", $message["text"]); | |
$result = []; | |
preg_match("/imdb.com.*\/(tt\d+)\//i", $message['text'], $result); | |
if (count($result) == 2) { | |
$args[0] = "/addmovie"; | |
$args[1] = $result[1]; | |
$response["disable_web_page_preview"] = true; | |
} | |
switch($args[0]) { | |
case "/addmovie": | |
if (!isAllowed($chat_id, $groupchat)) | |
exit; | |
if ($args[1] == undefined || strlen($args[1]) == 0) | |
$response["text"] = "You must send me an IMDb id"; | |
else { | |
$movies = callRadarr("movie"); | |
$continue = true; | |
foreach ($movies as $movie) | |
{ | |
if ($movie->imdbId == $args[1]){ | |
$ml = movieLink($movie); | |
if ($movie->downloaded) | |
$response["text"] = "I've already downloaded $ml!"; | |
else | |
$response["text"] = "$ml is already on my wanted list!"; | |
$continue = false; | |
break; | |
} | |
} | |
if ($continue) { | |
$movie = callRadarr("movies/lookup", "term=imdb:".$args[1]); | |
if(count($movie) == 0){ | |
$response["text"] = "Couldn't find a movie with that ID"; | |
} else { | |
$movie = $movie[0]; | |
$movie->profileId = "4"; | |
$movie->monitored = true; | |
$movie->episodeFileCount = 0; | |
$movie->episodeCount = 0; | |
$movie->isExisting = false; | |
$movie->rootFolderPath = "E:\\Movies\\"; | |
$movie->addOptions = [ | |
"ignoreEpisodesWithFiles" => false, | |
"ignoreEpisodesWithoutFiles" => false, | |
"searchForMovie" => true, | |
]; | |
$movie->imdbId = $args[1]; | |
$res = callRadarr("movie", $movie); | |
$ml = movieLink($movie); | |
if ($res->monitored) | |
$response["text"] = "Added movie: $ml to my wanted list."; | |
else | |
$response["text"] = "Something went wrong, I'm so sorry..."; | |
} | |
} | |
} | |
break; | |
case "/history": | |
$history = callRadarr("history", "pageSize=30")->records; | |
$response["text"] = "*Recently downloaded movies*:$eol"; | |
$response["disable_web_page_preview"] = true; | |
$count = 1; | |
foreach ($history as $rec){ | |
if ($rec->eventType == "downloadFolderImported") { | |
$date = (object)date_parse($rec->date); | |
$ml = movieLink($rec->movie); | |
$response["text"] .= $count++.": $ml ($date->day/$date->month $date->hour:$date->minute)$eol"; | |
} | |
if ($count == 11) break; | |
} | |
break; | |
case "/disk": | |
$res = callRadarr("DiskSpace"); | |
foreach ($res as $disk) | |
{ | |
$percFree = round(($disk->freeSpace/$disk->totalSpace) * 100,1); | |
$free = formatSizeUnits($disk->freeSpace); | |
$total = formatSizeUnits($disk->totalSpace); | |
$response["text"] .= "*$disk->path* ($disk->label) *$percFree%* free. ($free / $total)$eol"; | |
} | |
break; | |
case "/help": | |
$response["text"] = "*Welcome to Download bot*$eolMy commands are:$eol"; | |
$response["text"] .= "/disk - Show disk usage$eol"; | |
$response["text"] .= "/history - Show latest downloaded movies$eol"; | |
if ($chat_id == $groupchat) { | |
$response["text"] .= "/addmovie *{IMDb id}* - Add a movie to download, send the IMDb id in the *tt2381991* format$eol"; | |
} | |
break; | |
case "/stop": | |
$response["text"] = "Nah I don't feel like it."; | |
$response["reply_to_message_id"] = $message_id; | |
break; | |
default: | |
exit(); | |
break; | |
} | |
} else { | |
exit(); | |
} | |
sendMessage($response); | |
} | |
function sendMessage($postData) { | |
$postData['parse_mode'] = "Markdown"; | |
$url = "https://api.telegram.org"; | |
$botid = "BOTID"; // TELEGRAM Bot ID | |
$ch = curl_init(); | |
curl_setopt($ch,CURLOPT_URL,"$url/$botid/sendMessage"); | |
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); | |
curl_setopt($ch,CURLOPT_HEADER, false); | |
curl_setopt($ch, CURLOPT_POST, count($postData)); | |
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); | |
$output = curl_exec($ch); | |
curl_close($ch); | |
} | |
function callRadarr ($method, $m2 = ""){ | |
$ch = curl_init(); | |
$url = "http://127.0.0.1:7878/api/$method?apikey=YYYY"; // Radarr API key | |
if (gettype($m2) == "string" && strlen($m2) > 0) | |
$url .= "&$m2"; | |
else if (gettype($m2) == "object"){ | |
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($m2)); | |
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); | |
curl_setopt($ch, CURLOPT_HTTPHEADER, array( | |
"Content-Type: application/json", | |
"Content-Length: " . strlen(json_encode($m2))) | |
); | |
} | |
curl_setopt($ch,CURLOPT_URL,$url); | |
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); | |
curl_setopt($ch,CURLOPT_HEADER, false); | |
$output = curl_exec($ch); | |
return json_decode($output); | |
curl_close($ch); | |
} | |
function formatSizeUnits($bytes) | |
{ | |
if ($bytes >= 1073741824) | |
$bytes = number_format($bytes / 1073741824, 2)." GB"; | |
elseif ($bytes >= 1048576) | |
$bytes = number_format($bytes / 1048576, 2)." MB"; | |
elseif ($bytes >= 1024) | |
$bytes = number_format($bytes / 1024, 2)." KB"; | |
elseif ($bytes > 1) | |
$bytes = "$bytes bytes"; | |
elseif ($bytes == 1) | |
$bytes = "$bytes byte"; | |
else | |
$bytes = "0 bytes"; | |
return $bytes; | |
} | |
function isAllowed($target, $allowed) { | |
$me = 'ASDJKHFSA'; // MY Private telegram id should always be allowed | |
if ($target == $me) return true; | |
if ($target != $allowed) { | |
sendMessage(array("chat_id" => $target, "text" => "I am *not* allowed to do that *here*.")); | |
return false; | |
} | |
return true; | |
} | |
function movieLink($movie) { | |
return "[$movie->title](https://www.imdb.com/title/$movie->imdbId/)"; | |
} | |
$content = file_get_contents("php://input"); | |
$update = json_decode($content, true); | |
if (!$update) { | |
exit; | |
} | |
if (isset($update["message"])) { | |
processMessage($update["message"]); | |
} |
im interested too, how can I implement this?
Seems to be only for Radarr and not both Sonarr and Radarr
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Looks nice, but im new to telegram. I have created the bot but how do i incoorperate this?