diff --git a/dispatcher.py b/dispatcher.py new file mode 100644 index 0000000..2654a08 --- /dev/null +++ b/dispatcher.py @@ -0,0 +1,160 @@ +# -*- coding: utf-8 -*- +# from misc_beta_bot + +from datetime import datetime, timedelta + +from aiogram import Bot, types +from aiogram.dispatcher import Dispatcher +from aiogram.utils import executor + +from config import TOKEN + +import os +import re +import random +import time + +import pymysql +import pymysql.cursors + +import sqlite3 + +db_pymysql = True#set True or False +db_sqlite3 = False#set True or False + +if db_pymysql: + ldb=pymysql.connect( + host='localhost', + user='root', + password='V3rY$tR0NgPaS$Sw0Rd', + db='db', + charset='utf8mb4', + cursorclass=pymysql.cursors.DictCursor) + dbc = ldb.cursor() + dbc.execute('''CREATE TABLE IF NOT EXISTS `tg_bot_users` ( + `user_id` bigint(20) unsigned NOT NULL DEFAULT '0', + `reg_int` int(11) unsigned NOT NULL DEFAULT '0', + `f_name` text NOT NULL, + `mcoins` bigint(20) unsigned NOT NULL DEFAULT '1024', + `rnd_kd` int(11) unsigned NOT NULL DEFAULT '0', + `lng_code` varchar(8) NOT NULL DEFAULT '', + PRIMARY KEY (`user_id`) + );'''); + ldb.commit() + #bot users. + dbc.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`) + );'''); + #зберігалка: https://github.com/S1S13AF7/ub4tg + ldb.commit() + +bot = Bot(token=TOKEN, parse_mode=types.ParseMode.HTML) #see: https://mastergroosha.github.io/aiogram-2-guide/messages/ +dp = Dispatcher(bot) + +print('Bot started') + +@dp.message_handler(commands=['start']) +async def process_start_command(message: types.Message): + #print(message) + snd_msg = "🖖" + await message.answer(snd_msg) + + +@dp.message_handler(commands=['mz','мж','мз']) +async def cmd_myzh (message: types.Message): + msg="🤷" + user_id = int(message.from_user.id) + user_fn = message.from_user.first_name or '' + lng_code = message.from_user.language_code or '' + when_int = int(datetime.timestamp(message.date)) + if db_pymysql: + try: + #зберігалка: https://github.com/S1S13AF7/ub4tg (адреса може змінитись) + dbc.execute("SELECT user_id,bio_str,expr_str FROM `tg_iris_zarazy` WHERE who_id = %d ORDER BY when_int DESC LIMIT 10;" % int(user_id)); + bz_info = dbc.fetchmany(10)#получить + all_sicknes=[]#інфа + count=len(bz_info) + who=f"🦠 {user_fn}:" + for row in bz_info: + print(row) + id_user=row["user_id"] + bio_str=row["bio_str"] + u_link =f'tg://openmessage?user_id={id_user}' #fix для любителів мінять його + expr_str=re.sub(r'.20', r'.',row["expr_str"]) #.2024->.24 + a_href = f'@{id_user}' + all_sicknes.append(f"➕{bio_str} {a_href}#{expr_str}\n") + if len(all_sicknes)!=0: + all_sicknes=f'{who}\n{"".join(all_sicknes)}' + else: + all_sicknes='🤷 інфа нема.' + msg=all_sicknes + except Exception as Err: + msg = Err + print(f"localhost SELECT:{Err}") + await message.answer(msg, parse_mode=types.ParseMode.HTML) + +@dp.message_handler(commands=['ends']) +async def cmd_ends (message: types.Message): + msg="🤷" + user_id = int(message.from_user.id) + user_fn = message.from_user.first_name or '' + lng_code = message.from_user.language_code or '' + when_int = int(datetime.timestamp(message.date)) + if db_pymysql: + try: + #зберігалка: https://github.com/S1S13AF7/ub4tg (адреса може змінитись) + dbc.execute(f"SELECT user_id,bio_str,expr_str FROM `tg_iris_zarazy` WHERE who_id = {user_id} AND expr_int < {when_int} ORDER BY `bio_int` DESC, `when_int` DESC LIMIT 10;") + bz_info = dbc.fetchmany(10)#получить + all_sicknes=[]#інфа + count=len(bz_info) + who=f"🦠 {user_fn}:" + for row in bz_info: + print(row) + id_user=row["user_id"] + bio_str=row["bio_str"] + u_link =f'tg://openmessage?user_id={id_user}' #fix для любителів мінять його + expr_str=re.sub(r'.20', r'.',row["expr_str"]) #.2024->.24 + a_href = f'@{id_user}' + all_sicknes.append(f"➕{bio_str} {a_href}#{expr_str}\n") + if len(all_sicknes)!=0: + all_sicknes=f'{who}\n{"".join(all_sicknes)}' + else: + all_sicknes='🤷 інфа нема.' + msg=all_sicknes + except Exception as Err: + msg = Err + print(f"localhost SELECT:{Err}") + await message.answer(msg, parse_mode=types.ParseMode.HTML) + +@dp.message_handler(commands=['help']) +async def process_help_command(message: types.Message): + #await message.answer(emoji="🤷") + await message.answer(''' +• 🦠 /mz +''') + +@dp.message_handler(commands=['ping']) +async def process_ping_command(message: types.Message): + await message.reply("PONG!") + +@dp.message_handler(commands=['dice','кубик']) +async def cmd_dice(message: types.Message): + await message.answer_dice(emoji="🎲") + +@dp.message_handler(commands=['code','код']) +async def cmd_code(message: types.Message): + text=''' +https://github.com/S1S13AF7/ub4tg – юб. Зберігалка хто кого заразив + ''' + await message.answer(text,parse_mode=types.ParseMode.HTML) + +if __name__ == '__main__': + executor.start_polling(dp) diff --git a/misc_beta_bot.py b/misc_beta_bot.py deleted file mode 100644 index 99469d9..0000000 --- a/misc_beta_bot.py +++ /dev/null @@ -1,363 +0,0 @@ -# -*- coding: utf-8 -*- - -from datetime import datetime, timedelta - -from aiogram import Bot, types -from aiogram.dispatcher import Dispatcher -from aiogram.utils import executor - -from config import TOKEN - -from const import REG_OK - -import os -import re -import random -import time - -import pymysql -import pymysql.cursors - -import sqlite3 - -db_pymysql = True#set True or False -db_sqlite3 = True#set True or False - -if db_sqlite3: - con=sqlite3.connect("db4tg.sqlite") - cur=con.cursor() - cur.execute('''CREATE TABLE IF NOT EXISTS users ( - user_id INTEGER NOT NULL DEFAULT 0 UNIQUE, - reg_int INTEGER NOT NULL DEFAULT 0, - f_name VARCHAR NOT NULL DEFAULT 'хз', - mcoins INTEGER NOT NULL DEFAULT 1024, - rnd_kd INTEGER NOT NULL DEFAULT 0, - lng_code VARCHAR NOT NULL DEFAULT '' - )'''); - con.commit() - -if db_pymysql: - ldb=pymysql.connect( - host='localhost', - user='root', - password='V3rY$tR0NgPaS$Sw0Rd', - db='db', - charset='utf8mb4', - cursorclass=pymysql.cursors.DictCursor) - dbc = ldb.cursor() - dbc.execute('''CREATE TABLE IF NOT EXISTS `tg_bot_users` ( - `user_id` bigint(20) unsigned NOT NULL DEFAULT '0', - `reg_int` int(11) unsigned NOT NULL DEFAULT '0', - `f_name` text NOT NULL, - `mcoins` bigint(20) unsigned NOT NULL DEFAULT '1024', - `rnd_kd` int(11) unsigned NOT NULL DEFAULT '0', - `lng_code` varchar(8) NOT NULL DEFAULT '', - PRIMARY KEY (`user_id`) - );'''); - ldb.commit() - #bot users. - dbc.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`) - );'''); - #зберігалка: https://github.com/S1S13AF7/ub4tg - ldb.commit() - -async def reg_user(message: types.Message): - print(message) - user_id = int(message.from_user.id) - user_fn = message.from_user.first_name or '' - lng_code = message.from_user.language_code or '' - when_int = int(datetime.timestamp(message.date)) - reg_date = 0 - mcoins_c = 0 - if db_sqlite3: - try: - cur.execute("INSERT OR IGNORE INTO users(user_id,reg_int,f_name,lng_code) VALUES (?,?,?,?)", (int(user_id),int(when_int),str(user_fn),str(lng_code))); con.commit() - except Exception as Err: - print(f"sqlite INSERT:{Err}") - - sqlite_rd=when_int#for min (rd,rd) - sqlite_co=1024 - try: - cur.execute("SELECT reg_int,mcoins FROM users WHERE user_id = %d" % int(user_id)); - rd = cur.fetchone(); - if rd is None: - print('не знайшли юзера у базі sqlite') - else: - sqlite_rd=int(rd[0]) - sqlite_co=int(rd[1]) - if sqlite_rd > 0: - reg_date=sqlite_rd - else: - reg_date=when_int - if sqlite_co > 0: - mcoins_c=sqlite_co - except Exception as Err: - print(f"sqlite SELECT:{Err}") - - if db_pymysql: - try: - dbc.execute("INSERT INTO `tg_bot_users` (user_id,reg_int,f_name,lng_code) VALUES (%s,%s,%s,%s) ON DUPLICATE KEY UPDATE f_name=VALUES(f_name);",(int(user_id),int(when_int),str(user_fn),str(lng_code))); ldb.commit(); - except Exception as Err: - print(f"localhost INSERT:{Err}") - pymysql_rd=when_int#for min (rd,rd) - pymysql_co=1024 - try: - dbc.execute("SELECT reg_int,mcoins FROM `tg_bot_users` WHERE user_id = %d" % int(user_id)); - rd = dbc.fetchone(); - if rd is None: - print('не знайшли юзера у базі localhost') - else: - pymysql_rd=int(rd['reg_int']) - pymysql_co=int(rd['mcoins']) - if pymysql_rd > 0: - reg_date=pymysql_rd - else: - reg_date=when_int - if pymysql_co > 0: - mcoins_c=pymysql_co - except Exception as Err: - print(f"localhost SELECT:{Err}") - - if db_sqlite3 and db_pymysql: - #якщо юзаємо обидві бази,то - reg_date=int(min(sqlite_rd,pymysql_rd)) - mcoins_c=int(max(sqlite_co,pymysql_co)) - - if sqlite_rd < pymysql_rd or sqlite_co > pymysql_co: - #UPDATE `tg_bot_users` SET `reg_int`=?,`mcoins`=? WHERE `user_id`=?; - try: - dbc.execute(f"UPDATE `tg_bot_users` SET `reg_int` ='{reg_date}',`mcoins` ='{mcoins_c}' WHERE user_id = %d" % int(user_id)); ldb.commit()#як я хотів воно нехотіло, тому буде пока так. - except Exception as Err: - print(f"localhost UPDATE:{Err}") - - if sqlite_rd > pymysql_rd or sqlite_co < pymysql_co: - try: - cur.execute("UPDATE users SET reg_int =?,mcoins=? WHERE user_id=?", (int(reg_date),int(mcoins_c),int(user_id))); con.commit() - except Exception as Err: - print(f"sqlite UPDATE:{Err}") - - if reg_date==when_int: - print(REG_OK.get(lng_code, REG_OK['default']).format(user_fn=user_fn)) - - return reg_date - -bot = Bot(token=TOKEN, parse_mode=types.ParseMode.HTML) #see: https://mastergroosha.github.io/aiogram-2-guide/messages/ -dp = Dispatcher(bot) - -print('Bot started') - -@dp.message_handler(commands=['start']) -async def process_start_command(message: types.Message): - #print(message) - snd_msg = "🖖" - user_id = int(message.from_user.id) - user_fn = message.from_user.first_name or '' - lng_code = message.from_user.language_code or '' - when_int = int(datetime.timestamp(message.date)) - rd=int(await reg_user(message))#create or date - if rd == when_int: - snd_msg = REG_OK.get(lng_code, REG_OK['default']).format(user_fn=user_fn) - await message.answer(snd_msg) - -@dp.message_handler(commands=['reg']) -async def cmd_reg(message: types.Message): - #print(message) - snd_msg = "🤷" - user_id = int(message.from_user.id) - user_fn = message.from_user.first_name or '' - lng_code = message.from_user.language_code or '' - when_int = int(datetime.timestamp(message.date)) - rd=int(await reg_user(message))#create or date - if rd == when_int: - snd_msg = REG_OK.get(lng_code, REG_OK['default']).format(user_fn=user_fn) - elif rd > 0: - snd_msg = time.strftime('%d.%m.%Y', time.localtime(rd)) - await message.answer(snd_msg) - -@dp.message_handler(commands=['random','rand','rnd']) -async def cmd_rand (message: types.Message): - user_id = int(message.from_user.id) - when_int = int(datetime.timestamp(message.date)) - rd=await reg_user(message)#register_user#+sync - bal = int(42)#min bal - rkd = int(rd)#reg int - if db_sqlite3: - try: - cur.execute("SELECT mcoins,rnd_kd FROM users WHERE user_id = %d" % int(user_id)); - rd = cur.fetchone(); - if rd is None: - msg = "ERROR: user not registred in sqlite" - print(msg) - else: - bal = int(max(int(rd[0]),bal)) - rkd = int(max(int(rd[1]),rkd)) - except Exception as Err: - msg = Err - print(Err) - if db_pymysql: - try: - dbc.execute("SELECT mcoins,rnd_kd FROM `tg_bot_users` WHERE user_id = %d" % int(user_id)); - rd = dbc.fetchone(); - if rd is None: - print('не знайшли юзера у базі localhost') - print(msg) - else: - bal = int(max(int(rd['mcoins']),bal)) - rkd = int(max(int(rd['rnd_kd']),rkd)) - except Exception as Err: - msg = Err - print(Err) - - if db_sqlite3 or db_pymysql: - # якщо вобще юзаєм базу - if when_int > rkd: - rnd = random.randint(-32,64) - if rnd > 0: - msg = f"✅ ok! +{rnd}" - rkd = rnd * 60 - if rnd < 0: - msg = f"❎ ой! {rnd}" - rkd = (64-rnd) *32 - if rnd == 0: - rnd = 100 - rkd = rnd * 64 - msg = f"✅ оу! +{rnd}" - bal+=rnd - if bal<10: - bal =10 #я сьодня добрьій. - msg=f"{msg}\n🤑 бл: {bal} \n⏱ кд: {rkd} сек" - rkd+=when_int - if db_sqlite3: - try: - cur.execute("UPDATE users SET mcoins = :bal, rnd_kd = :rkd WHERE user_id = :uid;", - {"rkd":int(rkd),"bal":int(bal),"uid":int(user_id)}); con.commit() - except Exception as Err: - msg = Err - print(Err) - if db_pymysql: - try: - dbc.execute(f"UPDATE `tg_bot_users` SET `rnd_kd` ='{rkd}',`mcoins` ='{bal}' WHERE user_id = %d" % int(user_id)); ldb.commit()#як я хотів воно нехотіло, тому буде пока так. - except Exception as Err: - msg = Err - print(Err) - else: - rkd = rkd-when_int - msg=f"\n ⏱ кд: {rkd} сек.\n🤑 бл: {bal}" - else: - rnd = random.randint(-32,100) - msg = rnd - await message.answer(msg) - -@dp.message_handler(commands=['mz','мж','мз']) -async def cmd_myzh (message: types.Message): - msg="🤷" - user_id = int(message.from_user.id) - user_fn = message.from_user.first_name or '' - lng_code = message.from_user.language_code or '' - when_int = int(datetime.timestamp(message.date)) - rd=int(await reg_user(message))#create or date - if db_pymysql: - try: - #зберігалка: https://github.com/S1S13AF7/ub4tg (адреса може змінитись) - dbc.execute("SELECT user_id,bio_str,expr_str FROM `tg_iris_zarazy` WHERE who_id = %d ORDER BY when_int DESC LIMIT 10;" % int(user_id)); - bz_info = dbc.fetchmany(10)#получить - all_sicknes=[]#інфа - count=len(bz_info) - who=f"🦠 {user_fn}:" - for row in bz_info: - print(row) - id_user=row["user_id"] - bio_str=row["bio_str"] - u_link =f'tg://openmessage?user_id={id_user}' #fix для любителів мінять його - expr_str=re.sub(r'.20', r'.',row["expr_str"]) #.2024->.24 - a_href = f'@{id_user}' - all_sicknes.append(f"➕{bio_str} {a_href}#{expr_str}\n") - if len(all_sicknes)!=0: - all_sicknes=f'{who}\n{"".join(all_sicknes)}' - else: - all_sicknes='🤷 інфа нема.' - msg=all_sicknes - except Exception as Err: - msg = Err - print(f"localhost SELECT:{Err}") - await message.answer(msg, parse_mode=types.ParseMode.HTML) - -@dp.message_handler(commands=['ends']) -async def cmd_ends (message: types.Message): - msg="🤷" - user_id = int(message.from_user.id) - user_fn = message.from_user.first_name or '' - lng_code = message.from_user.language_code or '' - when_int = int(datetime.timestamp(message.date)) - rd=int(await reg_user(message))#create or date - if db_pymysql: - try: - #зберігалка: https://github.com/S1S13AF7/ub4tg (адреса може змінитись) - dbc.execute(f"SELECT user_id,bio_str,expr_str FROM `tg_iris_zarazy` WHERE who_id = {user_id} AND expr_int < {when_int} ORDER BY `bio_int` DESC, `when_int` DESC LIMIT 10;") - bz_info = dbc.fetchmany(10)#получить - all_sicknes=[]#інфа - count=len(bz_info) - who=f"🦠 {user_fn}:" - for row in bz_info: - print(row) - id_user=row["user_id"] - bio_str=row["bio_str"] - u_link =f'tg://openmessage?user_id={id_user}' #fix для любителів мінять його - expr_str=re.sub(r'.20', r'.',row["expr_str"]) #.2024->.24 - a_href = f'@{id_user}' - all_sicknes.append(f"➕{bio_str} {a_href}#{expr_str}\n") - if len(all_sicknes)!=0: - all_sicknes=f'{who}\n{"".join(all_sicknes)}' - else: - all_sicknes='🤷 інфа нема.' - msg=all_sicknes - except Exception as Err: - msg = Err - print(f"localhost SELECT:{Err}") - await message.answer(msg, parse_mode=types.ParseMode.HTML) - -@dp.message_handler(commands=['help']) -async def process_help_command(message: types.Message): - #await message.answer(emoji="🤷") - await message.answer(''' -• 💬 /chats -• 🎲 /dice -• 🤑 /rnd -• 🦠 /mz -''') - -@dp.message_handler(commands=['ping']) -async def process_ping_command(message: types.Message): - await message.reply("PONG!") - -@dp.message_handler(commands=['dice','кубик']) -async def cmd_dice(message: types.Message): - await message.answer_dice(emoji="🎲") - -@dp.message_handler(commands=['code','код']) -async def cmd_code(message: types.Message): - text=''' -https://github.com/S1S13AF7/misc_beta_bot – код бота @misc_beta_bot -https://github.com/S1S13AF7/ub4tg – юб. Зберігалка хто кого заразив - ''' - await message.answer(text,parse_mode=types.ParseMode.HTML) - -@dp.message_handler(commands=['chats','чати','чаты','чаті']) -async def cmd_chats(message: types.Message): - await message.answer(''' -• ☕ @misc_chat -• 🦠 @misc_games -• 🗃 @misc_files_v2 -''') - -if __name__ == '__main__': - executor.start_polling(dp)