Added files

This commit is contained in:
Bash 2022-04-22 05:47:26 -03:00
commit 7fdf0232c8
7 changed files with 2564 additions and 0 deletions

BIN
assets/img.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

117
bot.py Normal file
View File

@ -0,0 +1,117 @@
from pyrogram import Client, filters
from groupwatcher import watch
from datetime import date as dt1
from datetime import datetime
import urlexpander
import json
# bot object
app = Client('urlExpander', config_file='main.ini')
hour = datetime.now()
today = dt1.today()
# indexing groups for greet message
groups = []
with open('groupsin.txt', 'r') as e:
groups.append(e.readlines())
groups = str(groups)
groups = groups.replace('[', '')
groups = groups.replace(']', '')
groups = groups.replace(' ', '')
groups = groups.replace('\\n', '')
groups = groups.replace("'", '')
groups = groups.split(',')
groups = list(groups)
print(groups)
e.close()
# expander command
@app.on_message(filters.command('expander') & filters.private)
def expand(client, message):
items = []
counter = 0
url = str(message.text).replace('/expander', '').strip()
# it will be used in the loopFF
items = []
counter = 0
# always use the module.method pattern
api_request = urlexpander.unshort(url)
hops = api_request['hops']
# transforming hops in a list(it is actually a dict)
hops = list(hops.values())
# looping over hops
for hop in hops:
counter += 1
link = f'{counter}. {hop}'
url_original = f'{min(hops)}'
items.append(link)
res = items[-1]
res = str(res)
res = res[3:]
# "cleaning" items (as a string)
items = str(items)
items = items.replace('[', '')
items = items.replace(']', '')
items = items.replace("'", '')
items = items.replace(', ', '\n')
current_date = today.strftime("%d %B, %Y")
current_time = hour.strftime("%H:%M:%S")
data = f'{current_date} - {current_time}'
log = {
'date': data,
'id': message.from_user.id,
'group_id': message.chat.id,
'message_id': message.message_id,
'api_response': api_request,
}
with open('logs.txt', 'a') as f:
json.dump(log, f)
f.write('\n')
f.close()
# bot message output
message.reply('URL Original:\n{}\n\nURL Final:\n{}\n\nRedirecionamentos:\n{}'.format(url_original, res, items), disable_web_page_preview=True)
# wiping data
del items
del api_request
del hops
del url
del log
del data
# group greeting
@app.on_message(filters.group)
def greet(client, message):
if str(message.chat.id) not in groups:
chat = message.chat.id
groups.append(str(chat))
with open('groupsin.txt', 'a') as e:
e.write(str(chat))
e.write('\n')
e.close()
app.send_photo(message.chat.id, 'img.jpg', caption='Obrigado por adicionar-me ao vosso grupo.\nApenas deixe-me fazer o meu trabalho. Analisarei todas as mensagens a seguir em busca de serviços encurtadores de link registrados no nosso banco de dados.\nResponda uma mensagem contendo um link marcando-me ou utilize o /expander para eu analisar o link sem consultar o nosso banco de dados.\n\nUm oferecimento\n@terabitSec')
else:
watch(client, message)
@app.on_message(filters.command('start'))
def start(client, message):
message.reply('Olá, {}!\n\nSeja bem-vindo ao urlExpander! Posso desencurtar links aqui também: use o comando /expander seulink/algumacoisa'.format(message.from_user.first_name))
if __name__ == '__main__':
app.run()

155
groupwatcher.py Normal file
View File

