2022-04-09 14:47:19 +00:00
import telebot , std / [ asyncdispatch , logging , options , strutils , random , with , os ] , norm / [ model , sqlite ]
2022-04-07 17:41:36 +00:00
type
2022-04-09 15:18:41 +00:00
CensoredData * = ref object of Model
2022-04-07 17:41:36 +00:00
ftype * : string
2022-04-09 14:30:05 +00:00
fhash * : string
2022-04-07 17:41:36 +00:00
fileid * : string
caption * : string
2022-04-09 15:18:41 +00:00
func NewCensoredData * ( ftype = " " ; fhash = " " ; fileid = " " ; caption = " " ) :
CensoredData = CensoredData ( ftype : ftype , fhash : fhash , fileid : fileid , caption : caption )
2022-04-07 17:41:36 +00:00
let dbConn * = sqlite . open ( " censordata.db " , " " , " " , " " )
2022-04-09 15:18:41 +00:00
dbConn . createTables ( NewCensoredData ( ) )
2022-04-07 17:41:36 +00:00
2022-04-07 10:51:02 +00:00
var L = newConsoleLogger ( fmtStr = " $levelname , [ $time ] " )
addHandler ( L )
2022-04-07 11:45:56 +00:00
proc generate_hash ( ) : string =
result = newString ( 7 )
const charset = { ' a ' .. ' z ' , ' A ' .. ' Z ' , ' 0 ' .. ' 9 ' }
for i in 0 .. 6 :
result [ i ] = sample ( charset )
return result
2022-04-09 14:47:19 +00:00
const API_KEY = getEnv ( " TELEGRAM_TOKEN " )
2022-04-07 10:51:02 +00:00
2022-04-09 14:26:17 +00:00
proc updateHandler ( b : Telebot , u : Update ) : Future [ bool ] {. async , gcsafe . } =
2022-04-09 15:41:01 +00:00
let response = u . message . get
if response . text . isSome :
let message = response . text . get
2022-04-09 17:17:07 +00:00
if message = = " /start " :
discard await b . sendMessage ( response . chat . id , " Hey, To create a censored post, you can share any album, video, photo, gif, sticker, etc. The messages could then be forwarded to any chat for them to view " )
elif message . contains ( " /start " ) :
2022-04-09 15:41:01 +00:00
let deeplink = message . split ( " " )
2022-04-09 17:17:07 +00:00
var TempData = @ [ NewCensoredData ( ) ]
dbConn . select ( TempData , " fhash = ? " , deeplink [ 1 ] )
for i in TempData :
if i . ftype = = " photo " :
discard await b . sendPhoto ( response . chat . id , i . fileid , i . caption )
if i . ftype = = " document " :
discard await b . sendDocument ( response . chat . id , i . fileid , i . caption )
if i . ftype = = " video " :
discard await b . sendVideo ( response . chat . id , i . fileid , caption = i . caption )
if i . ftype = = " videonote " :
discard await b . sendVideoNote ( response . chat . id , i . fileid )
if i . ftype = = " animation " :
discard await b . sendAnimation ( response . chat . id , i . fileid , caption = i . caption )
2022-04-09 16:55:11 +00:00
else :
var fileid = " "
var ftype = " "
var fcaption = " "
if response . caption . isSome :
fcaption = response . caption . get
if response . document . isSome :
fileid = response . document . get . fileId
ftype = " document "
2022-04-09 16:56:19 +00:00
elif response . video . isSome :
2022-04-09 16:55:11 +00:00
fileid = response . video . get . fileId
ftype = " video "
2022-04-09 16:56:19 +00:00
elif response . videoNote . isSome :
2022-04-09 16:55:11 +00:00
fileid = response . videoNote . get . fileId
ftype = " videonote "
2022-04-09 16:56:19 +00:00
elif response . animation . isSome :
2022-04-09 16:55:11 +00:00
fileid = response . animation . get . fileId
ftype = " animation "
2022-04-09 16:56:19 +00:00
elif response . photo . isSome :
2022-04-09 16:55:11 +00:00
fileid = response . photo . get [ 0 ] . fileId
ftype = " photo "
2022-04-09 16:56:19 +00:00
elif response . mediaGroupId . isSome :
2022-04-09 16:55:11 +00:00
fileid = response . mediaGroupId . get
2022-04-09 16:40:27 +00:00
2022-04-09 16:55:11 +00:00
let filehash = generate_hash ( )
2022-04-09 16:40:27 +00:00
2022-04-09 16:55:11 +00:00
var CensoredRow = NewCensoredData ( ftype , filehash , fileid , fcaption )
2022-04-09 16:40:27 +00:00
2022-04-09 16:55:11 +00:00
with dbConn :
insert CensoredRow
2022-04-09 17:17:07 +00:00
discard await b . sendMessage ( response . chat . id , " Censored --> " & " tg://resolve?domain=botbotbotnotabot&start= " & filehash )
2022-04-07 10:51:02 +00:00
let bot = newTeleBot ( API_KEY )
bot . onUpdate ( updateHandler )
bot . poll ( timeout = 300 )