ub4tg/ubot.py

760 lines
30 KiB
Python
Raw Normal View History

2024-12-08 15:03:27 +02:00
# -*- coding: utf-8 -*-
# https://docs-python.ru/packages/telegram-klient-telethon-python/ <-info
import asyncio
from datetime import datetime, timedelta
# from telethon.sync import TelegramClient
2024-12-18 09:48:02 +02:00
from telethon import TelegramClient, events, functions, types, utils
2024-12-08 15:03:27 +02:00
2024-12-13 15:33:09 +02:00
import os
2024-12-08 15:03:27 +02:00
import re
import random
import time
2024-12-18 09:48:02 +02:00
import json
2024-12-08 15:03:27 +02:00
import pymysql
import pymysql.cursors
import sqlite3
2024-12-18 09:48:02 +02:00
import typing
if os.name == 'nt':
import win32api
########################################################################
# крч тут у нас стандартні параметри. Більшість з них буде перевизначено
2024-12-08 15:03:27 +02:00
sessdb = 'tl-ub'
2024-12-18 09:48:02 +02:00
api_id = 00000000
api_hash = 'blahblahblahblahblahblahblahblah'
2024-12-13 21:13:09 +02:00
default_directory = ''
2024-12-18 09:48:02 +02:00
CONFIG_PATH = "conf.json"
config = {} # Empty.json
timezone = "Europe/Kiev"
db_pymysql = False#set True or False
db_sqlite3 = True #set True or False
bf_mode='Normal'# dnt edit this. :Normal|Slow|Fast|Turbo # is beta...
bf_run = False # dnt edit this.
ostalos_pt=10 # осталось. буде мінятись.
rs_min= 11 # інтервал. буде мінятись.
rs_max=3600 # інтервал. буде мінятись.
a_h = False # тут не чіпать, лише в конфіґ записуйте, якщо нада.
i2a = False # тут не чіпать, лише в конфіґ записуйте, якщо нада.
a_404_p = False # не чіпать, лише в конфіґ записуйте, якщо нада.
irises = [707693258,5137994780,5226378684,5443619563,5434504334]
is_termux = os.environ.get('TERMUX_APP__PACKAGE_NAME') or os.environ.get('TERMUX_APK_RELEASE')
treat_as_true = ('true', '1', 't', 'y', 'yes', 'yeah')
########################################################################
if is_termux:
2024-12-18 09:48:02 +02:00
import sys
default_directory = '/sdcard/ub4tg'
os.system(f'mkdir -p {default_directory}')
CONFIG_PATH = f'{default_directory}/conf.json'
if (os.environ.get('TERMUX_APP__APK_RELEASE') or os.environ.get('TERMUX_APK_RELEASE')) not in ('F_DROID', 'GITHUB'):
print('You use not f-droid/github apk release, it may have problems...')
print('F-droid termux release here: https://f-droid.org/en/packages/com.termux/')
print('Github termux release here: https://github.com/termux/termux-app/releases')
if float(os.environ.get('TERMUX_VERSION')[:5]) < 0.118:
print('You use old version of termux, highly recommended that you update to v0.119.0 or higher ASAP for various bug fixes, including a critical world-readable vulnerability')
if os.access('/sdcard', os.W_OK):
print('permission to write on internal storage allowed')
sessdb = f'{default_directory}/{sessdb}' # ну і положим. Або закоментувать якщо ненада туда.
else:
print('permission denied to write on internal storage')
print('trying get permission...')
print('termux-setup-storage')
print('Restart termux [Press CTRL+D or command "exit"]')
sys.exit(0)
########################################################################
def get_config_key(key: str) -> typing.Union[str, bool]:
"""
Parse and return key from config
:param key: Key name in config
:return: Value of config key or `False`, if it doesn't exist
"""
try:
with open(CONFIG_PATH, "r", encoding="utf-8") as f:
config = json.load(f)
return config.get(key, False)
except FileNotFoundError:
return False
########################################################################
def save_config_key(key: str, value: str) -> bool:
"""
Save `key` with `value` to config
:param key: Key name in config
:param value: Desired value in config
:return: `True` on success, otherwise `False`
"""
try:
# Try to open our newly created json config
with open(CONFIG_PATH, "r", encoding="utf-8") as f:
config = json.load(f)
except FileNotFoundError:
# If it doesn't exist, just default config to none
# It won't cause problems, bc after new save
# we will create new one
config = {}
# Assign config value
config[key] = value
# And save config
with open(CONFIG_PATH, "w", encoding="utf-8") as f:
json.dump(config, f, indent=' ')
return True
########################################################################
if not os.path.exists(CONFIG_PATH):
api_id = int(input('enter api_id from https://my.telegram.org/ :'))
api_hash = input('enter api_hash from https://my.telegram.org/ :')
db_pymysql = False# тут не чіпать, лише в конфіґ записуйте, якщо нада.
db_sqlite3 = True # тут не чіпать, лише в конфіґ записуйте, якщо нада.
a_h = input('enable automatic use medkit? [y/n]: ').lower() in treat_as_true
a_404_p = input('''enable automatic bioeb if not found or expired?:''').lower() in treat_as_true
Майн = False# тут не чіпать, лише в конфіґ записуйте, якщо нада.
i2a = False # тут не чіпать, лише в конфіґ записуйте, якщо нада.
new_config = {
'api_id': api_id,
'api_hash': api_hash,
'timezone': timezone,
'db_pymysql': db_pymysql,
'db_sqlite3': db_sqlite3,
'a_404_p': a_404_p,
'a_h': a_h,
'i2a': i2a,
'Майн': Майн,
'ch_id': 0
}
with open(CONFIG_PATH, "w", encoding="utf-8") as configfile:
json.dump(new_config, configfile, indent=' ')
with open(CONFIG_PATH, "r", encoding="utf-8") as configfile:
from types import SimpleNamespace
cnf_dict = json.load(configfile)
config = SimpleNamespace(**cnf_dict)
print('config loaded')
api_id = config.api_id
api_hash = config.api_hash
db_pymysql = config.db_pymysql # set True or False
db_sqlite3 = config.db_sqlite3 # set True or False
a_h = config.a_h
a_404_p = config.a_404_p
i2a = config.i2a# set True or False # є сенс вмикать лише якщо a_404_p = True
ch_id = config.ch_id # id чата
#Майн = get_config_key("Майн")
########################################################################
try:
with open("noeb.json", "r") as read_file:
noeb = json.load(read_file)
except:
noeb =[707693258,5137994780,5226378684,5443619563,5434504334,6333102398]
with open("noeb.json", "w", encoding="utf-8") as write_file:
json.dump(noeb, write_file, indent=' ')
########################################################################
2024-12-08 15:03:27 +02:00
async def main():
2024-12-18 09:48:02 +02:00
async with TelegramClient(sessdb,api_id,api_hash,timeout=300) as client:
client.parse_mode="HTML"
print('User-Bot started')
me= await client.get_me()
my_id = int(me.id)
my_fn = me.first_name
print(my_id)
if os.name == 'nt':
win32api.SetConsoleTitle(f'{my_id}')
if db_pymysql:
con = pymysql.connect(host='localhost',
user='root',
password='V3rY$tR0NgPaS$Sw0Rd',
db='db',
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor)
d = con.cursor()
d.execute('''CREATE TABLE IF NOT EXISTS `tg_iris_zarazy` (
`when_int` int(11) unsigned NOT NULL DEFAULT '0',
`who_id` bigint(20) unsigned NOT NULL DEFAULT '0',
`user_id` bigint(20) unsigned NOT NULL DEFAULT '0',
`u_link` varchar(500) NOT NULL DEFAULT '',
`bio_str` varchar(11) NOT NULL DEFAULT '1',
`bio_int` int(11) unsigned NOT NULL DEFAULT '1',
`expr_int` int(11) unsigned NOT NULL DEFAULT '0',
`expr_str` varchar(11) NOT NULL DEFAULT '0',
UNIQUE KEY `UNIQUE` (`who_id`,`user_id`)
);''');
con.commit()
d.execute('''CREATE TABLE IF NOT EXISTS `tg_bio_attack` (
`from_infect` int(11) unsigned NOT NULL DEFAULT '0',
`who_id` bigint(20) unsigned NOT NULL DEFAULT '0',
`user_id` bigint(20) unsigned NOT NULL DEFAULT '0',
`profit` int(11) unsigned NOT NULL DEFAULT '1',
`until_infect` int(11) unsigned NOT NULL DEFAULT '0',
`until_str` varchar(11) NOT NULL DEFAULT '0',
UNIQUE KEY `UNIQUE` (`who_id`,`user_id`)
);''');
con.commit()
d.execute('''CREATE TABLE IF NOT EXISTS `tg_bio_users` (
`user_id` bigint(20) unsigned NOT NULL DEFAULT '0',
`when_int` int(11) unsigned NOT NULL DEFAULT '0',
`profit` int(11) unsigned NOT NULL DEFAULT '1',
UNIQUE KEY `user_id` (`user_id`)
);''');
con.commit()
d.execute('''CREATE TABLE IF NOT EXISTS `tg_users_url` (
`user_id` bigint(20) unsigned NOT NULL DEFAULT '0',
`when_int` int(11) unsigned NOT NULL DEFAULT '0',
`u_link` varchar(64) NOT NULL DEFAULT '',
`f_name` text NOT NULL,
PRIMARY KEY (`user_id`),
UNIQUE KEY (`u_link`)
);''');
con.commit()
if db_sqlite3:
conn = sqlite3.connect(f"{my_id}.sqlite")#покласти базу рядом?
#conn = sqlite3.connect(f"D:\\Misc\\projects\\Python\\ub4tg_db\\{my_id}.sqlite")# Або повністю
if is_termux:
conn = sqlite3.connect(f"{default_directory}/{my_id}.sqlite")
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS zarazy (
user_id INTEGER NOT NULL DEFAULT 0 UNIQUE,
when_int INTEGER NOT NULL DEFAULT 0,
bio_str VARCHAR NOT NULL DEFAULT 1,
bio_int INTEGER NOT NULL DEFAULT 1,
expr_int INTEGER NOT NULL DEFAULT 0,
expr_str VARCHAR NOT NULL DEFAULT 0
)''');
conn.commit()
c.execute('''CREATE TABLE IF NOT EXISTS avocado (
user_id INTEGER NOT NULL DEFAULT 0 UNIQUE,
when_int INTEGER NOT NULL DEFAULT 0,
bio_int INTEGER NOT NULL DEFAULT 1,
expr_int INTEGER NOT NULL DEFAULT 0,
expr_str VARCHAR NOT NULL DEFAULT 0
)''');
conn.commit()
####################################################################
async def get_id(url):
user_id = 0
if "tg://openmessage?user_id=" in url:
user_id = int(re.findall(r'user_id=([0-9]+)',url)[0])
#print(user_id)# А тут розкоментувать якщо нада бачить
return user_id
if "t.me/" in url:
if db_pymysql:
try:
d.execute("SELECT * FROM `tg_users_url` WHERE `u_link` = '%s' ORDER BY `when_int` DESC" % str(url));
user = d.fetchone();
if user is None:
pass
else:
user_id = int(user['user_id'])
print(f'{url} in db: @{user_id}')
except:
pass
if user_id==0:
try:
user_entity = await client.get_entity(url)
if user_entity.id:
user_id = int(user_entity.id)
user_fn = user_entity.first_name or ''
print(f'ok:{url}/@{user_id}')
if db_pymysql:
try:
d.execute("INSERT INTO `tg_users_url` (`when_int`,`user_id`,`u_link`,`f_name`) VALUES (%s,%s,%s,%s) ON DUPLICATE KEY UPDATE user_id = VALUES (user_id),u_link = VALUES (u_link),f_name = VALUES (f_name),when_int = VALUES (when_int);", (int(time.time()),int(user_id),str(url),str(user_fn))); con.commit()
except Exception as Err:
print(f'E:{Err}')
except Exception as Err:
print(f'E:{Err}')
#pass
return user_id
async def message_q( # спизжено
text: str,
user_id: int,
mark_read: bool = False,
delete: bool = False,
):
"""Отправляет сообщение и возращает ответ"""
async with client.conversation(user_id, exclusive=False) as conv:
msg = await conv.send_message(text)
response = await conv.get_response()
if mark_read:
await conv.mark_read()
return response
####################################################################
@client.on(events.NewMessage(outgoing=True,pattern=r'\.п'))
async def cmd_п(event):
mess = event.message
text = mess.raw_text
if text =='.п' or text=='.патоген':
#FIX! А то спрацьовувало на .п(ередать,овысить,огладить,,,,,,,%)
l_r = await message_q( # отправляет сообщение боту и возвращает
f"/лаб в лс",
5443619563,
mark_read=True,
delete=False,
)
h=utils.sanitize_parse_mode('html').unparse(l_r.message,l_r.entities)
lab_lines = h.splitlines() # текст с лабой, разбитый на строки
new = ""
if "🔬 Досье лаборатории" not in lab_lines[0]:
pass
else:
for i in lab_lines: # цикл for по всем строкам в тексте лабы
if "🧪 Готовых патогенов:" in i:
s = i.replace("🧪 Готовых патогенов:", "🧪 ")
s = s.replace("из", "із")
new+=f'{s}\n' # add \n
if "☣️ Био-опыт:" in i:
s = i.replace("☣️ Био-опыт:", "☣️ ")
new+=f'{s}\n' # add \n
if "🧬 Био-ресурс:" in i:
s = i.replace("🧬 Био-ресурс:", "🧬 ")
new+=f'{s}\n' # add \n
if "❗️ Руководитель в состоянии горячки ещё" in i:
s = i.replace("❗️ Руководитель в состоянии горячки ещё", "🤬 ")
new+=f'{s}\n' # add \n
if "вызванной болезнью" in i:
# ❗️ Руководитель в состоянии горячки, вызванной болезнью «%s», ещё
#s = i.replace("❗️ Руководитель в состоянии горячки, вызванной болезнью ", "🤬 ")
b = re.findall(r'вызванной болезнью «(.+)»',i)[0]#назва тої хєрні якою заразили
s = i.replace(f"❗️ Руководитель в состоянии горячки, болезнью «{b}», ещё ",
f"🤬 <code>{b}</code>\n")# копіпабельно для пошуку
if not 'горячки' in l_r.message:
new+='✅ ok\n'
await event.edit(new) # ред.
####################################################################
@client.on(events.NewMessage(pattern='.*йобнув.*|.*подверг(ла)?.*|.*infected.*|.*сикди.*|.*насрал.*|.*выебал.*|.*за допомогою довіреності.*|.*при помощи.*'))
async def infect(event):
# хто там кого того
m = event.message
t = m.raw_text
global irises
if m.sender_id !=6333102398 and m.sender_id not in irises:
# зараз підтримуються лише Авокадо & Іріс.
pass
elif len(m.entities) > 1:
h= utils.sanitize_parse_mode('html').unparse(t,m.entities)
r= re.findall(r'<a href="(tg://openmessage\?user_id=\d+|https://t\.me/\w+)">.*</a> (йобнув|подверг|infected|сикди|насрал|выебал|за допомогою|при помощи|by authorization).+<a href="(tg://openmessage\?user_id=\d+|https://t\.me/\w+)">',h)
if r:
#print(h)
exp_int=1
experience=1
u1url=r[0][0]
u2url=r[0][2]
u1id = await get_id(u1url)
u2id = await get_id(u2url)
when=int(datetime.timestamp(m.date))
days=int(re.sub(r' ','',re.findall(r' (на|for|ещё) ([0-9\ ]+) (д|d).*', t)[0][1]))
a=datetime.fromtimestamp(when)+timedelta(days=int(days), hours=3)
do_int=datetime.timestamp(a)
do_txt=str(a.strftime("%d.%m.%y"))
if m.sender_id in irises:
experience=re.findall(r"\+([0-9\.\,k]+) био-опыта", t)[0]
if m.sender_id==6333102398:
experience=re.findall(r"([☣️🧬🎄🥰]).+: ([0-9\.\,k]+).+ \|",t)[0][1]
if ',' in experience:
experience=re.sub(r',', r'.',experience)
if 'k' in experience:
exp_int=int(float(re.sub('k', '',experience)) * 1000)
else:
exp_int=int(experience)
if m.sender_id in irises:
if 'Объект ещё не подвергался заражению вашим патогеном' in event.raw_text:
exp_int=int(re.sub(r' ','',re.findall(r'по ([0-9\ ]+) ед.*',event.raw_text)[0]))
if u1id > 0 and u2id > 0 and u1id != u2id and db_pymysql:
try:
d.execute("INSERT INTO `tg_iris_zarazy` (`who_id`, `user_id`, `when_int`, `bio_str`, `bio_int`, `expr_int`, `expr_str`, `u_link`) VALUES (%s,%s,%s,%s,%s,%s,%s,%s) ON DUPLICATE KEY UPDATE when_int=VALUES (when_int),bio_str=VALUES (bio_str),bio_int=VALUES (bio_int),expr_int=VALUES (expr_int),expr_str=VALUES (expr_str),u_link = VALUES (u_link);", (int(u1id),int(u2id),int(when),str(experience), int(exp_int), int(datetime.timestamp(a)),str(do_txt),str(u2url))); con.commit()
#print(f"\nINSERT INTO .... ON DUPLICATE KEY UPDATE # [@{u1id}] => [@{u2id}]\n")
except Exception as Err:
print(f'err: {Err} /localhost')
# pass
print(f'''🦠 {u1url} [@{u1id}] подверг(ла) {u2url} [@{u2id}] +{experience}''')# показать
if m.sender_id==6333102398 and u1id > 0 and u2id > 0:
if u1id==my_id:
global ostalos_pt
ostalos_pt=int(re.sub(r' ','',re.findall(r'\| Осталось: ([0-9\ ]+) шт.',t)[0]))
if db_sqlite3 and u1id==my_id:
try:
c.execute("INSERT INTO avocado(user_id,when_int,bio_int,expr_int,expr_str) VALUES (?,?,?,?,?)",(int(u2id),int(when),int(exp_int),int(datetime.timestamp(a)),str(do_txt))); conn.commit()
except:
try:
c.execute("UPDATE avocado SET when_int = :wh, bio_int = :xpi, expr_int = :end, expr_str = :do WHERE user_id = :z AND when_int <= :wh;", {"wh":int(when),"xpi":int(exp_int),"end":int(datetime.timestamp(a)),"do":str(do_txt),"z":int(u2id)}); conn.commit()
except Exception as Err:
print(f'err: {Err} avocado')
elif db_sqlite3 and u2id!=my_id and u2id not in noeb:
try:
c.execute("INSERT INTO avocado(user_id,when_int,bio_int,expr_int) VALUES (?,?,?,?)", (int(u2id),int(when),int(exp_int),int(0))); conn.commit()# save not my pacients
except:
try:
c.execute("UPDATE avocado SET when_int = :wh, bio_int = :xpi WHERE user_id = :z AND when_int < :wh AND expr_int < :wh;", {"wh":int(when),"xpi":int(exp_int),"z":int(u2id)}); conn.commit()
except Exception as Err:
print(f'err: {Err} avocado upd not my')
# pass
if db_pymysql:
try:
# from_infect who_id user_id profit until_infect until_str
d.execute("INSERT INTO `tg_bio_attack` (`who_id`, `user_id`, `from_infect`, `profit`, `until_infect`, `until_str`) VALUES (%s,%s,%s,%s,%s,%s) ON DUPLICATE KEY UPDATE from_infect=VALUES (from_infect),profit=VALUES (profit),until_infect=VALUES (until_infect),until_str = VALUES (until_str);",(int(u1id),int(u2id),int(when),str(experience),int(datetime.timestamp(a)),str(do_txt))); con.commit()
#print(f"\nINSERT INTO .... ON DUPLICATE KEY UPDATE # [@{u1id}] => [@{u2id}]\n")
except Exception as Err:
print(f'err: {Err} (tg_bio_attack)')
# pass
try:
# user_id when profit
d.execute("INSERT INTO `tg_bio_users` (`user_id`, `when_int`, `profit`) VALUES (%s,%s,%s) ON DUPLICATE KEY UPDATE when_int=VALUES (when_int),profit=VALUES (profit);", (int(u2id),int(when),str(experience))); con.commit()
except Exception as Err:
print(f'err: {Err} (tg_bio_users)')
# pass
print(f'''🥑 @{u1id} подверг(ла) @{u2id} +{experience}''')# показать
####################################################################
@client.on(events.NewMessage(pattern='.+Резервная копия жертв'))
async def bio_backup(event):
m = event.message
if m.sender_id == 6333102398 and event.chat_id == 6333102398:
# відаправник Авокадо і це приват з Авокадо. перестрахувавсь?
file_path = await m.download_media(file=f"{default_directory}")
print(f'backup file saved to {file_path}')
added = 0
victims = None
raw_victims = None
file_format = None
with open(file_path, 'r') as stealed_backup:
if file_path.lower().endswith('.json'):
victims = json.load(stealed_backup)
file_format = 'json'
my_victims_ids = []
added = 0
for v in victims:
u_id = int(v['user_id'])
profit=int(v['profit'])
when = int(v['from_infect'])
expr = int(v['until_infect'])
a=datetime.fromtimestamp(expr)
do=str(a.strftime("%d.%m.%y"))
if db_sqlite3:
try:
c.execute("INSERT INTO avocado(user_id,when_int,bio_int,expr_int,expr_str) VALUES (?,?,?,?,?)",(int(u_id),int(when),int(profit),int(expr),str(do))); conn.commit()
print(f'''[@{u_id}] +{profit}''')# показать
added+=1
except:
try:
c.execute("UPDATE avocado SET when_int = :wh, bio_int = :xpi, expr_int = :expri, expr_str = :exprs WHERE user_id = :z AND when_int < :wh AND expr_int < :expr;", {"wh":int(when),"xpi":int(profit),"expri":int(expr),"exprs":str(do),"z":int(u_id)}); conn.commit()
except Exception as Err:
print(f'err: {Err} avocado backup')
# pass
del victims# free memory
print(f'added: {added}')
####################################################################
@client.on(events.NewMessage(outgoing=True, pattern=r'\.biobackup$'))
async def bio_steal_backup(event):
mtime = int(datetime.timestamp(event.message.date))
reply = await client.get_messages(event.peer_id, ids=event.reply_to.reply_to_msg_id)
await event.edit('Downloading file...')
file_path = await reply.download_media(file=f"{default_directory}")
print(f'backup file saved to {file_path}')
victims = None
raw_victims = None
file_format = None
with open(file_path, 'r') as stealed_backup:
if file_path.lower().endswith('.json'):
victims = json.load(stealed_backup)
file_format = 'json'
await event.edit('Processing json victims...')
else:
await event.edit('Format not supported.')
return
added = 0
if file_format == 'json':
for v in victims:
if v['user_id']:
#print(v)# захламляємо ?
u_id = int(v['user_id'])
profit=int(v['profit'] or 1)
when = int(v['from_infect'] or 0)
#expr = int(v['until_infect'])# А тут воно неважно, не свої ж.
if u_id!=my_id and u_id not in noeb:
try:
c.execute("INSERT INTO avocado(user_id,when_int,bio_int,expr_int) VALUES (?,?,?,?)", (int(u_id),int(when),int(profit),int(0))); conn.commit()# save not my pacients
added+= 1
except:
if profit > 1 and when > 0:
# якщо є сенс оновлювати?
try:
c.execute("UPDATE avocado SET when_int = :wh, bio_int = :xpi WHERE user_id = :z AND when_int < :wh AND expr_int < :mtime;", {"wh":int(when),"xpi":int(profit),"mtime":int(mtime),"z":int(u_id)}); conn.commit()
except Exception as Err:
print(f'err: {Err} avocado backup json')
ok=f'✅ Success added {added}'
await event.edit(ok)
print(ok)
del my_victims_ids
del victims # free memory
del raw_victims
####################################################################
@client.on(events.NewMessage(pattern='📝 .+'))
async def iris_404(event):
# iris off bio 31.12.24
m = event.message
t = m.raw_text
if m.sender_id not in irises:
pass
elif (t=='📝 Заражать можно только пользователей' or t == '📝 Объект отказался от участия в игре' or 'Объект ещё не создал свою лабораторию' in t) and event.reply_to:
reply = await client.get_messages(event.peer_id, ids=event.reply_to.reply_to_msg_id)
t = reply.raw_text
h= utils.sanitize_parse_mode('html').unparse(t,reply.entities)
r= re.findall(r'([0-9]{6,10})',h)
if r:
# є ід юзера якого невдалось заразить
uid=r[0] # ну власне ід
if db_pymysql:
try:
#DELETE FROM `tg_iris_zarazy` WHERE `tg_iris_zarazy`.`user_id` = 0;
con.query(f"DELETE FROM `tg_iris_zarazy` WHERE `user_id` = {uid};"); # нафіг.
except Exception as Err:
print(f'err: {Err} in DELETE FROM `tg_iris_zarazy` WHERE `user_id` = {uid}')
# pass
####################################################################
@client.on(events.NewMessage(outgoing=True, pattern=r'\.biofuck$'))
async def cmd_bf(event): # крч акуратно з цим,вдруг шо я нічо
global ch_id, bf_mode, bf_run, ostalos_pt
m = event.message
text = m.raw_text
when=int(datetime.timestamp(m.date))
msg='🤷' # якщо нема кого то жри рандом.
c.execute(f"SELECT * FROM `avocado` WHERE expr_int < {when}");
e_info=c.fetchall()
count = len(e_info)
if count < len(noeb)+2: # +2, так як, теоретично, там можуть всі вони + свій айді, тому жрать нема
nema=f'🤷 рандом хавай.'
await event.edit(nema) # ред.
print(nema)
elif bf_run:
pong='✅ вже працює...' # ok.
await event.edit(pong) # ред.
elif event.chat_id > 0:
pong='Алоу це не чат!' #wtf?!
await event.edit(pong) # ред.
else:
bf_run = True
pong='✅ погнали...'
ch_id = event.chat_id
await event.edit(pong) # ред.
print(f'є {count} потенційних пацієнтів. спробуєм їх сожрать')
for row in e_info:
if row[0]!=my_id: # ❌ Нельзя заразить самого себя.
if ostalos_pt < 7:
rs_min = 1000 # якщо осталось мало хай підзбираються.
rs_max = 3600 # if Влад забрал у тебя 49 патогенов...
bf_mode='Slow' # тепер це лише для заголовка консолі.
if ostalos_pt > 6:
rs_min = 11
rs_max = 99
bf_mode='Normal'
if ostalos_pt > 60:
bf_mode='Fast'
rs_max = 33
if ostalos_pt > 90:
rs_max = 22
bf_mode='Turbo'
if os.name == 'nt':
win32api.SetConsoleTitle(f'{my_id}#{bf_mode}')
rs = float(random.uniform(rs_min,rs_max))# random
eb = f'Биоеб {row[0]}' # повідомлення.
print(f'{eb} and wait {rs}')
m=await event.reply(eb)
await asyncio.sleep(random.uniform(1.0001, 3.3))
await client.delete_messages(event.chat_id,m.id)
await asyncio.sleep(rs)
bf_run = False # dnt edit this. # це якщо всьо уже.
if os.name == 'nt':
win32api.SetConsoleTitle(f'{my_id}') # заголовк: мій_ід.
####################################################################
@client.on(events.NewMessage(pattern='.+Служба безопасности лаборатории'))
# Организатор заражения: нада биоебнуть?
async def iris_sb(event):
# iris off bio 31.12.24
m = event.message
t = m.raw_text
if m.sender_id not in irises:
pass
elif a_404_p and i2a and len(m.entities) > 1:
h= utils.sanitize_parse_mode('html').unparse(t,m.entities)
r= re.findall(r'Организатор заражения: <a href="(tg://openmessage\?user_id=\d+|https://t\.me/\w+)">',h)
user_url=r[0]
user_id = await get_id(user_url)
if r and user_id!=my_id and user_id not in noeb:
ch=f'{user_url}'
await asyncio.sleep(random.uniform(1,2))
if ch_id == 0 or ch_id == event.chat_id:
m = await event.reply(ch)
kuda = event.chat_id
else:
kuda = ch_id
m=await client.send_message(kuda,ch)
await asyncio.sleep(random.uniform(1,5))
await client.delete_messages(kuda, m.id)
####################################################################
@client.on(events.NewMessage(pattern='⏱?🚫 Жертва'))
async def infection_not_found(event):
m = event.message
if m.sender_id != 6333102398:
pass
elif a_404_p and m.mentioned:
await asyncio.sleep(random.uniform(1.0001, 2.22394))
result = await client(functions.messages.GetBotCallbackAnswerRequest( # src https://tl.telethon.dev/methods/messages/get_bot_callback_answer.html
peer=m.peer_id,
msg_id=m.id,
game=False, # idk why it works only when it false... 0_o
data=m.reply_markup.rows[0].buttons[0].data
))
print('trying eat patient')
if result.message:
print(f'avocado says: {result.message}')
####################################################################
@client.on(events.NewMessage(pattern='🌡 У вас горячка вызванная'))
async def need_h(event):
m = event.message
if m.sender_id !=6333102398:
pass
elif a_h and m.mentioned:
# нада хил
ah = await message_q( # отправляет сообщение боту
f"Хил",
6333102398,
mark_read=True,
delete=False,
)
####################################################################
@client.on(events.NewMessage(pattern='👺 Чекай нових патогенів!'))
async def need_p(event):
m = event.message
if m.sender_id !=6333102398:
pass
elif m.mentioned:
global bf_mode,ostalos_pt
bf_mode = 'Slow'
ostalos_pt=0
####################################################################
@client.on(events.NewMessage(pattern='📉 Неудачная попытка майнинга!'))
async def Неудачнаяпопыткамайнинга(event):
c = event.chat_id
m = event.message
t = m.raw_text
if m.sender_id == 6333102398 and (c == 6333102398 or c == ch_id):
r=re.findall(r'⏱ Следующая попытка — через ([0-9]{1,3}) минут',t)
Майн=get_config_key("Майн")
if r and Майн:
m = (int(r[0]) +1)*60 # +1 м
await asyncio.sleep(m) # ждем
await client.send_message(c,'Майн')
####################################################################
@client.on(events.NewMessage(pattern='.+удалось намайнить'))
async def удачнаяпопыткамайнинга(event):
c = event.chat_id
m = event.message
Майн=get_config_key("Майн")
if m.sender_id == 6333102398 and (c == 6333102398 or (c == ch_id and m.mentioned)) and Майн:
rs=random.uniform(14404,14464) # random
await asyncio.sleep(rs) # ждем rs секунд
await client.send_message(c,'Майн')
####################################################################
@client.on(events.NewMessage(outgoing=True, pattern='.ping'))
async def cmd_ping(event):
# Say "pong!" whenever you send "!ping", then delete both messages
m = await event.reply('pong!')
await asyncio.sleep(5)
await client.delete_messages(event.chat_id, [event.id, m.id])
await client.run_until_disconnected()
2024-12-08 15:03:27 +02:00
asyncio.run(main())