@ -0,0 +1,155 @@
from pyrogram import Client, filters
from datetime import date as dt1
from datetime import datetime
from string import digits
from pathlib import Path
import re
import urlexpander
import json
app = Client('urlExpander')
hour = datetime.now()
today = dt1.today()
path = '/services/' # Always put the ending slash in the path variable
services = []
file_list = []
for f in Path(path).glob('*.txt'):
file_list.append(f.name)
index = len(file_list)
while index != 0:
for i in range(0, index):
add_list = []
file = file_list[i]
r = open(path + file, 'r')
add_list.append(r.readlines())
add_list = str(add_list)
add_list = add_list.replace('[', '')
add_list = add_list.replace(']', '')
add_list = add_list.replace(' ', '')
add_list = add_list.replace('\\n', '')
add_list = add_list.replace("'", '')
add_list = add_list.split(',')
add_list = list(add_list)
services += add_list
print(len(add_list))
del add_list
index -= 1
r.close()
print(f'Supported services: {len(services)}')
def watch(client, message):
counter = 1
links = []
for service in services:
pattern = f'{service}/'
match = re.match(pattern, message.text)
if match:
url = match.group(0)
request = urlexpander.unshort(url)
hops = request['hops']
hops = list(hops.values())
for hop in hops:
link = f'{counter}. {hop}'
url_original = f'{min(hops)}'
links.append(link)
counter += 1
res = links[-1]
res = str(res)
res = res[3:]
links = str(links)
links = links.replace('[', '')
links = links.replace(']', '')
links = links.replace("'", '')
links = links.replace(', ', '\n')
current_date = today.strftime("%d %B, %Y")
current_time = hour.strftime("%H:%M:%S")
data = f'{current_date} - {current_time}'
log = {
'date': data,
'id': message.from_user.id,
'group_id': message.chat.id,
'message_id': message.message_id,
'api_response': request,
}
with open('logs.txt', 'a') as f:
json.dump(log, f)
f.write('\n')
f.close()
# auto-search output message
message.reply('URL Original:\n{}\n\nURL Final:\n{}\n\nRedirecionamentos:\n{}'.format(url_original, res, links), disable_web_page_preview=True)
del links
del link
del res
del hops
del request
del url
del log
del data
# on /expander group call
@app.on_message(filters.command('expander'))
def expander(client, message):
url = message.text.replace('/expander','').replace(' ','')
urlexpander.unshort(url)
request = urlexpander.unshort(url)
hops = request['hops']
hops = list(hops.values())
for hop in hops:
link = f'{counter}. {hop}'
url_original = f'{min(hops)}'
links.append(link)
counter += 1
res = links[-1]
res = str(res)
res = res[3:]
links = str(links)
links = links.replace('[', '')
links = links.replace(']', '')
links = links.replace("'", '')
links = links.replace(', ', '\n')
current_date = today.strftime("%d %B, %Y")
current_time = hour.strftime("%H:%M:%S")
data = f'{current_date} - {current_time}'
log = {
'date': data,
'id': message.from_user.id,
'group_id': message.chat.id,
'message_id': message.message_id,
'api_response': request,
}
with open('logs.txt', 'a') as f:
json.dump(log, f)
f.write('\n')
f.close()
# group: output message
message.reply('URL Original:\n{}\n\nURL Final:\n{}\n\nRedirecionamentos:\n{}'.format(url_original, res, links), disable_web_page_preview=True)
del links
del link
del res
del hops
del request
del url
del data

3
requirements.txt Normal file
View File

@ -0,0 +1,3 @@
dnspython==2.2.1
Pyrogram==1.4.9
requests==2.22.0

View File

