Compare commits
No commits in common. "d00544231e413c35e1c0c5fcf85c136eef62c562" and "5598f2b5cb9d28d39f543cc08f7f498374efdfe9" have entirely different histories.
d00544231e
...
5598f2b5cb
|
|
@ -1,5 +1,2 @@
|
||||||
node_modules/
|
|
||||||
.env
|
.env
|
||||||
.env.*
|
*.jpg
|
||||||
dist/
|
|
||||||
.mys
|
|
||||||
37
README.md
37
README.md
|
|
@ -1,6 +1,33 @@
|
||||||
Этот репозиторий создан для унижения Сергея Пидоровича и анального удовлетворения.
|
Надо по приколу и сбору всяких моих проектов
|
||||||
Сергей сосал член
|
|
||||||
|
|
||||||
This repository was created to humiliate Sergey Pidorovich and anal satisfaction.
|
|
||||||
Sergay suck dick
|
|
||||||
|
|
||||||
|
Если захотите использовать данныую сборку различных проектов, то сначала выполните:
|
||||||
|
```
|
||||||
|
cd /needed/your/directore
|
||||||
|
```
|
||||||
|
```
|
||||||
|
git clone https://github.com/hhu67/my.git
|
||||||
|
```
|
||||||
|
Все необходимое для использования этих проектов модули храняться в main.sh:
|
||||||
|
```
|
||||||
|
bash main.sh
|
||||||
|
```
|
||||||
|
Перейдите в папку репозитория
|
||||||
|
```
|
||||||
|
cd my
|
||||||
|
```
|
||||||
|
Выполните
|
||||||
|
```
|
||||||
|
cd code
|
||||||
|
```
|
||||||
|
Если вы хотите установить модули только для конкретного проекта, то сначала выполните:
|
||||||
|
```
|
||||||
|
l
|
||||||
|
```
|
||||||
|
Перейдите в папку выдавшуюся вам по предыдущей команде каторая начинается с /
|
||||||
|
```
|
||||||
|
cd папка
|
||||||
|
```
|
||||||
|
Выполните:
|
||||||
|
```
|
||||||
|
bash main.sh
|
||||||
|
```
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
node_modules/
|
|
||||||
.env
|
|
||||||
.env.*
|
|
||||||
dist/
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
# sergay
|
|
||||||
Здесь будет основной код для унижения,
|
|
||||||
необходимые pip модули:
|
|
||||||
```
|
|
||||||
python-telegram-bot
|
|
||||||
python-dotenv
|
|
||||||
```
|
|
||||||
Here will be the basic code for humiliating,
|
|
||||||
the necessary pip modules:
|
|
||||||
```
|
|
||||||
python-telegram-bot
|
|
||||||
python-dotenv
|
|
||||||
```
|
|
||||||
|
|
@ -1,43 +0,0 @@
|
||||||
import json
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
JSON_FILE = "sergay.json"
|
|
||||||
|
|
||||||
|
|
||||||
def add_phrase(text: str):
|
|
||||||
path = Path(JSON_FILE)
|
|
||||||
|
|
||||||
if not path.exists():
|
|
||||||
print("Файл sergay.json не найден")
|
|
||||||
return
|
|
||||||
|
|
||||||
with path.open("r", encoding="utf-8") as f:
|
|
||||||
data = json.load(f)
|
|
||||||
|
|
||||||
if not isinstance(data, list):
|
|
||||||
print("JSON должен быть списком")
|
|
||||||
return
|
|
||||||
|
|
||||||
last_id = max(item["id"] for item in data)
|
|
||||||
new_id = last_id + 1
|
|
||||||
|
|
||||||
new_item = {
|
|
||||||
"id": new_id,
|
|
||||||
str(new_id): text
|
|
||||||
}
|
|
||||||
|
|
||||||
data.append(new_item)
|
|
||||||
|
|
||||||
with path.open("w", encoding="utf-8") as f:
|
|
||||||
json.dump(data, f, ensure_ascii=False, indent=4)
|
|
||||||
|
|
||||||
print(f"Добавлено: {new_item}")
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
phrase = input("Введите новую фразу: ").strip()
|
|
||||||
|
|
||||||
if phrase:
|
|
||||||
add_phrase(phrase)
|
|
||||||
else:
|
|
||||||
print("Фраза пустая")
|
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
import sys
|
||||||
|
|
||||||
|
lis=[]
|
||||||
|
|
||||||
|
while True:
|
||||||
|
print('Введите 1, чтобы добавить продукт\n\nВведите стоп если хотите закончить')
|
||||||
|
pol=input('Ведите: ')
|
||||||
|
if pol=='1':
|
||||||
|
add_list=input('Введите предмет ')
|
||||||
|
if f'{add_list}' in lis:
|
||||||
|
print(f'{add_list} уже есть в списке')
|
||||||
|
else:
|
||||||
|
add=lis.append(add_list)
|
||||||
|
elif pol=='стоп':
|
||||||
|
print(f'Ваш список покупок {lis}')
|
||||||
|
sys.exit()
|
||||||
|
else:
|
||||||
|
print('Введите верный')
|
||||||
|
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
import requests
|
||||||
|
import urllib3
|
||||||
|
|
||||||
|
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
|
||||||
|
|
||||||
|
urlpr='http://vps-sni-site.site:507/api/random'
|
||||||
|
url='https://httpbin.org/ip'
|
||||||
|
|
||||||
|
r = requests.get(urlpr, verify=False)
|
||||||
|
data = r.json()
|
||||||
|
text = data["proxy"]
|
||||||
|
|
||||||
|
proxies = {
|
||||||
|
'http': text,
|
||||||
|
'https': text
|
||||||
|
}
|
||||||
|
|
||||||
|
j = requests.get(url, proxies=proxies, verify=False)
|
||||||
|
data2 = j.json()
|
||||||
|
text2 = data2["origin"]
|
||||||
|
|
||||||
|
f = requests.get(url, verify=False)
|
||||||
|
data3 = f.json()
|
||||||
|
text3 = data3['origin']
|
||||||
|
|
||||||
|
print(f'Прокси: {text2}\nБез прокси: {text3}')
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
sudo apt update && sudo apt install python3-pip
|
||||||
|
pip install requests --break-system-packages && echo 'yes'
|
||||||
|
pip install urllib3 --break-system-packages && echo 'yes'
|
||||||
|
pip install 'requests[socks]' --break-system-packages && echo 'yes'
|
||||||
398
code/sergay.json
398
code/sergay.json
|
|
@ -1,398 +0,0 @@
|
||||||
[
|
|
||||||
{
|
|
||||||
"id": 1,
|
|
||||||
"1": "сын шлюхи"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 2,
|
|
||||||
"2": "Пидорович"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 3,
|
|
||||||
"3": "обосанный мудак"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 4,
|
|
||||||
"4": "дрочит в коморке"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 5,
|
|
||||||
"5": "свин мертвой шлюхи"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 6,
|
|
||||||
"6": "любит когда ему садятся на лицо"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 7,
|
|
||||||
"7": "гнида хаченская"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 8,
|
|
||||||
"8": "зоофил"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 9,
|
|
||||||
"9": "педофил"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 10,
|
|
||||||
"10": "ебал прах своей матери"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 11,
|
|
||||||
"11": "хуесос с грязной жопой"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 12,
|
|
||||||
"12": "иноагент"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 13,
|
|
||||||
"13": "снаряд в пушке"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 14,
|
|
||||||
"14": "уже мертв"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 15,
|
|
||||||
"15": "любит когда ему наступают на яйца"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 16,
|
|
||||||
"16": "без члена"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 17,
|
|
||||||
"17": "людоед"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 18,
|
|
||||||
"18": "сосал член"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 19,
|
|
||||||
"19": "имеет желтый член"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 20,
|
|
||||||
"20": "не умеет ходить"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 21,
|
|
||||||
"21": "пустил по кругу шуру"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 22,
|
|
||||||
"22": "стриптезер без оброзавания"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 23,
|
|
||||||
"23": "безмозглый пидор"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 24,
|
|
||||||
"24": "999999999999999999 сосал и лизал"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 25,
|
|
||||||
"25": "колличество оборотов его пропелера не исчесляется"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 26,
|
|
||||||
"26": "я хз шо писать"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 27,
|
|
||||||
"27": "петушара"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 28,
|
|
||||||
"28": "спит у параши"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 29,
|
|
||||||
"29": "спидозный"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 30,
|
|
||||||
"30": "фембой"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 31,
|
|
||||||
"31": "живет на нудистком пляже"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 32,
|
|
||||||
"32": "живет в подвале"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 33,
|
|
||||||
"33": "пидор со стажем в отлизывание яиц"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 34,
|
|
||||||
"34": "увидел ребенка и повысил обороты перпелера"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 35,
|
|
||||||
"35": "совал хуй в арбуз"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 36,
|
|
||||||
"36": "терпилоид, но не позволит посылать себя нахуй"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 37,
|
|
||||||
"37": "модная сиська"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 38,
|
|
||||||
"38": "складочка"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 39,
|
|
||||||
"39": "любит детскую порнографию духа"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 40,
|
|
||||||
"40": "жидко пернул"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 41,
|
|
||||||
"41": "ебакрыл"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 42,
|
|
||||||
"42": "хуеглот глоп глоп"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 43,
|
|
||||||
"43": "еврей"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 44,
|
|
||||||
"44": "ебал собак, котов, попугаев, львов, тигров, обезьян, воробьев, хомяков, пантер, лис, кроликов, коз, баранов, ослов, лошадей, оленей"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 45,
|
|
||||||
"45": "сосет и его ебали"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 46,
|
|
||||||
"46": "объебаный наркошарик"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 47,
|
|
||||||
"47": "вялый хуй"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 48,
|
|
||||||
"48": "лох цветочный"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 49,
|
|
||||||
"49": "украинец с гейскими наклонностями"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 50,
|
|
||||||
"50": "обсасывает золотые я\b\b\b\b\b\bх\b"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 51,
|
|
||||||
"51": "краник"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 52,
|
|
||||||
"52": "нюхал яйца"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 53,
|
|
||||||
"53": "фетишист"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 54,
|
|
||||||
"54": "говорит гав гав"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 55,
|
|
||||||
"55": "9\b лет как под наркозом хуйхуйхуй"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 56,
|
|
||||||
"56": "очкастая пизда"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 57,
|
|
||||||
"57": "не имеет прав он петух оалклкоал"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 58,
|
|
||||||
"58": "зассаный банан"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 59,
|
|
||||||
"59": "ZZZ ГОЙДА ПАТРИОТ ZZZ"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 60,
|
|
||||||
"60": "варит меф"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 61,
|
|
||||||
"61": "следит за тобой"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 62,
|
|
||||||
"62": "сидит на дереве с биноклем"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 63,
|
|
||||||
"63": "завел канал на порнхабе"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 64,
|
|
||||||
"64": "четырехглазый пидор"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 65,
|
|
||||||
"65": "поставил водник для раскумара"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 66,
|
|
||||||
"66": "сидит на бутылке"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 67,
|
|
||||||
"67": "магнит для маленьких детей"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 68,
|
|
||||||
"68": ", чтоб его уебало нахуй"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 69,
|
|
||||||
"69": "сел на фонарный столб"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 70,
|
|
||||||
"70": "Сергей жирный уебан"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 71,
|
|
||||||
"71": "Сергей тупорылый далбаеб"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 72,
|
|
||||||
"72": "любит когда его дрючат в жопу потные мужички"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 73,
|
|
||||||
"73": "это чмо+x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 74,
|
|
||||||
"74": "перчаточный гей"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 75,
|
|
||||||
"75": "як"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 76,
|
|
||||||
"76": "домогается до одеяла"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 77,
|
|
||||||
"77": "автобот"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 78,
|
|
||||||
"78": "спиздил учебник и засунул в жопу"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 79,
|
|
||||||
"79": "униженый"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 80,
|
|
||||||
"80": "опущенный"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 81,
|
|
||||||
"81": "шалун с микро пенисом"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 82,
|
|
||||||
"82": "https://vps-sni-site.site/secret-storage-7a2b/sergay.jpg"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 83,
|
|
||||||
"83": "Борщевик ебал"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 84,
|
|
||||||
"84": "фашист"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 85,
|
|
||||||
"85": "залупа очкастая"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 86,
|
|
||||||
"86": "пидор гнойный"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 87,
|
|
||||||
"87": "любит глубоко"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 88,
|
|
||||||
"88": "гном ебаный ублюдочный"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 89,
|
|
||||||
"89": "рисует члены под окнами"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 90,
|
|
||||||
"90": "серый анус"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 91,
|
|
||||||
"91": "මගුලයි, තොපිට කෙලවෙලා"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 92,
|
|
||||||
"92": "любит 卍卍卍"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 93,
|
|
||||||
"93": "хуесос придорасович"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 94,
|
|
||||||
"94": "и директриса ебаные пидоры"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 95,
|
|
||||||
"95": "выпрыгнул в окно"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 96,
|
|
||||||
"96": "а как?"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 97,
|
|
||||||
"97": "ХАХАХА ТЫ ГДЕ ЭТО РАЗДОБЫЛ"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 98,
|
|
||||||
"98": "В Советском Союзе делали всё тихо, не спеша, не дыша, не шиша. Четыре карандаша, не пержа, не жужжа, не гроша, черемша, не тужа, лёжа, дрожа, черемша. Вороша без ковша, со второго этажа, без гаража, без экипажа, без лишнего багажа, без массажа, без монтажа, без камуфляжа, черемша. Для антуража. Без знания падежа, без мятежа. В три ножа, два коржа, черемша. Без репортажа, без стажа. С лицом вождя, с душой моржа. С повадкой ежа, с запахом ржа. тихо, не спеша, без суеты, почти неслышно, с лёгкой улыбкой с тёплым сердцем медленно, но верно спокойно, без лишних слов с внутренним светом чуть задумчиво, но ясно с мягкой уверенностью бережно, как будто впервые с тихой радостью неспешно, наслаждаясь моментом с добрым ожиданием мягко, словно ветер светло, как утро вдумчиво, без суеты с теплом в глазах неторопливо, но глубоко с лёгкой надеждой тихо, но наполненно с уверенностью в хорошем спокойно, принимая всё с мягкой верой в лучшее чуть мечтательно с тихим счастьем внутренне спокойно с ощущением уюта с нежной благодарностью медленно, смакуя жизнь с тёплой тишиной внутриделали это тихо, почти неслышно не спеша, с лёгкой улыбкой с тёплым сердцем медленно, но верно спокойно, без лишних слов с внутренним светом чуть задумчиво, но ясно с мягкой уверенностью бережно, как будто впервые с тихой радостью неспешно, наслаждаясь моментом с добрым ожиданием мягко, словно ветер светло, как утро вдумчиво, без суеты с теплом в глазах неторопливо, но глубоко с лёгкой надеждой тихо, но наполненно с уверенностью в хорошем спокойно, принимая всё с мягкой верой в лучшее чуть мечтательно с тихим счастьем внутренне спокойно с ощущением уюта с нежной благодарностью медленно, смакуя жизнь с тёплой тишиной внутриделали это тихо, почти неслышно не спеша, с лёгкой улыбкой с тёплым сердцем медленно, но верно спокойно, без лишних слов с внутренним светом чуть задумчиво, но ясно с мягкой уверенностью бережно, как будто впервые с тихой радостью неспешно, наслаждаясь моментом с добрым ожиданием мягко, словно ветер светло, как утро вдумчиво, без суеты с теплом в глазах неторопливо, но глубоко с лёгкой надеждой тихо, но наполненно с уверенностью в хорошем спокойно, принимая всё с мягко"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"id": 99,
|
|
||||||
"99": "уебал навального"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
327
code/sergay.py
327
code/sergay.py
|
|
@ -1,327 +0,0 @@
|
||||||
import json
|
|
||||||
import os
|
|
||||||
import random
|
|
||||||
import subprocess
|
|
||||||
import urllib.request
|
|
||||||
import requests
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
from dotenv import load_dotenv
|
|
||||||
from telegram import Update
|
|
||||||
from telegram.ext import (
|
|
||||||
ApplicationBuilder,
|
|
||||||
CommandHandler,
|
|
||||||
ContextTypes,
|
|
||||||
ConversationHandler,
|
|
||||||
MessageHandler,
|
|
||||||
filters,
|
|
||||||
)
|
|
||||||
|
|
||||||
PREFIX_WORD = "серГЕЙ"
|
|
||||||
JSON_FILE = "sergay.json"
|
|
||||||
SERVICE_NAME = "sergay-bot"
|
|
||||||
|
|
||||||
# Токен для связи с сайтом (тот, что мы прописывали в api.php)
|
|
||||||
SITE_API_TOKEN = "super_secret_bot_token_123"
|
|
||||||
|
|
||||||
MESSAGE_100 = "Это сотое оскарбление для серГЕЯ пидоровича, человек каторый это добавил может идти нахуй, а серГЕЙ сын шлюхи"
|
|
||||||
|
|
||||||
WAITING_NEW_PHRASE = 1
|
|
||||||
P_TITLE = 2
|
|
||||||
P_PHOTOS = 3
|
|
||||||
|
|
||||||
|
|
||||||
def load_phrases(file_path: str) -> list[str]:
|
|
||||||
path = Path(file_path)
|
|
||||||
|
|
||||||
if not path.exists():
|
|
||||||
return []
|
|
||||||
|
|
||||||
with path.open("r", encoding="utf-8") as f:
|
|
||||||
data = json.load(f)
|
|
||||||
|
|
||||||
phrases = []
|
|
||||||
|
|
||||||
if isinstance(data, list):
|
|
||||||
for item in data:
|
|
||||||
if isinstance(item, dict):
|
|
||||||
item_id = item.get("id")
|
|
||||||
if isinstance(item_id, int):
|
|
||||||
value = item.get(str(item_id))
|
|
||||||
if isinstance(value, str) and value.strip():
|
|
||||||
phrases.append(value.strip())
|
|
||||||
else:
|
|
||||||
for value in item.values():
|
|
||||||
if isinstance(value, str) and value.strip():
|
|
||||||
phrases.append(value.strip())
|
|
||||||
elif isinstance(item, str) and item.strip():
|
|
||||||
phrases.append(item.strip())
|
|
||||||
|
|
||||||
return phrases
|
|
||||||
|
|
||||||
|
|
||||||
def load_raw_data(file_path: str) -> list:
|
|
||||||
path = Path(file_path)
|
|
||||||
|
|
||||||
if not path.exists():
|
|
||||||
return []
|
|
||||||
|
|
||||||
with path.open("r", encoding="utf-8") as f:
|
|
||||||
data = json.load(f)
|
|
||||||
|
|
||||||
if not isinstance(data, list):
|
|
||||||
raise ValueError("JSON должен содержать список")
|
|
||||||
|
|
||||||
return data
|
|
||||||
|
|
||||||
|
|
||||||
def save_new_phrase(file_path: str, phrase: str) -> None:
|
|
||||||
phrase = phrase.strip()
|
|
||||||
if not phrase:
|
|
||||||
raise ValueError("Пустую фразу добавлять нельзя")
|
|
||||||
|
|
||||||
data = load_raw_data(file_path)
|
|
||||||
|
|
||||||
existing_phrases = set()
|
|
||||||
max_id = 0
|
|
||||||
|
|
||||||
for item in data:
|
|
||||||
if isinstance(item, dict):
|
|
||||||
item_id = item.get("id")
|
|
||||||
if isinstance(item_id, int):
|
|
||||||
max_id = max(max_id, item_id)
|
|
||||||
value = item.get(str(item_id))
|
|
||||||
if isinstance(value, str):
|
|
||||||
existing_phrases.add(value.strip())
|
|
||||||
|
|
||||||
if phrase in existing_phrases:
|
|
||||||
raise ValueError("Такая фраза уже есть в базе")
|
|
||||||
|
|
||||||
new_id = max_id + 1
|
|
||||||
data.append({
|
|
||||||
"id": new_id,
|
|
||||||
str(new_id): phrase
|
|
||||||
})
|
|
||||||
|
|
||||||
path = Path(file_path)
|
|
||||||
with path.open("w", encoding="utf-8") as f:
|
|
||||||
json.dump(data, f, ensure_ascii=False, indent=4)
|
|
||||||
|
|
||||||
|
|
||||||
def restart_service() -> None:
|
|
||||||
subprocess.Popen(
|
|
||||||
["systemctl", "restart", SERVICE_NAME],
|
|
||||||
stdout=subprocess.DEVNULL,
|
|
||||||
stderr=subprocess.DEVNULL,
|
|
||||||
start_new_session=True,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def run_gitup() -> tuple[bool, str]:
|
|
||||||
result = subprocess.run(
|
|
||||||
["bash", "gitup.sh"],
|
|
||||||
capture_output=True,
|
|
||||||
text=True,
|
|
||||||
)
|
|
||||||
|
|
||||||
output = (result.stdout or "").strip()
|
|
||||||
error = (result.stderr or "").strip()
|
|
||||||
|
|
||||||
if result.returncode == 0:
|
|
||||||
return True, output or "gitup выполнен"
|
|
||||||
return False, error or output or "Ошибка выполнения gitup"
|
|
||||||
|
|
||||||
|
|
||||||
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
|
|
||||||
text = (
|
|
||||||
"Вот список команд:\n\n"
|
|
||||||
"Получить фразу — /phrase\n"
|
|
||||||
"Добавить фразу — /new\n"
|
|
||||||
"Добавить картинки на сайт — /new_p\n"
|
|
||||||
)
|
|
||||||
await update.message.reply_text(text)
|
|
||||||
|
|
||||||
|
|
||||||
async def phrase(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
|
|
||||||
try:
|
|
||||||
phrases = load_phrases(JSON_FILE)
|
|
||||||
if not phrases:
|
|
||||||
text = "Фразы пока не добавлены"
|
|
||||||
else:
|
|
||||||
phrase_text = random.choice(phrases)
|
|
||||||
text = f"{PREFIX_WORD} {phrase_text}".strip()
|
|
||||||
except Exception as e:
|
|
||||||
text = f"Ошибка: {e}"
|
|
||||||
|
|
||||||
# Шанс 30% прикрепить картинку
|
|
||||||
if random.random() < 0.3 and not text.startswith("Ошибка"):
|
|
||||||
try:
|
|
||||||
req = urllib.request.Request("https://www.vlv-s.site/api.php?action=random")
|
|
||||||
with urllib.request.urlopen(req, timeout=5) as response:
|
|
||||||
api_data = json.loads(response.read().decode('utf-8'))
|
|
||||||
img_url = api_data.get("url")
|
|
||||||
|
|
||||||
if img_url:
|
|
||||||
await context.bot.send_photo(
|
|
||||||
chat_id=update.effective_chat.id,
|
|
||||||
photo=img_url,
|
|
||||||
caption=text
|
|
||||||
)
|
|
||||||
return
|
|
||||||
except Exception as e:
|
|
||||||
print(f"Ошибка загрузки фото из API: {e}")
|
|
||||||
|
|
||||||
await update.message.reply_text(text)
|
|
||||||
|
|
||||||
|
|
||||||
async def new_start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
|
|
||||||
await update.message.reply_text("Введите фразу:")
|
|
||||||
return WAITING_NEW_PHRASE
|
|
||||||
|
|
||||||
|
|
||||||
async def new_save(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
|
|
||||||
phrase_text = (update.message.text or "").strip()
|
|
||||||
|
|
||||||
if not phrase_text:
|
|
||||||
await update.message.reply_text("Фраза пустая. Введите фразу:")
|
|
||||||
return WAITING_NEW_PHRASE
|
|
||||||
|
|
||||||
try:
|
|
||||||
save_new_phrase(JSON_FILE, phrase_text)
|
|
||||||
await update.message.reply_text(f"Добавленно {PREFIX_WORD} {phrase_text}")
|
|
||||||
|
|
||||||
if len(load_phrases(JSON_FILE)) == 100 and MESSAGE_100.strip():
|
|
||||||
await update.message.reply_text(MESSAGE_100)
|
|
||||||
|
|
||||||
restart_service()
|
|
||||||
except Exception as e:
|
|
||||||
await update.message.reply_text(f"Ошибка: {e}")
|
|
||||||
|
|
||||||
return ConversationHandler.END
|
|
||||||
|
|
||||||
|
|
||||||
async def new_cancel(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
|
|
||||||
await update.message.reply_text("Отменено")
|
|
||||||
return ConversationHandler.END
|
|
||||||
|
|
||||||
|
|
||||||
# --- ЛОГИКА ДЛЯ /new_p (Загрузка картинок) ---
|
|
||||||
async def new_p_start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
|
|
||||||
context.user_data['new_p_photos'] = []
|
|
||||||
await update.message.reply_text("Введите заголовок для новых картинок (он применится ко всем загружаемым сейчас фото):")
|
|
||||||
return P_TITLE
|
|
||||||
|
|
||||||
async def new_p_title(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
|
|
||||||
context.user_data['new_p_title'] = update.message.text.strip()
|
|
||||||
await update.message.reply_text(
|
|
||||||
"Принято! Теперь отправляй мне картинки.\n"
|
|
||||||
"Можешь отправить одну или выделить сразу несколько в галерее.\n\n"
|
|
||||||
"Когда все нужные картинки загрузятся, отправь команду /done"
|
|
||||||
)
|
|
||||||
return P_PHOTOS
|
|
||||||
|
|
||||||
async def new_p_photo(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
|
|
||||||
if update.message.photo:
|
|
||||||
# Сохраняем ID самого большого размера картинки
|
|
||||||
photo_id = update.message.photo[-1].file_id
|
|
||||||
context.user_data['new_p_photos'].append(photo_id)
|
|
||||||
return P_PHOTOS
|
|
||||||
|
|
||||||
async def new_p_done(update: Update, context: ContextTypes.DEFAULT_TYPE) -> int:
|
|
||||||
photos = context.user_data.get('new_p_photos', [])
|
|
||||||
title = context.user_data.get('new_p_title', 'Новое фото')
|
|
||||||
|
|
||||||
if not photos:
|
|
||||||
await update.message.reply_text("Ты не отправил ни одной картинки. Операция отменена.")
|
|
||||||
return ConversationHandler.END
|
|
||||||
|
|
||||||
await update.message.reply_text(f"⏳ Скачиваю и отправляю {len(photos)} фото на сервер. Это может занять пару минут...")
|
|
||||||
|
|
||||||
try:
|
|
||||||
files_payload = []
|
|
||||||
for i, pid in enumerate(photos):
|
|
||||||
new_file = await context.bot.get_file(pid)
|
|
||||||
p_bytes = await new_file.download_as_bytearray()
|
|
||||||
# Формируем пакет файлов так же, как отправляет браузер (массив photos[])
|
|
||||||
files_payload.append(('photos[]', (f'img_tg_{i}.jpg', p_bytes, 'image/jpeg')))
|
|
||||||
|
|
||||||
data_payload = {
|
|
||||||
'title': title,
|
|
||||||
'description': '',
|
|
||||||
'api_token': SITE_API_TOKEN
|
|
||||||
}
|
|
||||||
|
|
||||||
resp = requests.post("https://www.vlv-s.site/api.php?action=upload", files=files_payload, data=data_payload)
|
|
||||||
resp_json = resp.json()
|
|
||||||
|
|
||||||
if resp_json.get('success'):
|
|
||||||
await update.message.reply_text("✅ Успех! Картинки добавлены в галерею на сайт.")
|
|
||||||
else:
|
|
||||||
await update.message.reply_text(f"❌ Сайт вернул ошибку: {resp_json}")
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
await update.message.reply_text(f"❌ Ошибка соединения или загрузки: {e}")
|
|
||||||
|
|
||||||
# Очищаем данные
|
|
||||||
context.user_data.clear()
|
|
||||||
return ConversationHandler.END
|
|
||||||
|
|
||||||
|
|
||||||
async def gitup(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
|
|
||||||
await update.message.reply_text("Запускаю gitup...")
|
|
||||||
|
|
||||||
ok, output = run_gitup()
|
|
||||||
|
|
||||||
if len(output) > 3500:
|
|
||||||
output = output[:3500] + "\n\n...вывод обрезан"
|
|
||||||
|
|
||||||
if ok:
|
|
||||||
await update.message.reply_text(f"gitup выполнен\n\n{output}")
|
|
||||||
else:
|
|
||||||
await update.message.reply_text(f"Ошибка gitup\n\n{output}")
|
|
||||||
|
|
||||||
|
|
||||||
def main() -> None:
|
|
||||||
load_dotenv()
|
|
||||||
token = os.getenv("TG_TOKEN")
|
|
||||||
|
|
||||||
if not token:
|
|
||||||
raise ValueError("Не найден TG_TOKEN в .env")
|
|
||||||
|
|
||||||
app = ApplicationBuilder().token(token).build()
|
|
||||||
|
|
||||||
new_handler = ConversationHandler(
|
|
||||||
entry_points=[CommandHandler("new", new_start)],
|
|
||||||
states={
|
|
||||||
WAITING_NEW_PHRASE: [
|
|
||||||
MessageHandler(filters.TEXT & ~filters.COMMAND, new_save)
|
|
||||||
],
|
|
||||||
},
|
|
||||||
fallbacks=[CommandHandler("cancel", new_cancel)],
|
|
||||||
)
|
|
||||||
|
|
||||||
new_p_handler = ConversationHandler(
|
|
||||||
entry_points=[CommandHandler("new_p", new_p_start)],
|
|
||||||
states={
|
|
||||||
P_TITLE: [
|
|
||||||
MessageHandler(filters.TEXT & ~filters.COMMAND, new_p_title)
|
|
||||||
],
|
|
||||||
P_PHOTOS: [
|
|
||||||
MessageHandler(filters.PHOTO, new_p_photo),
|
|
||||||
CommandHandler("done", new_p_done)
|
|
||||||
]
|
|
||||||
},
|
|
||||||
fallbacks=[CommandHandler("cancel", new_cancel)],
|
|
||||||
)
|
|
||||||
|
|
||||||
app.add_handler(CommandHandler("start", start))
|
|
||||||
app.add_handler(CommandHandler("phrase", phrase))
|
|
||||||
app.add_handler(CommandHandler("gitup", gitup))
|
|
||||||
app.add_handler(new_handler)
|
|
||||||
app.add_handler(new_p_handler)
|
|
||||||
|
|
||||||
app.run_polling()
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
|
|
@ -0,0 +1,14 @@
|
||||||
|
import requests
|
||||||
|
import urllib3
|
||||||
|
|
||||||
|
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
|
||||||
|
|
||||||
|
url = 'http://vps-sni-site.site:5000/api/random'
|
||||||
|
|
||||||
|
def req():
|
||||||
|
for i in range(50):
|
||||||
|
r = requests.get(url, verify=False)
|
||||||
|
data = r.json()
|
||||||
|
text = data[str(data["id"])]
|
||||||
|
print(f'серГЕЙ {text}')
|
||||||
|
req()
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
sudo apt update && sudo apt install python3-pip
|
||||||
|
pip install requests --break-system-packages
|
||||||
|
pip install urllib3 --break-system-packages
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
mkdir fff
|
||||||
|
cd fff
|
||||||
|
git clone https://github.com/hhu67/my.git
|
||||||
|
cd ~/fff/my
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
sudo apt update && sudo apt install python3-pip -y
|
||||||
|
pip install requests --break-system-packages && echo 'yes'
|
||||||
|
pip install urllib3 --break-system-packages && echo 'yes'
|
||||||
|
pip install 'requests[socks]' --break-system-packages && echo 'yes'
|
||||||
|
echo yes
|
||||||
61
push.sh
61
push.sh
|
|
@ -1,61 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# =========================
|
|
||||||
# Настройки
|
|
||||||
# =========================
|
|
||||||
BRANCH="main"
|
|
||||||
|
|
||||||
# Цвета
|
|
||||||
GREEN='\033[0;32m'
|
|
||||||
BLUE='\033[0;34m'
|
|
||||||
RED='\033[0;31m'
|
|
||||||
NC='\033[0m'
|
|
||||||
|
|
||||||
echo -e "${BLUE}===> Добавляем изменения...${NC}"
|
|
||||||
git add .
|
|
||||||
|
|
||||||
# =========================
|
|
||||||
# Коммит
|
|
||||||
# =========================
|
|
||||||
if [ -z "$1" ]; then
|
|
||||||
msg="Update $(date +'%Y-%m-%d %H:%M:%S')"
|
|
||||||
else
|
|
||||||
msg="$1"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo -e "${BLUE}===> Коммитим: ${GREEN}$msg${NC}"
|
|
||||||
git commit -m "$msg" 2>/dev/null || echo -e "${BLUE}Нет новых изменений${NC}"
|
|
||||||
|
|
||||||
# =========================
|
|
||||||
# Пуш на Gitek
|
|
||||||
# =========================
|
|
||||||
echo -e "${BLUE}===> Пушим на Gitek...${NC}"
|
|
||||||
if ! git push gitek "$BRANCH"; then
|
|
||||||
echo -e "${RED}Ошибка при push в Gitek${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# =========================
|
|
||||||
# Синхронизация с GitHub
|
|
||||||
# =========================
|
|
||||||
echo -e "${BLUE}===> Синхронизируемся с GitHub...${NC}"
|
|
||||||
if ! git pull github "$BRANCH" --rebase; then
|
|
||||||
echo -e "${RED}Конфликт при pull!${NC}"
|
|
||||||
echo -e "${RED}Реши конфликты вручную, затем выполни:${NC}"
|
|
||||||
echo -e "${GREEN}git add . && git rebase --continue${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# =========================
|
|
||||||
# Пуш на GitHub
|
|
||||||
# =========================
|
|
||||||
echo -e "${BLUE}===> Пушим на GitHub...${NC}"
|
|
||||||
if ! git push github "$BRANCH"; then
|
|
||||||
echo -e "${RED}Ошибка при push в GitHub${NC}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# =========================
|
|
||||||
# Готово
|
|
||||||
# =========================
|
|
||||||
echo -e "${GREEN}✔ Готово! Код обновлен в обоих репозиториях.${NC}"
|
|
||||||
BIN
sergay.jpg
BIN
sergay.jpg
Binary file not shown.
|
Before Width: | Height: | Size: 75 KiB |
Loading…
Reference in New Issue