2022-06-16 20:22:48 +02:00
import psutil
2022-06-18 17:26:52 +02:00
import requests
2022-06-16 20:22:48 +02:00
import random
import pyfiglet
import socket
import threading
import datetime
import telebot
import time
import ast
import ffmpeg
import os
import python_weather
import asyncio
import json
2022-06-17 16:21:59 +02:00
import goslate
import urllib . request
import urllib . parse
2022-06-20 09:35:44 +02:00
import logging
import deepl
2022-06-20 22:20:31 +02:00
import spotipy
2022-06-22 20:24:57 +02:00
import pyshorteners
2022-06-23 16:14:08 +02:00
import pdf2docx
2022-06-24 10:16:56 +02:00
from fileinput import filename
2022-06-23 16:14:08 +02:00
from pdf2docx import Converter , parse
2022-06-20 22:20:31 +02:00
from spotipy . oauth2 import SpotifyClientCredentials
from youtube_search import YoutubeSearch
2022-06-18 11:58:15 +02:00
from dotenv import load_dotenv
2022-06-16 20:22:48 +02:00
from yt_dlp import YoutubeDL
from platform import system
from tqdm . auto import tqdm
from importlib . metadata import files
from dataclasses import dataclass
from jmespath import search
from telebot import types , telebot
from pytube import YouTube
from bs4 import BeautifulSoup
from gc import callbacks
2022-06-20 22:20:31 +02:00
import logging
import sys
logging . basicConfig (
level = logging . INFO ,
format = " %(asctime)s [ %(levelname)s ] %(message)s " ,
handlers = [
logging . FileHandler ( " debug.log " ) ,
logging . StreamHandler ( sys . stdout )
]
)
2022-06-16 20:22:48 +02:00
2022-06-18 11:58:15 +02:00
load_dotenv ( )
API_TOKEN = os . getenv ( ' BOT_TOKEN ' )
2022-06-16 20:22:48 +02:00
bot = telebot . TeleBot ( API_TOKEN )
2022-06-22 20:32:58 +02:00
#Start bot
2022-06-20 22:20:31 +02:00
logging . info ( " Il bot si è avviato con successo! " )
2022-06-16 20:22:48 +02:00
#Command /start
@bot.message_handler ( commands = [ ' start ' ] )
def send_welcome ( message ) :
2022-06-18 12:02:15 +02:00
chat_id = message . chat . id
2022-06-20 22:20:31 +02:00
logging . info ( " Triggered command START. " )
2022-06-18 12:02:15 +02:00
bot . send_photo ( chat_id , photo = ' https://i.imgur.com/6YPJBze.png ' )
2022-06-19 11:15:36 +02:00
messageText = " ✋ Benvenuto su <b>RetniNet!</b> \n \n <b>RetniNet</b> è un bot privato per <b>automatizzare</b> e <b>semplificare</b> cose che facciamo quotidianamente. \n \n 👨💻 Creato & sviluppato da @Stef58_Official "
2022-06-20 22:20:31 +02:00
bot . send_message ( chat_id , messageText , parse_mode = " HTML " )
2022-06-16 20:22:48 +02:00
#Command /music
2022-06-20 22:20:31 +02:00
2022-06-16 20:22:48 +02:00
@bot.message_handler ( commands = [ ' music ' ] )
def select_music ( pm ) :
2022-06-20 22:20:31 +02:00
logging . info ( " Triggered command MUSIC. " )
2022-06-16 20:22:48 +02:00
sent_msg = bot . send_message ( pm . chat . id , " Inserisci il link della canzone: " )
bot . register_next_step_handler ( sent_msg , music_step )
2022-06-20 22:20:31 +02:00
2022-06-16 20:22:48 +02:00
2022-06-17 16:21:59 +02:00
def music_step ( pm ) :
2022-06-22 20:32:58 +02:00
text = pm . text
#Check if the link is correct (Youtube and Spotify links only)
if text . startswith ( ' https://www.youtube.com/ ' ) or text . startswith ( ' https://youtu.be/ ' ) :
2022-06-19 12:33:15 +02:00
ytdl_opts = {
2022-06-20 22:20:31 +02:00
' format ' : ' bestaudio/best ' ,
' outtmpl ' : ' music_cache/ %(title)s . %(ext)s ' ,
' postprocessors ' : [ {
' key ' : ' FFmpegExtractAudio ' ,
' preferredcodec ' : ' mp3 ' ,
' preferredquality ' : ' 192 ' ,
} ] ,
}
2022-06-22 20:32:58 +02:00
with YoutubeDL ( ytdl_opts ) as ydl :
url = pm . text
info = ydl . extract_info ( url , download = False )
name = info . get ( ' title ' )
id = info . get ( ' id ' )
ydl . download ( [ id ] )
send_message = " 🎶 La canzone <b> " + name + \
" </b> è stata scaricata con successo! "
bot . send_message ( pm . chat . id , send_message , parse_mode = " HTML " )
bot . send_audio ( pm . chat . id , audio = open ( " music_cache/ " + name + ' .mp3 ' , ' rb ' ) )
os . remove ( " music_cache/ " + name + ' .mp3 ' )
#If the link for spotify ends with /album, /user, /playlist ecc.. send a error message
2022-06-20 22:20:31 +02:00
elif pm . text . startswith ( ' https://open.spotify.com/track/ ' ) :
ytdl_opts = {
' format ' : ' bestaudio/best ' ,
' outtmpl ' : ' music_cache/ %(title)s . %(ext)s ' ,
' postprocessors ' : [ {
' key ' : ' FFmpegExtractAudio ' ,
' preferredcodec ' : ' mp3 ' ,
' preferredquality ' : ' 192 ' ,
} ] ,
}
2022-06-19 12:33:15 +02:00
with YoutubeDL ( ytdl_opts ) as ydl :
2022-06-20 22:20:31 +02:00
message = pm . text
sp = spotipy . Spotify ( auth_manager = SpotifyClientCredentials ( client_id = os . getenv ( ' SPOTIFY_ID ' ) , client_secret = os . getenv ( ' SPOTIFY_SECRET ' ) ) )
track = sp . track ( message )
name = track [ " name " ]
artist = track [ " artists " ] [ 0 ] [ " name " ]
results = YoutubeSearch ( artist + " - " + name , max_results = 1 ) . to_json ( )
get_link = json . loads ( results )
link = get_link [ ' videos ' ] [ 0 ] [ ' url_suffix ' ]
print_link = ' https://youtube.com ' + link
url = print_link
2022-06-19 12:33:15 +02:00
info = ydl . extract_info ( url , download = False )
name = info . get ( ' title ' )
id = info . get ( ' id ' )
ydl . download ( [ id ] )
2022-06-20 22:20:31 +02:00
send_message = " 🎶 La canzone <b> " + name + \
" </b> è stata scaricata con successo! "
2022-06-19 12:33:15 +02:00
bot . send_message ( pm . chat . id , send_message , parse_mode = " HTML " )
2022-06-20 22:20:31 +02:00
bot . send_audio ( pm . chat . id , audio = open ( " music_cache/ " + name + ' .mp3 ' , ' rb ' ) )
os . remove ( " music_cache/ " + name + ' .mp3 ' )
logging . info ( " \" " + name + " \" è stato scaricato ed eliminato con successo! " )
2022-06-21 19:16:38 +02:00
2022-06-20 22:20:31 +02:00
elif pm . text . startswith ( ' https://youtube.com/ ' ) or pm . text . startswith ( ' youtube.com/ ' ) :
bot . send_message (
pm . chat . id , " 🚫 <b>Errore</b> \n \n <b>Il link</b> inserito non è valido! " )
2022-06-19 12:33:15 +02:00
else :
2022-06-20 22:20:31 +02:00
try :
with YoutubeDL ( ytdl_opts ) as ydl :
url = pm . text
info = ydl . extract_info ( url , download = False )
name = info . get ( ' title ' )
id = info . get ( ' id ' )
ydl . download ( [ id ] )
send_message = " 🎶 La canzone <b> " + name + \
" </b> è stata scaricata con successo! "
bot . send_message ( pm . chat . id , send_message , parse_mode = " HTML " )
bot . send_audio ( pm . chat . id , audio = open ( " music_cache/ " + name + ' .mp3 ' , ' rb ' ) )
os . remove ( " music_cache/ " + name + ' .mp3 ' )
except :
chat = pm . chat . id
send_msg = " 🚫 Errore! \n \n <b>Errore:</b> <i>Impossibile scaricare la canzone</i> "
bot . send_message ( chat , send_msg , parse_mode = " HTML " )
else :
chat = pm . chat . id
2022-06-21 19:16:38 +02:00
bot . send_message ( chat , pm . chat . id , " 🚫 Devi inserire un <b>link</b> valido! " )
2022-06-20 22:20:31 +02:00
2022-06-16 20:22:48 +02:00
#Command /meteo
@bot.message_handler ( commands = [ ' meteo ' ] )
def meteo ( pm ) :
2022-06-20 22:20:31 +02:00
logging . info ( " Triggered command METEO. " )
2022-06-17 16:21:59 +02:00
sent_msg = bot . send_message ( pm . chat . id , " 🏙️ Inserisci la città: " )
2022-06-16 20:22:48 +02:00
bot . register_next_step_handler ( sent_msg , meteo_step )
2022-06-20 22:20:31 +02:00
2022-06-16 20:22:48 +02:00
def meteo_step ( message ) :
2022-06-20 09:35:44 +02:00
translator = deepl . Translator ( os . getenv ( ' DEEPL_TOKEN ' ) )
2022-06-20 22:20:31 +02:00
result = translator . translate_text ( ' hi ' , target_lang = ' IT ' )
2022-06-20 09:35:44 +02:00
translated_text = result . text
2022-06-16 20:22:48 +02:00
city = message . text
2022-06-18 11:58:15 +02:00
token_weather = os . environ . get ( ' WEATHER_TOKEN ' )
response = requests . get ( " https://api.openweathermap.org/data/2.5/weather?q= " + city + " ,it&APPID= " + token_weather ) . json ( )
2022-06-20 22:20:31 +02:00
weather = response [ ' weather ' ] [ 0 ] [ ' main ' ]
2022-06-16 20:22:48 +02:00
temp = response [ ' main ' ] [ ' temp ' ]
temp = temp - 273.15
2022-06-20 09:35:44 +02:00
weather_translate = translator . translate_text ( weather , target_lang = ' IT ' )
result_weather = weather_translate . text
2022-06-16 20:22:48 +02:00
bot . send_message ( message . chat . id , " 🌡️ La temperatura in " + city + " è di " + str ( temp ) + " °C " )
2022-06-20 09:35:44 +02:00
bot . send_message ( message . chat . id , " 🌧️ La condizione è " + result_weather )
2022-06-16 20:22:48 +02:00
#Command /stats
2022-06-20 22:20:31 +02:00
2022-06-16 20:22:48 +02:00
@bot.message_handler ( commands = [ ' stats ' ] )
def uptime ( message ) :
print ( " Triggered command STATS. " )
cpuUsage = psutil . cpu_percent ( interval = 1 )
2022-06-20 22:20:31 +02:00
ramTotal = int ( psutil . virtual_memory ( ) . total / ( 1024 * 1024 ) ) # GB
ramUsage = int ( psutil . virtual_memory ( ) . used / ( 1024 * 1024 ) ) # GB
ramFree = int ( psutil . virtual_memory ( ) . free / ( 1024 * 1024 ) ) # GB
2022-06-16 20:22:48 +02:00
ramUsagePercent = psutil . virtual_memory ( ) . percent
msg = '''
CPU & RAM Info
2022-06-17 16:21:59 +02:00
🟩 Utilizzo CPU = { } %
2022-06-16 20:22:48 +02:00
RAM
Totale = { } MB
Usato = { } MB
Libero = { } MB
2022-06-20 22:20:31 +02:00
In uso = { } % \n ''' .format(cpuUsage, ramTotal, ramUsage, ramFree, ramUsagePercent)
bot . send_message ( message . chat . id , msg )
2022-06-16 20:22:48 +02:00
2022-06-17 16:21:59 +02:00
#Command /pastebin
2022-06-20 22:20:31 +02:00
2022-06-17 16:21:59 +02:00
@bot.message_handler ( commands = [ ' pastebin ' ] )
def pastebin ( message ) :
2022-06-20 22:20:31 +02:00
logging . info ( " Triggered command PASTEBIN. " )
2022-06-17 16:21:59 +02:00
sent_msg = bot . send_message ( message . chat . id , " 📋 Inserisci il testo: " )
bot . register_next_step_handler ( sent_msg , pastebin_step )
2022-06-20 22:20:31 +02:00
2022-06-17 16:21:59 +02:00
def pastebin_step ( message ) :
chat = message . chat . id
text = message . text
site = ' https://pastebin.com/api/api_post.php '
2022-06-18 11:58:15 +02:00
dev_key = os . environ . get ( ' PASTEBIN_TOKEN ' )
2022-06-20 22:20:31 +02:00
code = text
our_data = urllib . parse . urlencode (
{ " api_dev_key " : dev_key , " api_option " : " paste " , " api_paste_code " : code } )
our_data = our_data . encode ( )
2022-06-17 16:21:59 +02:00
resp = urllib . request . urlopen ( site , our_data )
resp = resp . read ( )
2022-06-20 22:20:31 +02:00
send_msg = " 📋 Il tuo <b>codice</b> è stato inviato con successo! \n \n <b>Link:</b> " + \
str ( resp )
bot . send_message ( chat , send_msg , parse_mode = " HTML " )
2022-06-17 16:21:59 +02:00
2022-06-18 17:26:52 +02:00
#Command /epicgames
2022-06-20 22:20:31 +02:00
2022-06-18 17:26:52 +02:00
@bot.message_handler ( commands = [ ' epicgames ' ] )
def epicgames ( message ) :
text = message . text
2022-06-20 22:20:31 +02:00
bot . send_message (
message . chat . id , " 🎮 Vuoi vedere il gioco disponibile al momento o quello futuro? (disponibile/futuro) " )
2022-06-18 17:26:52 +02:00
bot . register_next_step_handler ( message , epicgames_step )
2022-06-20 22:20:31 +02:00
2022-06-18 17:26:52 +02:00
def epicgames_step ( message ) :
text = message . text
2022-06-20 22:20:31 +02:00
if text == ' disponibile ' or text == ' Disponibile ' :
logging . info ( " Triggered command EPICGAMES DISPONIBILE. " )
# URL API
2022-06-18 17:26:52 +02:00
url = " https://api.plenusbot.xyz/epic_games?country=IT "
response = requests . get ( url ) . json ( )
2022-06-20 22:20:31 +02:00
# Title of current games
2022-06-18 17:26:52 +02:00
current_games = response [ ' currentGames ' ] [ 0 ] [ ' title ' ]
2022-06-20 22:20:31 +02:00
# Image current games
2022-06-18 17:26:52 +02:00
image_currentgames = response [ ' currentGames ' ] [ 0 ] [ ' keyImages ' ] [ 0 ] [ ' url ' ]
2022-06-20 22:20:31 +02:00
# Description current games
2022-06-18 17:26:52 +02:00
current_games_description = response [ ' currentGames ' ] [ 0 ] [ ' description ' ]
2022-06-20 22:20:31 +02:00
# Token for translate
2022-06-20 09:35:44 +02:00
translator = deepl . Translator ( os . getenv ( ' DEEPL_TOKEN ' ) )
2022-06-20 22:20:31 +02:00
# Translate description current games
description_translate = translator . translate_text (
current_games_description , target_lang = ' IT ' )
2022-06-20 09:35:44 +02:00
result_description = description_translate . text
2022-06-18 17:26:52 +02:00
send_img = bot . send_photo ( message . chat . id , image_currentgames )
2022-06-21 19:16:38 +02:00
sent_msg = bot . send_message ( message . chat . id , " 🎮 Il gioco gratis di oggi è " + current_games + " \n \n " + result_description )
2022-06-18 17:26:52 +02:00
else :
2022-06-20 22:20:31 +02:00
logging . info ( " Triggered command EPICGAMES FUTURO. " )
# URL API
2022-06-18 17:26:52 +02:00
url = " https://api.plenusbot.xyz/epic_games?country=IT "
response = requests . get ( url ) . json ( )
2022-06-20 22:20:31 +02:00
# Title of future games
2022-06-18 17:26:52 +02:00
future_games1 = response [ ' nextGames ' ] [ 0 ] [ ' title ' ]
2022-06-20 22:20:31 +02:00
# Image future games
2022-06-18 17:26:52 +02:00
image_futuregames1 = response [ ' nextGames ' ] [ 0 ] [ ' keyImages ' ] [ 0 ] [ ' url ' ]
2022-06-20 22:20:31 +02:00
# Description future games
2022-06-18 17:26:52 +02:00
future_games_description1 = response [ ' nextGames ' ] [ 0 ] [ ' description ' ]
2022-06-20 22:20:31 +02:00
# Token for translate
2022-06-20 09:35:44 +02:00
translator = deepl . Translator ( os . getenv ( ' DEEPL_TOKEN ' ) )
2022-06-21 19:16:38 +02:00
description_translate1 = translator . translate_text ( future_games_description1 , target_lang = ' IT ' )
2022-06-20 09:35:44 +02:00
result_description1 = description_translate1 . text
2022-06-18 17:26:52 +02:00
send_img = bot . send_photo ( message . chat . id , image_futuregames1 )
2022-06-21 19:16:38 +02:00
sent_msg = bot . send_message ( message . chat . id , " 🎮 Il gioco futuro è " + future_games1 + " \n \n " + result_description1 )
2022-06-20 22:20:31 +02:00
# Title of future games
2022-06-18 17:26:52 +02:00
future_games2 = response [ ' nextGames ' ] [ 1 ] [ ' title ' ]
2022-06-20 22:20:31 +02:00
# Image future games
2022-06-18 17:26:52 +02:00
image_futuregames2 = response [ ' nextGames ' ] [ 1 ] [ ' keyImages ' ] [ 0 ] [ ' url ' ]
2022-06-20 22:20:31 +02:00
# Description future games
2022-06-18 17:26:52 +02:00
future_games_description2 = response [ ' nextGames ' ] [ 1 ] [ ' description ' ]
2022-06-20 22:20:31 +02:00
# Traslate description future games
2022-06-21 19:16:38 +02:00
description_translate2 = translator . translate_text ( future_games_description2 , target_lang = ' IT ' )
2022-06-20 09:35:44 +02:00
result_description2 = description_translate2 . text
2022-06-18 17:26:52 +02:00
send_img = bot . send_photo ( message . chat . id , image_futuregames2 )
2022-06-21 19:16:38 +02:00
sent_msg = bot . send_message ( message . chat . id , " 🎮 Il gioco futuro è " + future_games2 + " \n \n " + result_description2 )
2022-06-20 22:20:31 +02:00
2022-06-22 20:24:57 +02:00
#Command /shutdown
@bot.message_handler ( commands = [ ' shutdown ' ] )
def shutdown ( message ) :
text = message . text
sent_msg = bot . send_message ( message . chat . id , " Sei sicuro di voler spegnere il pc? " )
bot . register_next_step_handler ( sent_msg , shutdown_step )
def shutdown_step ( message ) :
id = message . from_user . id
text = message . text
id_owner = os . getenv ( ' USER_ID ' )
2022-06-23 16:14:08 +02:00
if id == 771375637 :
2022-06-22 20:24:57 +02:00
if text == " si " or text == " Si " or text == " y " or text == " Y " or text == " Yes " or text == " yes " :
bot . send_message ( message . chat . id , " Il computer è stato spento con successo! " )
logging . info ( " Triggered Shutdown " )
url = os . getenv ( " PASSWORD " )
requests . get ( url )
else :
bot . send_message ( message . chat . id , " ⚠️ Hai annullato l ' operazione! " )
#Command /shortlink
@bot.message_handler ( commands = [ ' shortlink ' ] )
def shortlink ( message ) :
text = message . text
sent_msg = bot . send_message ( message . chat . id , " Inserisci il link: " )
bot . register_next_step_handler ( sent_msg , shortlink_step )
def shortlink_step ( message ) :
text = message . text
type_tiny = pyshorteners . Shortener ( )
short_url = type_tiny . tinyurl . short ( text )
bot . send_message ( message . chat . id , " Ecco a te lo shortlink: " + short_url )
#Command /uptime
@bot.message_handler ( commands = [ ' uptime ' ] )
def uptime ( message ) :
logging . info ( " Triggered UPTIME " )
sent_msg = bot . send_message ( message . chat . id , " Manda il link del sito che vuoi controllare. " )
bot . register_next_step_handler ( sent_msg , uptime_step )
def uptime_step ( message ) :
text = message . text
url = text
status_code = urllib . request . urlopen ( url ) . getcode ( )
website_is_up = status_code == 200
if website_is_up == True :
bot . send_message ( message . chat . id , " Il sito è online! " )
else :
bot . send_message ( message . chat . id , " Il sito non è online! " )
2022-06-19 11:15:36 +02:00
2022-06-23 16:14:08 +02:00
#Command /convert
@bot.message_handler ( commands = [ " convert " ] )
def addfile ( message ) :
sent_msg = bot . send_message ( message . chat . id , " Manda il file pdf che vuoi convertire in docx " )
bot . register_next_step_handler ( sent_msg , convert )
def convert ( message ) :
file_name = message . document . file_name
file_info = bot . get_file ( message . document . file_id )
downloaded_file = bot . download_file ( file_info . file_path )
with open ( file_name , ' wb ' ) as new_file :
new_file . write ( downloaded_file )
docx_file = file_name + ' .docx '
pdf_file = file_name
cv = Converter ( pdf_file )
cv . convert ( docx_file )
cv . close ( )
html_doc = open ( docx_file , ' rb ' )
sent_msg = bot . send_message ( message . chat . id , " Il file è stato convertito con successo! " )
bot . send_document ( message . chat . id , html_doc )
os . remove ( pdf_file )
#Command /cloud
@bot.message_handler ( commands = [ " cloud " ] )
def cloud ( message ) :
sent_msg = bot . send_message ( message . chat . id , " Invia il file che vuoi caricare " )
bot . register_next_step_handler ( sent_msg , cloud_step )
def cloud_step ( message ) :
file_name = message . document . file_name
file_info = bot . get_file ( message . document . file_id )
downloaded_file = bot . download_file ( file_info . file_path )
with open ( file_name , ' wb ' ) as new_file :
new_file . write ( downloaded_file )
2022-06-24 10:16:56 +02:00
os . replace ( file_name , ' cloud/ ' + file_name )
2022-06-23 16:14:08 +02:00
2022-06-22 20:24:57 +02:00
bot . polling ( )