@ -0,0 +1,648 @@
0rz.tw
1-url.net
126.am
1link.in
1tk.us
1un.fr
1url.com
1url.cz
1wb2.net
2.gp
2.ht
23o.net
2ad.in
2big.at
2doc.net
2fear.com
2pl.us
2tu.us
2ty.in
2u.xf.cz
2ya.com
3ra.be
3x.si
4i.ae
4url.cc
4view.me
5em.cz
5url.net
5z8.info
6fr.ru
6g6.eu
6url.com
7.ly
76.gd
77.ai
7fth.cc
7li.in
7vd.cn
8u.cz
944.la
98.to
9m.no
9qr.de
AltURL.com
Bit.ly
BudURL.com
Buff.ly
BurnURL.com
C-O.IN
ClickMeter.com
DecentURL.com
DigBig.com
Digg.com
DwarfURL.com
EasyURI.com
EasyURL.net
EsyURL.com
Fhurl.com
Fly2.ws
GoWat.ch
Hurl.it
IsCool.net
Just.as
L9.fr
Lvvk.com
MyURL.in
PiURL.com
Profile.to
QLNK.net
Quip-Art.com
RedirX.com
Sharein.com
ShortLinks.co.uk
Shrinkify.com
SimURL.com
StartURL.com
TightURL.com
Tnij.org
To8.cc
TraceURL.com
URL.ie
URLHawk.com
WapURL.co.uk
XeeURL.com
Yep.it
a.co
a.gg
a.nf
a0.fr
a2a.me
abbr.sk
abbrr.com
ad-med.cz
ad5.eu
ad7.biz
adb.ug
adf.ly
adfa.st
adfly.fr
adfoc.us
adjix.com
adli.pw
admy.link
adv.li
ajn.me
aka.gr
al.ly
alil.in
any.gs
aqva.pl
ares.tl
asso.in
atu.ca
au.ms
ayt.fr
azali.fr
b00.fr
b23.ru
b54.in
bacn.me
baid.us
bc.vc
bee4.biz
bim.im
bit.do
bit.ly
bitly.com
bitw.in
bkite.com
blap.net
ble.pl
blip.tv
bloat.me
boi.re
bote.me
bougn.at
br4.in
brk.to
brzu.net
budurl.com
buk.me
bul.lu
bxl.me
bzh.me
cachor.ro
captur.in
catchylink.com
cbs.so
cbug.cc
cc.cc
ccj.im
cf.ly
cf2.me
cf6.co
chilp.it
cjb.net
clck.ru
cli.gs
clikk.in
cn86.org
coinurl.com
cort.as
couic.fr
cr.tl
cudder.it
cur.lv
curl.im
cut.pe
cut.sk
cutt.eu
cutt.us
cutu.me
cuturl.com
cybr.fr
cyonix.to
d75.eu
daa.pl
dai.ly
dd.ma
ddp.net
decenturl.com
dfl8.me
dft.ba
doiop.com
dolp.cc
dopice.sk
droid.ws
dv.gd
dy.fi
dyo.gs
e37.eu
ecra.se
eepurl.com
ely.re
emojilink.me
erax.cz
erw.cz
ewerl.com
ex9.co
ezurl.cc
fa.b
ff.im
fff.re
fff.to
fff.wf
filz.fr
fire.to
firsturl.de
flic.kr
fly2.ws
fnk.es
foe.hn
folu.me
fon.gs
freze.it
fur.ly
fwd4.me
g00.me
gg.gg
git.io
gl.am
go.9nl.com
go2.me
go2cut.com
goo.gl
goo.lu
good.ly
goshrink.com
grem.io
gri.ms
guiama.is
gurl.es
hadej.co
hec.su
hellotxt.com
hex.io
hide.my
hjkl.fr
hops.me
hover.com
href.in
href.li
ht.ly
htxt.it
hugeurl.com
hurl.me
hurl.ws
i-2.co
i99.cz
icanhaz.com
icit.fr
ick.li
icks.ro
idek.net
iiiii.in
iky.fr
ilix.in
info.ms
inreply.to
is.gd
isra.li
iterasi.net
itm.im
ity.im
ix.sk
j.gs
j.mp
jdem.cz
jieb.be
jijr.com
jmp2.net
jp22.net
jqw.de
kask.us
kd2.org
kfd.pl
kissa.be
kl.am
klck.me
korta.nu
kr3w.de
krat.si
kratsi.cz
krod.cz
krunchd.com
kuc.cz
kxb.me
l-k.be
l.gg
lc-s.co
lc.cx
lcut.in
letop10.
libero.it
lick.my
lien.li
lien.pl
liip.to
liltext.com
lin.cr
lin.io
linkbee.com
linkbun.ch
linkn.co
liurl.cn
llu.ch
ln-s.net
ln-s.ru
lnk.co
lnk.gd
lnk.in
lnk.ly
lnk.sk
lnked.in
lnks.fr
lnky.fr
lnp.sn
loopt.us
lp25.fr
lru.jp
lt.tl
lurl.no
lynk.my
m1p.fr
m3mi.com
make.my
mcaf.ee
mdl29.net
metamark.net
mic.fr
migre.me
minilien.com
miniurl.com
minu.me
minurl.fr
moourl.com
more.sh
mut.lu
myurl.in
ne1.net
net.ms
net46.net
nicou.ch
nig.gr
niny.io
njx.me
nn.nf
notlong.com
nov.io
nq.st
nsfw.in
nxy.in
o-x.fr
okok.fr
om.ly
ou.af
ou.gd
oua.be
ouo.io
ow.ly
p.pw
para.pt
parky.tv
past.is
pd.am
pdh.co
ph.dog
ph.ly
pic.gd
pich.in
pin.st
ping.fm
plots.fr
pm.wu.cz
pnt.me
po.st
poprl.com
post.ly
posted.at
ppfr.it
ppst.me
ppt.cc
ppt.li
prejit.cz
ptab.it
ptm.ro
pw2.ro
py6.ru
q.gs
qbn.ru
qicute.com
qqc.co
qr.net
qrtag.fr
qxp.cz
qxp.sk
rb6.co
rb6.me
rcknr.io
rdz.me
redir.ec
redir.fr
redu.it
ref.so
reise.lc
relink.fr
ri.ms
rickroll.it
riz.cz
riz.gd
rod.gs
roflc.at
rsmonkey.com
rt.se
rt.tc
ru.ly
rubyurl.com
s-url.fr
s.id
s7y.us
safe.mn
sagyap.tk
sdu.sk
seeme.at
segue.se
sh.st
shar.as
sharetabs.com
shorl.com
short.cc
short.ie
short.nr
short.pk
short.to
shorte.st
shortna.me
shorturl.com
shoturl.us
shrinkee.com
shrinkster.com
shrinkurl.in
shrtco.de
shrt.in
shrt.st
shrten.com
shrunkin.com
shw.me
shy.si
sicax.net
sina.lt
sk.gy
skr.sk
skroc.pl
smll.co
sn.im
sn.vc
snipr.com
snipurl.com
snsw.us
snurl.com
soo.gd
sp2.ro
spedr.com
spn.sr
sptfy.com
sq6.ru
sqrl.it
ssl.gs
sturly.com
su.pr
surl.me
sux.cz
sy.pe
t.cn
t.co
t.ly
ta.gd
tabzi.com
tau.pe
tcrn.ch
tdjt.cz
thesa.us
thinfi.com
thrdl.es
tin.li
tini.cc
tiny.cc
tiny.lt
tiny.ms
tiny.pl
tiny123.com
tinyarro.ws
tinytw.it
tinyuri.ca
tinyurl.com
tinyurl.hu
tinyvid.io
tixsu.com
tldr.sk
tldrify.com
tllg.net
tnij.org
tny.cz
tny.im
to.ly
togoto.us
tohle.de
tpmr.com
tr.im
tr.my
tr5.in
trck.me
trick.ly
trkr.ws
trunc.it
turo.us
tweetburner.com
twet.fr
twi.im
twirl.at
twit.ac
twitterpan.com
twitthis.com
twiturl.de
twlr.me
twurl.cc
twurl.nl
u.mavrev.com
u.nu
u.to
u6e.de
ub0.cc
uby.es
ucam.me
ug.cz
ulmt.in
unlc.us
updating.me
upzat.com
ur1.ca
url.co.uk
url2.fr
url4.eu
url5.org
urlao.com
urlbrief.com
urlcover.com
urlcut.com
urlenco.de
urlin.it
urlkiss.com
urlkr.com
urlot.com
urlpire.com
urls.fr
urlx.ie
urlx.org
urlz.fr
urlzen.com
urub.us
utfg.sk
v.gd
v.ht
v5.gd
vaaa.fr
valv.im
vaza.me
vbly.us
vd55.com
verd.in
vgn.me
virl.com
vl.am
vov.li
vsll.eu
vt802.us
vur.me
vv.vg
w1p.fr
w3t.org
waa.ai
wb1.eu
web99.eu
wed.li
wideo.fr
wipi.es
wp.me
wtc.la
wu.cz
ww7.fr
wwy.me
x.co
x.nu
x.se
x10.mx
x2c.eu
x2c.eumx
xaddr.com
xav.cc
xgd.in
xib.me
xl8.eu
xn--ki8h.ws
xn--kn8h.to
xn--vi8hl0c.ws
xoe.cz
xr.com
xrl.in
xrl.us
xt3.me
xua.me
xub.me
xurl.jp
xurls.co
xzb.cc
y2u.be
yagoa.fr
yagoa.me
yau.sh
yeca.eu
yect.com
yep.it
yfrog.com
yogh.me
yon.ir
youfap.me
ysear.ch
yweb.com
yyv.co
z9.fr
zSMS.net
zapit.nu
zeek.ir
zi.ma
zi.pe
zip.net
zipmyurl.com
zkr.cz
zkrat.me
zkrt.cz
zoodl.com
zpag.es
zti.me
zxq.net
zyva.org
zz.gd
zzb.bz
shorturl.ac

