From ee27dbfd7b03f347c51ffc75237cbc740bce106b Mon Sep 17 00:00:00 2001 From: Simple_Not <44047940+moonbaseDelta@users.noreply.github.com> Date: Tue, 23 Jan 2024 15:12:59 +1000 Subject: [PATCH] =?UTF-8?q?#5=20=D1=83=D0=B4=D0=B0=D0=BB=D1=8F=D0=B5=D0=BC?= =?UTF-8?q?!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.yaml | 11 ++++--- db_logic/collections.py | 36 ++++++++++++++++----- db_logic/postcleaner.py | 71 +++++++++++++++++++++++++++++++++++++++++ db_logic/user_stuff.py | 2 -- handlers/pipisa.py | 36 ++++++++++++++++----- 5 files changed, 133 insertions(+), 23 deletions(-) create mode 100644 db_logic/postcleaner.py diff --git a/config.yaml b/config.yaml index d3c0ac4..6b0b92d 100644 --- a/config.yaml +++ b/config.yaml @@ -1,10 +1,11 @@ --- databaso: - host: 'https://arango.guaranteedstruggle.host' - user: root - pass: stolendick527 - base: pipisa - collection: dicks + host: 'https://arango.guaranteedstruggle.host' + user: root + pass: stolendick527 + base: pipisa + collection: dicks + posts_removal_collection: posts_removal telegram_token: 5724991559:AAEuLvpLsgP6LHRGMSyFtQLlR5qPQUO4b_w telegram_admins_ids: diff --git a/db_logic/collections.py b/db_logic/collections.py index 839a938..6b63220 100644 --- a/db_logic/collections.py +++ b/db_logic/collections.py @@ -7,12 +7,32 @@ from arango import ArangoClient def get_dicks_collection(): - arango_client = ArangoClient(hosts=CONFIG['databaso']['host'] ) - pipisa_db = arango_client.db( - CONFIG['databaso']['base'], - username=CONFIG['databaso']['user'], - password=CONFIG['databaso']['pass'] - ) - dicks_collection = pipisa_db.collection(CONFIG['databaso']['collection']) + try: + arango_client = ArangoClient(hosts=CONFIG['databaso']['host'] ) + pipisa_db = arango_client.db( + CONFIG['databaso']['base'], + username=CONFIG['databaso']['user'], + password=CONFIG['databaso']['pass'] + ) + dicks_collection = pipisa_db.collection(CONFIG['databaso']['collection']) - return dicks_collection \ No newline at end of file + return dicks_collection + except Exception as e: + print('ошибка DB при взятии коллекции пипис') + print(e) + + +def get_posts_removal_collection(): + try: + arango_client = ArangoClient(hosts=CONFIG['databaso']['host'] ) + pipisa_db = arango_client.db( + CONFIG['databaso']['base'], + username=CONFIG['databaso']['user'], + password=CONFIG['databaso']['pass'] + ) + posts_removal_collection = pipisa_db.collection(CONFIG['databaso']['posts_removal_collection']) + + return posts_removal_collection + except Exception as e: + print('ошибка DB при взятии коллекции постов-на-удаление') + print(e) diff --git a/db_logic/postcleaner.py b/db_logic/postcleaner.py new file mode 100644 index 0000000..c0d588d --- /dev/null +++ b/db_logic/postcleaner.py @@ -0,0 +1,71 @@ +from db_logic import collections +import datetime + + +def append_post_to_cleaning_sequence(message, type=None): + try: + novenkiy = { + 'msg_id': message.message_id, + 'chat_id': message.chat.id, + 'type': type, + 'datetimes': datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + } + metadata = collections.get_posts_removal_collection().insert(novenkiy, overwrite_mode='update') + + print(f'Успешно добавлен пост на удаление') + except Exception as e2: + print(f'ошибка DB :: добавление нового поста на удаление') + print(e2) + + +def get_posts_to_be_removed(chat_id, type=None): + # собираем + try: + #posts = [p for p in collections.get_posts_removal_collection().all( ) ] + + if type: + posts = [p for p in collections.get_posts_removal_collection().find({'chat_id': chat_id, 'type': type}, skip=0, limit=1100) ] + else: + posts = [p for p in collections.get_posts_removal_collection().find({'chat_id': chat_id}, skip=0, limit=1100) ] + + posts_ret = [] + for p in posts: + last_time = datetime.datetime.strptime(p['datetimes'], '%Y-%m-%d %H:%M:%S') + timediff = (datetime.datetime.now() - last_time).total_seconds() + + if timediff > 60: + posts_ret.append(p) + + print(posts_ret) + posts_ret = [ p for p in posts_ret if p['msg_id'] != max([pp['msg_id'] for pp in posts_ret])] + ### оставлять последний пост + + + return posts_ret + except Exception as e: + print('ошибка DB :: получение постов на удаление') + print(e) + + +def del_post(msg_id, chat_id): + # удаляем из базы + try: + + candidate_cursor = collections.get_posts_removal_collection().find( + { + 'msg_id': msg_id, + 'chat_id': chat_id, + }, + skip = 0, + limit = 1488 + ) + if candidate_cursor.count() > 0: + pp = candidate_cursor.pop() + else: + pp = None + + collections.get_posts_removal_collection().delete(pp) + + except Exception as e: + print('ошибка DB :: удаление поста на удаление') + print(e) \ No newline at end of file diff --git a/db_logic/user_stuff.py b/db_logic/user_stuff.py index ca35918..a651258 100644 --- a/db_logic/user_stuff.py +++ b/db_logic/user_stuff.py @@ -1,6 +1,4 @@ -from global_conf import CONFIG from db_logic import collections - import datetime diff --git a/handlers/pipisa.py b/handlers/pipisa.py index 2eaa18f..82d739a 100644 --- a/handlers/pipisa.py +++ b/handlers/pipisa.py @@ -8,7 +8,7 @@ from pipisa_functions import pipisa_time from global_conf import CONFIG -from db_logic import collections, tops, user_stuff +from db_logic import tops, user_stuff, postcleaner admins = CONFIG['telegram_admins_ids'] @@ -20,6 +20,10 @@ async def up_dick(message: types.Message): if message.from_user.id in admins or message.chat.type != 'private': + + postcleaner.append_post_to_cleaning_sequence(message=message, type=f'COMMAND_CALL__DICK') + await clean_posts(chat_id=message.chat.id, type='COMMAND_CALL__DICK') + #### TODO уплатить нолог с 100 см для самого нищего # рандомайзер @@ -44,10 +48,13 @@ async def up_dick(message: types.Message): f'@{message.from_user.username}, ваш {randomdickword} {change_phrase} на {abs(result)} см!\nТеперь он равен {updatedDick} см! ' ) else: - await bot.send_message( message.chat.id, + mmm = await bot.send_message( message.chat.id, f'@{message.from_user.username}, 🚫 вы уже крутили пипису, её размер {user["dick_size"]} см! ' ) user_stuff.update_attempts( message, user) + + postcleaner.append_post_to_cleaning_sequence(message=mmm, type='ALREADY_ROLLED') + await clean_posts(chat_id=mmm.chat.id, type='ALREADY_ROLLED') else: ## если нету, то создать user_stuff.store_new_user(message, result) @@ -60,11 +67,7 @@ async def up_dick(message: types.Message): await bot.send_message( message.chat.id, f'@{message.from_user.username}, добро пожаловать в игру!🚀\nТы стартуешь не с лучшей позиции, природа наградила тебя всего {result} см 😬' ) - - #### для всех отложенных сообщений - ## проверить если прошло ?пять минут? с публикации - ## попробовать удалить такой пост и затереть его с коллекции - ## оставлять последние в чате топ- и глобал-дик, сохранять последние сообщения о приросте, сохранять последний вызов /dick и иной команды + else: await message.reply('Растить елду можно только в общих чатах!') @@ -79,11 +82,16 @@ async def send_topchat(message: types.Message): if top_: dickos = tops.get_tops( top_ = True, chat_id=message.chat.id ) + postcleaner.append_post_to_cleaning_sequence(message=message, type=f'COMMAND_CALL__TOPDICK') + await clean_posts(chat_id=message.chat.id, type='COMMAND_CALL__TOPDICK') elif glob_: dickos = tops.get_tops( glob_ = True ) + postcleaner.append_post_to_cleaning_sequence(message=message, type=f'COMMAND_CALL__GLOBALDICK') + await clean_posts(chat_id=message.chat.id, type='COMMAND_CALL__GLOBALDICK') else: print('вызывают хз что!') + if not dickos: await bot.send_message(message.chat.id, '🍆 Никто ничего не нарастил! 🍌') else: @@ -93,4 +101,16 @@ async def send_topchat(message: types.Message): await bot.send_message(message.chat.id, '🏆Топ 10 пипис в мире🏆\n\n' + dickos) else: await message.reply('Работает только в общих чатах!\n'\ - 'Вы можете посмотреть топ по миру /globaldick') \ No newline at end of file + 'Вы можете посмотреть топ по миру /globaldick') + + +async def clean_posts(chat_id, type=None): + psts = postcleaner.get_posts_to_be_removed(chat_id, type) + print(psts) + + for p in psts: + postcleaner.del_post(chat_id=p['chat_id'], msg_id=p['msg_id']) + + #### TODO проверить админит ли бот + await bot.delete_message( chat_id=p['chat_id'], message_id=p['msg_id'], ) +