Compare commits
11
Commits
94f4539242
..
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c3301d9276 | ||
|
|
bcef114a02 | ||
|
|
41e41b3f02 | ||
|
|
0698e695bf | ||
|
|
6361a23977 | ||
|
|
a2eaf44ffe | ||
|
|
b6e82f0d42 | ||
|
|
52892f88e2 | ||
|
|
b7b58e6192 | ||
|
|
e51f7e98df | ||
|
|
6436454003 |
@@ -106,3 +106,4 @@ ENV/
|
|||||||
db.sqlite3
|
db.sqlite3
|
||||||
|
|
||||||
data/*
|
data/*
|
||||||
|
*.log
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
import shelve
|
|
||||||
|
|
||||||
db = shelve.open('t0txt')
|
|
||||||
|
|
||||||
new = shelve.open('new')
|
|
||||||
|
|
||||||
for k in db.keys():
|
|
||||||
try:
|
|
||||||
note = db[k]
|
|
||||||
except:
|
|
||||||
print('error', k)
|
|
||||||
continue
|
|
||||||
|
|
||||||
if not note and not isinstance(note, str):
|
|
||||||
print('bad', k)
|
|
||||||
continue
|
|
||||||
|
|
||||||
if k == 'HVQH':
|
|
||||||
continue
|
|
||||||
|
|
||||||
new[k] = note
|
|
||||||
+113
@@ -0,0 +1,113 @@
|
|||||||
|
import shelve
|
||||||
|
|
||||||
|
db = shelve.open('data/t0txt')
|
||||||
|
|
||||||
|
to_delete = []
|
||||||
|
|
||||||
|
WHITELIST = ['t0.vc', 'tanner', 'protospace', 'seed combinations', 'tcoins in circulation', 'pokemon trade', 'pokemon battle', 'unique in collection', '%) left.', 'telethon', 'datetime', ' +0000', 'print(', 'console.log', 'systemd', '-Iinclude', 'BOOT_IMAGE', '#endif', '/bin/bash', 'python3.', 'stdio.h', 'int main(']
|
||||||
|
BAD_WORDS = ['blogspot.com', 'livejournal.com', 'tumblr.com', 'noname.fun', 'biturl.top', 'google.com/url?q', '.ru/">', '.ru">', 'viagra']
|
||||||
|
BAD_COMBO = ['jackpot', 'casino', 'sex', 'porn', 'naked', 'xxx', 'lesbian', 'gay', 'crypto', 'pussy', 'fuck', 'cialis', 'pharmacy', 'doxycycline', 'zantac', 'ivermectin', 'drug', 'prescri', 'amateur', 'kratom', 'medicament', 'medicine', 'medication', 'lisinopril', 'pepcid', 'prilosec', 'lolita', 'bitcoin', 'ethereum', 'essay', 'professor']
|
||||||
|
|
||||||
|
LANGUAGE = [
|
||||||
|
'fælde oversøiske får effektivitet symptomerne',
|
||||||
|
'лучить полную консультацию нашего Менеджера также оставить заявку получение справки формы',
|
||||||
|
'Привет нашел классный сайт про автомобили много полезной информации',
|
||||||
|
'lekárskeho predpisu lekárni liekové interakcie lekárňach kúpiť',
|
||||||
|
'gået årene bære мошенники пидорасы здесь обман отзывы',
|
||||||
|
'sjukdom dysfunktion njurinfektion läser när läkemedel kända',
|
||||||
|
'Создание дома вашей мечты это оригинальная возможность спланировать претворить жизнь нечто воистину уникальное всех отношениях',
|
||||||
|
'Узнайте сваи винтовые для фундамента цены вытегре спспециалистовециалистов корпорации',
|
||||||
|
'criptovaluta descuento tecnologicos portafoglio informazioni crittografia koronaviru quimioterapia',
|
||||||
|
'ігрові автомати Казино украина отзывы киеве закрыли поездки зарубеж',
|
||||||
|
'только недавно они вошли рынке этой продукции Предлагаем Вашему вниманию изделия',
|
||||||
|
'Искалка интернет магазинам Без рекламы прочих прелестей современного интернета вакансии тур операторов',
|
||||||
|
'rychlé doručení inzulín měchýře formuláře předpis během těhotenství předpis potřeby hyperkalémie kloubů možnou přijatelné',
|
||||||
|
'第 借 錢 網 擁 有 全 台 最 多 的 借 錢 資 訊 歐 客 佬 精 品 咖 啡 遊 戲 情 報 專 業 光 碟 教 學 網 站 娛 樂 城 介 紹',
|
||||||
|
'карта для оплаты интернете займы счет банке номер телефона монеза подпольное казино киева новости туризма операторов сыр Пинап казино',
|
||||||
|
'Bán đến dưới giá đổi thời điểm',
|
||||||
|
'bære strømper stråler nødvendige hænder',
|
||||||
|
'stråling bløde antibakterielle også søvn forretningsrejse repræsenterer opnås',
|
||||||
|
'кливленд кавальерс состав доска липа сухая москва доска дубовая обрезная сухая купить брус ясень купить новые фото кубань руна человек значение',
|
||||||
|
'Присутствие данном присутствие больших пакгаузных комнат создало допустимым формирование постоянных поставок абсолютно всем покупателям',
|
||||||
|
'очень интересно чичего понятно Портал котором собраны все будет полезен всем',
|
||||||
|
'jednostavno prednosti korisnicka podrska kvalitetna',
|
||||||
|
'antibiootikumid kasumijaotus haavandite kasutamine',
|
||||||
|
'större säker övningar sköldkörteln Även migræne læge være træt',
|
||||||
|
'Возможности программы компьютера новости поездок programД спасибо интересное чтиво',
|
||||||
|
'medizinisches nutzliches gefunden',
|
||||||
|
'يشتمل موقعنا على روابط تشعبية وتفاصيل عن مواقع خاصة بأطراف ثالثة علمًا بأنه ليس لدينا أي سيطرة على سياسات الخصوصية وممارسات الأطراف الثالثة كما أننا لسنا مسؤولين عنها',
|
||||||
|
'psoriasi trattamento dermatite',
|
||||||
|
'סר ט סקס ח נם',
|
||||||
|
'ссылка Зацените Ваше мнение юмз фронтальный погрузчик или самых сексуальных моделей кредит для ип онлайн заработок на стейкинге Ботвинья Рецепт Приготовления',
|
||||||
|
'antivirale medicijnen antivirale geneesmiddelen richten antiviraal antivirovГЅch virЕЇm',
|
||||||
|
'заработок криптовалюте заработок стейкинге кормить почему доверяю кормам Гидра официальный сайт нем дает Заказчикам стейкинге криптовалют заработок курсы английского языка',
|
||||||
|
'взыскание задолженности по договору поможем вернуть долг Пограничное расстройство личности',
|
||||||
|
'ケ ー ス コ ピ シ ャ ネ ル',
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
for lang in LANGUAGE:
|
||||||
|
BAD_COMBO += [x.strip() for x in lang.split(' ')]
|
||||||
|
BAD_COMBO = list(set(BAD_COMBO))
|
||||||
|
|
||||||
|
num_before = len(db)
|
||||||
|
|
||||||
|
for key, value in db.items():
|
||||||
|
content = value.lower()
|
||||||
|
skip = False
|
||||||
|
|
||||||
|
for good_word in WHITELIST:
|
||||||
|
if good_word in content:
|
||||||
|
skip = True
|
||||||
|
break
|
||||||
|
|
||||||
|
if skip: continue
|
||||||
|
|
||||||
|
for bad_word in BAD_WORDS:
|
||||||
|
if bad_word in content:
|
||||||
|
print('Deleting note', key, 'bad word:', bad_word)
|
||||||
|
to_delete.append(key)
|
||||||
|
skip = True
|
||||||
|
break
|
||||||
|
|
||||||
|
if skip: continue
|
||||||
|
|
||||||
|
combo_hits = set()
|
||||||
|
|
||||||
|
for bad_word in BAD_COMBO:
|
||||||
|
if bad_word in content:
|
||||||
|
combo_hits.add(bad_word)
|
||||||
|
|
||||||
|
if len(combo_hits) >= 2:
|
||||||
|
print('Deleting note', key, 'bad combo:', ', '.join(list(combo_hits)))
|
||||||
|
to_delete.append(key)
|
||||||
|
continue
|
||||||
|
|
||||||
|
num_http = content.count('http')
|
||||||
|
num_line = content.replace('\n\n', '\n').count('\n')
|
||||||
|
link_ratio = num_http / num_line if num_line else 999
|
||||||
|
|
||||||
|
if num_http > 7 and link_ratio > 0.75:
|
||||||
|
print('Deleting note', key, 'links:', num_http, 'ratio:', round(link_ratio, 2))
|
||||||
|
to_delete.append(key)
|
||||||
|
continue
|
||||||
|
|
||||||
|
to_delete = list(set(to_delete))
|
||||||
|
|
||||||
|
print('found', len(to_delete), 'notes to delete')
|
||||||
|
|
||||||
|
for key in to_delete:
|
||||||
|
del db[key]
|
||||||
|
|
||||||
|
#import random
|
||||||
|
#while True:
|
||||||
|
# note_id = random.choice(to_delete)
|
||||||
|
# note = db[note_id]
|
||||||
|
#
|
||||||
|
# print()
|
||||||
|
# print('===================================================')
|
||||||
|
# print()
|
||||||
|
# print(note)
|
||||||
|
# input()
|
||||||
|
|
||||||
|
print('done.')
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
import sys
|
||||||
|
import shelve
|
||||||
|
|
||||||
|
if len(sys.argv) < 2:
|
||||||
|
print('Please give the note ID to delete.')
|
||||||
|
print('Example: python misc/delete.py IEGA')
|
||||||
|
exit()
|
||||||
|
else:
|
||||||
|
del_id = sys.argv[1]
|
||||||
|
|
||||||
|
print('Deleting note:', del_id)
|
||||||
|
|
||||||
|
with shelve.open('data/t0txt') as db:
|
||||||
|
if del_id not in db:
|
||||||
|
print('Not found.')
|
||||||
|
exit()
|
||||||
|
|
||||||
|
print('Contents:')
|
||||||
|
print(db[del_id])
|
||||||
|
|
||||||
|
print()
|
||||||
|
print('Enter to confirm, ctrl-c to cancel')
|
||||||
|
input()
|
||||||
|
|
||||||
|
del db[del_id]
|
||||||
|
|
||||||
|
print('done.')
|
||||||
+20
@@ -0,0 +1,20 @@
|
|||||||
|
import shelve
|
||||||
|
|
||||||
|
db = shelve.open('data/t0txt')
|
||||||
|
|
||||||
|
num_qot = 0
|
||||||
|
num_not = 0
|
||||||
|
|
||||||
|
for key, value in db.items():
|
||||||
|
content = value.lower()
|
||||||
|
|
||||||
|
if 'qot' in content:
|
||||||
|
num_qot += 1
|
||||||
|
else:
|
||||||
|
num_not += 1
|
||||||
|
|
||||||
|
print('num qot:', num_qot)
|
||||||
|
print('num not:', num_not)
|
||||||
|
|
||||||
|
print('ratio:', num_qot / len(db))
|
||||||
|
print('Qot.')
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
import shelve
|
||||||
|
import random
|
||||||
|
|
||||||
|
WHITELIST = ['t0.vc', 'tanner', 'protospace', 'seed combinations', 'tcoins in circulation', 'pokemon trade', 'pokemon battle', 'unique in collection', '%) left.', 'telethon', 'datetime', ' +0000', 'print(', 'console.log', 'systemd', '-Iinclude', 'BOOT_IMAGE', '#endif', '/bin/bash', 'python3.', 'stdio.h']
|
||||||
|
|
||||||
|
db = shelve.open('data/t0txt')
|
||||||
|
|
||||||
|
keys = list(db.keys())
|
||||||
|
|
||||||
|
while True:
|
||||||
|
while True:
|
||||||
|
note_id = random.choice(keys)
|
||||||
|
note = db[note_id]
|
||||||
|
|
||||||
|
for good_word in WHITELIST:
|
||||||
|
if good_word in note.lower():
|
||||||
|
break
|
||||||
|
else: #for
|
||||||
|
break
|
||||||
|
|
||||||
|
print(note)
|
||||||
|
|
||||||
|
num_http = note.count('http')
|
||||||
|
num_line = note.count('\n')
|
||||||
|
|
||||||
|
print('num http:', num_http, 'lines:', num_line, 'ratio:', num_http / num_line if num_line else 'inf')
|
||||||
|
|
||||||
|
input()
|
||||||
+9
-7
@@ -1,7 +1,9 @@
|
|||||||
Click==7.0
|
blinker==1.8.2
|
||||||
Flask==1.1.1
|
click==8.1.7
|
||||||
itsdangerous==1.1.0
|
flask==3.0.3
|
||||||
Jinja2==2.10.1
|
importlib-metadata==8.0.0
|
||||||
MarkupSafe==1.1.1
|
itsdangerous==2.2.0
|
||||||
pkg-resources==0.0.0
|
jinja2==3.1.4
|
||||||
Werkzeug==0.15.5
|
MarkupSafe==2.1.5
|
||||||
|
werkzeug==3.0.3
|
||||||
|
zipp==3.19.2
|
||||||
|
|||||||
@@ -16,10 +16,14 @@ def help():
|
|||||||
form = (
|
form = (
|
||||||
'<form action="{0}" method="POST" accept-charset="UTF-8">'
|
'<form action="{0}" method="POST" accept-charset="UTF-8">'
|
||||||
'<input name="web" type="hidden" value="true">'
|
'<input name="web" type="hidden" value="true">'
|
||||||
'<textarea name="{1}" cols="60" rows="18"></textarea>'
|
'<input name="name" style="border: none;">'
|
||||||
|
'<br><textarea name="{1}" cols="60" rows="18"></textarea>'
|
||||||
|
'<br>CAPTCHA: Who owns this site? <input name="captcha">'
|
||||||
'<br><button type="submit">Submit</button></form>'.format(URL, POST)
|
'<br><button type="submit">Submit</button></form>'.format(URL, POST)
|
||||||
)
|
)
|
||||||
return """
|
return """
|
||||||
|
<meta name="color-scheme" content="light dark" />
|
||||||
|
<meta name="viewport" content="width=1%" />
|
||||||
<pre>
|
<pre>
|
||||||
txt.t0.vc
|
txt.t0.vc
|
||||||
NAME
|
NAME
|
||||||
@@ -28,7 +32,6 @@ NAME
|
|||||||
USAGE
|
USAGE
|
||||||
<command> | curl -F '{0}=<-' {1}
|
<command> | curl -F '{0}=<-' {1}
|
||||||
or upload from the web:
|
or upload from the web:
|
||||||
|
|
||||||
{2}
|
{2}
|
||||||
|
|
||||||
DESCRIPTION
|
DESCRIPTION
|
||||||
@@ -68,21 +71,43 @@ def index():
|
|||||||
|
|
||||||
@flask_app.route('/', methods=['POST'])
|
@flask_app.route('/', methods=['POST'])
|
||||||
def new():
|
def new():
|
||||||
|
print()
|
||||||
try:
|
try:
|
||||||
|
is_web = 'web' in request.form
|
||||||
|
|
||||||
|
name = request.form.get('name', None)
|
||||||
|
if name:
|
||||||
|
# TODO: fail if name field is filled out
|
||||||
|
print('Name filled out:', name)
|
||||||
|
|
||||||
|
captcha = request.form.get('captcha', None)
|
||||||
|
if is_web and 'tanner' not in captcha.lower() and 'collin' not in captcha.lower():
|
||||||
|
print('Captcha failed:', captcha)
|
||||||
|
return redirect('https://txt.t0.vc/LPPZ')
|
||||||
|
else:
|
||||||
|
print('Captcha passed:', captcha)
|
||||||
|
|
||||||
with shelve.open(DB) as db:
|
with shelve.open(DB) as db:
|
||||||
nid = new_id()
|
nid = new_id()
|
||||||
while nid in db:
|
while nid in db:
|
||||||
nid = new_id()
|
nid = new_id()
|
||||||
|
|
||||||
txt = request.form['txt']
|
txt = request.form['txt']
|
||||||
if not txt: raise
|
|
||||||
if len(txt) > 250000: raise
|
if not txt:
|
||||||
|
print('Note is empty.')
|
||||||
|
raise
|
||||||
|
if len(txt) > 250000:
|
||||||
|
print('Note too large.')
|
||||||
|
raise
|
||||||
|
|
||||||
db[nid] = txt
|
db[nid] = txt
|
||||||
|
|
||||||
print('Adding note {}:\n{}'.format(nid, txt))
|
print('Adding note {} via {}:\n{}'.format(nid, 'web' if is_web else 'api', txt))
|
||||||
|
|
||||||
url = '{}/{}'.format(URL, nid)
|
url = '{}/{}'.format(URL, nid)
|
||||||
if 'web' in request.form:
|
|
||||||
|
if is_web:
|
||||||
return redirect(url)
|
return redirect(url)
|
||||||
else:
|
else:
|
||||||
return url + '\n'
|
return url + '\n'
|
||||||
@@ -90,7 +115,8 @@ def new():
|
|||||||
abort(400)
|
abort(400)
|
||||||
|
|
||||||
@flask_app.route('/<nid>', methods=['GET'])
|
@flask_app.route('/<nid>', methods=['GET'])
|
||||||
def get(nid):
|
@flask_app.route('/<nid>/<filename>', methods=['GET'])
|
||||||
|
def get(nid, filename=None):
|
||||||
try:
|
try:
|
||||||
with shelve.open(DB) as db:
|
with shelve.open(DB) as db:
|
||||||
return db[nid] + '\n', 200, {'Content-Type': 'text/plain; charset=utf-8'}
|
return db[nid] + '\n', 200, {'Content-Type': 'text/plain; charset=utf-8'}
|
||||||
|
|||||||
Reference in New Issue
Block a user