1590
services/tld.txt Normal file

File diff suppressed because it is too large Load Diff

51
urlexpander.py Normal file
View File

@ -0,0 +1,51 @@
import dns.resolver, requests
dns.resolver.default_resolver=dns.resolver.Resolver(configure=False)
dns.resolver.default_resolver.nameservers=['9.9.9.9', '149.112.112.112']
headers = {"User-agent": "Mozilla/5.0 (X11; Linux x86_64; rv:98.0) Gecko/20100101 Firefox/98.0"}
def isValid(url):
if url.startswith('http://'):
url = url[7:]
httpIncluded = True
elif url.startswith('https://'):
url = url[8:]
httpIncluded = True
else:
httpIncluded = False
firstSlash = url.find('/')
if not firstSlash < 0:
url = url[:firstSlash]
try:
dns.resolver.resolve(url)
isDnsValid = True
except (dns.resolver.NXDOMAIN, dns.resolver.NoAnswer) as error:
isDnsValid = False
return {'httpIncluded': httpIncluded, 'isDnsValid': isDnsValid}
def unshort(short):
output = isValid(short)
if not output['isDnsValid']:
return {'unshorted': False, 'isDnsValid': False}
if not output['httpIncluded']:
short = 'http://' + short
request = requests.get(short, stream=True, headers=headers)
hops = [hops.url for hops in request.history]
if hops:
if hops[-1] != request.url:
hops.append(request.url)
else:
hops.append(request.url)
output = {'hops': {index: hops[index] for index in range(len(hops))}, 'isDnsValid': True}
return output