@ -1,181 +1,204 @@
from aiogram import types , Dispatcher
from sqlalchemy . orm . session import close_all_sessions
#from sqlalchemy.orm.session import close_all_sessions
from create_bot import bot , dp
from sqdb import user , session
#from sqdb import user, session
import random
from random import randint
import datetime
from dicktxt import ForReadDict
from arango import ArangoClient
#from arangodb_base import dicks_collection
@dp.message_handler ( commands = [ " dick " ] )
async def up_dick ( message : types . Message ) :
#global size_change, dick_plus, dick_minus
arango_client = ArangoClient ( hosts = ' https://arango.vdk2ch.ru ' )
pipisa_db = arango_client . db ( ' pipisa ' , username = ' root ' , password = ' stolendick527 ' )
dicks_collection = pipisa_db . collection ( ' dicks ' )
# рандомайзер
numb = randint ( - 6 , 10 )
global size_change , dick_plus , dick_minus
dick_plus = ( ' <b>вырос</b> ' , ' <b>подрос</b> ' , ' <b>привстал</b> ' )
dick_minus = ( ' <b>уменьшился</b> ' , ' <b>откусила злая гадюка</b> ' , ' <b>продали евреи, он стал дешевле</b> ' )
numb = randint ( - 9 , 10 )
dick_plus = (
' <b>вырос</b> ' ,
' <b>подрос</b> ' ,
' <b>привстал</b> ' ,
' <b>увеличился</b> ' ,
' <b>преисполнился</b> '
)
dick_minus = (
' <b>неудачно потусил на сходке</b> ' ,
' <b>уменьшился</b> ' ,
' <b>откусила злая гадюка</b> ' ,
' <b>продали евреи, он стал дешевле</b> '
)
if numb > 0 :
size_change = random . choice ( dick_plus ) + ' 🚀 '
#if numb = 0 size_change = random.choice(const) TODO
else : size_change = random . choice ( dick_minus ) + ' ✂ '
# работа с таблицей
try :
b = session . query ( user ) . filter ( user . user_id == message . from_user . id ) . first ( )
if b :
last_time = b . datetimes
now_time = datetime . datetime . now ( )
diff = now_time . day - last_time . day
if abs ( diff ) < = 0 :
try :
current_dick = b . dick_size
await bot . send_message ( message . chat . id , f ' @ { message . from_user . username } ,🚫 вы уже крутили пипису, е е размер <b> { current_dick } </b> см! ' )
except :
print ( ' ошибка в if diff <=0 ' )
session . rollback ( )
finally :
session . close_all ( )
print ( ' пользователь уже крутил ' )
else :
size_change = random . choice ( dick_minus ) + ' ✂ '
try :
a = session . query ( user ) . filter ( user . user_id == message . from_user . id ) . first ( ) # запрос на поиск в таблице
updetedDick = a . dick_size = ( a . dick_size + numb )
a . datetimes = datetime . datetime . now ( )
session . flush ( )
session . commit ( ) #обновляет запись
#### Чекнуть есть ли юзер в базе
candidate_cursor = dicks_collection . find ( { ' user_id ' : message . from_user . id } , skip = 0 , limit = 1488 )
if candidate_cursor . count ( ) > 0 :
## Если есть то нарастить и отправить сообщение
print ( 11111 )
user = candidate_cursor . pop ( )
print ( user )
print ( user [ ' datetimes ' ] )
last_time = datetime . datetime . strptime ( user [ ' datetimes ' ] , ' % Y- % m- %d % H: % M: % S ' )
time_to_grow = datetime . datetime . now ( ) . replace ( hour = 14 , minute = 8 , second = 8 , microsecond = 0 )
if ( time_to_grow - last_time ) . days > 0 :
# прошло больше суток
updetedDick = user [ " dick_size " ] + numb
try :
# metadata = dicks_collection.update_match(
# {'user_id': message.from_user.id, 'chat_it': message.chat.id},
# {'dick_size': updetedDick, 'datetimes': datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")}
# )
metadata = dicks_collection . insert (
{
' _key ' : user [ ' _key ' ] ,
' _id ' : user [ ' _id ' ] ,
' _rev ' : user [ ' _rev ' ] ,
' user_id ' : message . from_user . id ,
' user_fullname ' : user [ ' user_fullname ' ] ,
' dick_size ' : updetedDick ,
' datetimes ' : datetime . datetime . now ( ) . strftime ( " % Y- % m- %d % H: % M: % S " ) ,
' chat_id ' : message . chat . id
} ,
overwrite_mode = ' update '
)
print ( f ' Успешно апдейтнули пипису @ { message . from_user . username } ' )
except Exception as e2 :
print ( f ' ошибка в обновлении пиписы @ { message . from_user . username } ' )
print ( e2 )
randomword = ForReadDict . RandomDick ( )
await bot . send_message ( message . chat . id , f ' @ { message . from_user . username } , ваш <em> { randomword } </em> { size_change } \
на < b > { abs ( numb ) } < / b > см ! \n \
Теперь он равен < b > { updetedDick } < / b > см ! ' )
except :
session . rollback ( )
print ( ' ошибка в обновлении пиписы ' )
finally :
session . close_all ( )
print ( ' пиписа обновлена ' )
# на <b>{abs(numb)}</b> см!\n\
# Теперь он равен <b>{updetedDick}</b> см! ')
else :
await bot . send_message ( message . chat . id , f ' @ { message . from_user . username } ,🚫 вы уже крутили пипису, е е размер <b> { user [ " dick_size " ] } </b> см! ' )
print ( f ' пользователь @ { message . from_user . username } уже крутил ' )
else :
session . close ( )
## если нету, то создать
try :
numb = randint ( 1 , 10 )
novenkiy = {
' user_id ' : message . from_user . id ,
' user_fullname ' : message . from_user . full_name ,
' dick_size ' : numb ,
' datetimes ' : datetime . datetime . now ( ) . strftime ( " % Y- % m- %d % H: % M: % S " ) ,
' chat_id ' : message . chat . id
}
int_table = user ( user_id = message . from_user . id , user_fullname = message . from_user . full_name , dick_size = numb , datetimes = datetime . datetime . now ( ) , \
chat_id = message . chat . id )
#### TODO проверить как-то по-умному что мы таки е г о добавили
metadata = dicks_collection . insert ( novenkiy )
session . add ( int_table )
session . flush ( )
session . commit ( )
session . close ( )
if numb > 0 :
await bot . send_message ( message . chat . id , f ' @ { message . from_user . username } , ваш писюн показал головку 🚀 \n \
на < b > { abs ( numb ) } < / b > см ! \n \
Теперь он равен < b > { numb } < / b > см ! ' )
except :
print ( ' ошибка в добавлении нового пользователя ' )
session . rollback ( )
finally :
session . close_all ( )
print ( ' Успешно добавлен пользователь ' )
else :
await bot . send_message ( message . chat . id , f ' @ { message . from_user . username } , добро пожаловать в игру!🚀 \n \
Ты стартуешь не с лучшей позиции , природа наградила тебя всего : < b > { abs ( numb ) } < / b > см 😬 ' )
print ( f ' Успешно добавлен пользователь @ { message . from_user . username } ' )
except Exception as e1 :
print ( ' ошибка в добавлении нового пользователя ' )
print ( e1 )
except Exception as e :
print ( ' ошибка DB в /dick ' )
print ( e )
except :
session . rollback ( )
print ( ' ошибка в основном коде ' )
finally :
session . close_all ( )
@dp.message_handler ( commands = [ " topdick " ] )
async def send_topchat ( message : types . Message ) :
arango_client = ArangoClient ( hosts = ' https://arango.vdk2ch.ru ' )
pipisa_db = arango_client . db ( ' pipisa ' , username = ' root ' , password = ' stolendick527 ' )
dicks_collection = pipisa_db . collection ( ' dicks ' )
try :
changechat_id = session . query ( user ) . filter ( user . user_id == message . from_user . id ) . first ( )
chats = message . chat . id
if changechat_id . chat_id != chats :
changechat_id . chat_id = chats
session . commit ( )
session . close ( )
dicks = dicks_collection . find ( { ' chat_id ' : message . chat . id } , skip = 0 , limit = 1100 )
dicks = [ d for d in dicks ]
except Exception as e :
print ( ' ошибка DB в /topdick ' )
print ( e )
top_dicks = sorted ( dicks , key = lambda dick : dick [ ' dick_size ' ] , reverse = True )
dick_limit = min ( len ( top_dicks ) , 10 )
top_dicks = top_dicks [ : dick_limit ]
dickos = ' '
emo = [ ' 🏆 ' , ' 🚀 ' , ' 🍆 ' , ' 🍌 ' , ' 🐍 ' , ' 🐎 ' , ' 🌭 ' , ' 🌶 ' , ' 👌 ' , ' 💩 ' ]
if len ( top_dicks ) == 0 :
await bot . send_message ( message . chat . id , ' 🍆 Никто ничего не нарастил! 🍌 ' )
else :
session . close ( )
top = session . query ( user . user_fullname , user . dick_size ) . order_by ( user . dick_size . desc ( ) ) . filter ( user . chat_id == chats ) . limit ( 10 ) . all ( )
delimiter = ' : '
for i in range ( len ( top_dicks ) ) :
dickos + = f ' { emo [ i ] } { i + 1 } . { top_dicks [ i ] [ " user_fullname " ] } : { top_dicks [ i ] [ " dick_size " ] } см \n '
i + = 1
# проверка на длину списка, если меньше limit, то:
await bot . send_message ( message . chat . id , ' 🏆Топ 10 бубылд чата🏆 \n \n ' + dickos )
sizelen = len ( top )
if sizelen < 10 :
lenminus = 10 - sizelen
top . extend ( ( ' - ' * lenminus ) )
await bot . send_message ( message . chat . id , f ' 🏆Топ 10 бубылд чата🏆 \n \n \
🚀 { delimiter . join ( map ( str , top [ 0 ] ) ) } \n \
💫 { delimiter . join ( map ( str , top [ 1 ] ) ) } \n \
🍆 { delimiter . join ( map ( str , top [ 2 ] ) ) } \n \
🍌 { delimiter . join ( map ( str , top [ 3 ] ) ) } \n \
🐍 { delimiter . join ( map ( str , top [ 4 ] ) ) } \n \
🐎 { delimiter . join ( map ( str , top [ 5 ] ) ) } \n \
🌭 { delimiter . join ( map ( str , top [ 6 ] ) ) } \n \
🌶 { delimiter . join ( map ( str , top [ 7 ] ) ) } \n \
👌 { delimiter . join ( map ( str , top [ 8 ] ) ) } \n \
💩 { delimiter . join ( map ( str , top [ 9 ] ) ) } \n ' )
session . close ( )
# если все нормально и участников минимум 10
else :
await bot . send_message ( message . chat . id , f ' 🏆Топ 10 бубылд чата🏆 \n \n \
🚀 { delimiter . join ( map ( str , top [ 0 ] ) ) } \n \
💫 { delimiter . join ( map ( str , top [ 1 ] ) ) } \n \
🍆 { delimiter . join ( map ( str , top [ 2 ] ) ) } \n \
🍌 { delimiter . join ( map ( str , top [ 3 ] ) ) } \n \
🐍 { delimiter . join ( map ( str , top [ 4 ] ) ) } \n \
🐎 { delimiter . join ( map ( str , top [ 5 ] ) ) } \n \
🌭 { delimiter . join ( map ( str , top [ 6 ] ) ) } \n \
🌶 { delimiter . join ( map ( str , top [ 7 ] ) ) } \n \
👌 { delimiter . join ( map ( str , top [ 8 ] ) ) } \n \
💩 { delimiter . join ( map ( str , top [ 9 ] ) ) } \n ' )
except :
session . rollback ( )
print ( ' ошибка в /topdick ' )
finally :
session . close_all ( )
@dp.message_handler ( commands = [ " globaldick " ] )
async def send_global_top ( message : types . Message ) :
arango_client = ArangoClient ( hosts = ' https://arango.vdk2ch.ru ' )
pipisa_db = arango_client . db ( ' pipisa ' , username = ' root ' , password = ' stolendick527 ' )
dicks_collection = pipisa_db . collection ( ' dicks ' )
try :
top_chat = session . query ( user . user_fullname , user . dick_size ) . order_by ( user . dick_size . desc ( ) ) . limit ( 10 ) . all ( )
dicks = dicks_collection . all ( )
dicks = [ d for d in dicks ]
except Exception as e :
print ( ' ошибка DB в /glovaldick ' )
print ( e )
delimiter = ' : '
top_dicks = sorted ( dicks , key = lambda dick : dick [ ' dick_size ' ] , reverse = True )
dick_limit = min ( len ( top_dicks ) , 10 )
top_dicks = top_dicks [ : dick_limit ]
await bot . send_message ( message . chat . id , f ' 🏆Топ 10 пипис в мире🏆 \n \n \
1. { delimiter . join ( map ( str , top_chat [ 0 ] ) ) } \n \
2. { delimiter . join ( map ( str , top_chat [ 1 ] ) ) } \n \
3. { delimiter . join ( map ( str , top_chat [ 2 ] ) ) } \n \
4. { delimiter . join ( map ( str , top_chat [ 3 ] ) ) } \n \
5. { delimiter . join ( map ( str , top_chat [ 4 ] ) ) } \n \
6. { delimiter . join ( map ( str , top_chat [ 5 ] ) ) } \n \
7. { delimiter . join ( map ( str , top_chat [ 6 ] ) ) } \n \
8. { delimiter . join ( map ( str , top_chat [ 7 ] ) ) } \n \
9. { delimiter . join ( map ( str , top_chat [ 8 ] ) ) } \n \
10. { delimiter . join ( map ( str , top_chat [ 9 ] ) ) } \n ' )
except :
session . rollback ( )
print ( ' ошибка в /glovaldick ' )
finally :
session . close_all ( )
dickos = ' '
emo = [ ' 🏆 ' , ' 🚀 ' , ' 💫 ' , ' 🍆 ' , ' 🍌 ' , ' 🐍 ' , ' 🐎 ' , ' 🌭 ' , ' 🌶 ' , ' 👌 ' ]
if len ( top_dicks ) == 0 :
await bot . send_message ( message . chat . id , ' 🍆 Никто ничего не нарастил! 🍌 ' )
else :
for i in range ( len ( top_dicks ) ) :
dickos + = f ' { emo [ i ] } { i + 1 } . { top_dicks [ i ] [ " user_fullname " ] } : { top_dicks [ i ] [ " dick_size " ] } см \n '
i + = 1
# def register_handlers_pipisa(dp: Dispatcher):
# dp.register_message_handler(up_dick)
# dp.register_message_handler(send_topchat)
# dp.register_message_handler(send_global_top)
await bot . send_message ( message . chat . id , ' 🏆Топ 10 пипис в мире🏆 \n \n ' + dickos )