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'], )
+