space genocide

This commit is contained in:
hogweed1 2025-05-12 21:52:47 +10:00
parent 7e52c86067
commit 2830335b12
13 changed files with 88 additions and 148 deletions

7
bot.py
View File

@ -7,7 +7,6 @@ from global_conf import CONFIG
from prometheus_client import start_http_server from prometheus_client import start_http_server
def remake_field_generator(d, field='text'): def remake_field_generator(d, field='text'):
if isinstance(d, list): if isinstance(d, list):
for k2 in d: for k2 in d:
@ -37,7 +36,6 @@ def filter_grammar_messages(record):
logging.basicConfig(level=logging.DEBUG) logging.basicConfig(level=logging.DEBUG)
logging.getLogger("aiogram").addFilter(filter_grammar_messages) logging.getLogger("aiogram").addFilter(filter_grammar_messages)
# pipisa.register_handlers_pipisa(dp) # pipisa.register_handlers_pipisa(dp)
# time_new_year.register_handlers_time(dp) # time_new_year.register_handlers_time(dp)
# sendalarm.register_handlers_test(dp) # sendalarm.register_handlers_test(dp)
@ -49,8 +47,3 @@ if __name__ == '__main__':
logging.info('Бот в строю.') logging.info('Бот в строю.')
executor.start_polling(dp, skip_updates=True) executor.start_polling(dp, skip_updates=True)
logging.info('Всем пока.') logging.info('Всем пока.')

View File

@ -1,9 +1,6 @@
from global_conf import CONFIG from global_conf import CONFIG
#### https://docs.python-arango.com/en/main/ #### https://docs.python-arango.com/en/main/
from arango import ArangoClient from arango import ArangoClient
import logging import logging
import os import os
@ -25,7 +22,6 @@ def get_dicks_collection():
logging.error('ошибка DB при взятии коллекции пипис') logging.error('ошибка DB при взятии коллекции пипис')
logging.error(e) logging.error(e)
def get_posts_removal_collection(): def get_posts_removal_collection():
try: try:
arango_client = ArangoClient(hosts=CONFIG['databaso']['host']) arango_client = ArangoClient(hosts=CONFIG['databaso']['host'])

View File

@ -2,7 +2,6 @@ from db_logic import collections
import datetime, logging import datetime, logging
def append_post_to_cleaning_sequence(message, type=None): def append_post_to_cleaning_sequence(message, type=None):
try: try:
novenkiy = { novenkiy = {
@ -18,7 +17,6 @@ def append_post_to_cleaning_sequence(message, type=None):
logging.error('ошибка DB :: добавление нового поста на удаление') logging.error('ошибка DB :: добавление нового поста на удаление')
logging.error(e2) logging.error(e2)
def get_posts_to_be_removed(chat_id, type=None, max_id=None): def get_posts_to_be_removed(chat_id, type=None, max_id=None):
# собираем # собираем
try: try:
@ -42,7 +40,6 @@ def get_posts_to_be_removed(chat_id, type=None, max_id=None):
else: else:
posts_ret = [ p for p in posts_ret if p['msg_id'] != max([pp['msg_id'] for pp in posts_ret])] posts_ret = [ p for p in posts_ret if p['msg_id'] != max([pp['msg_id'] for pp in posts_ret])]
#### TODO удалять все предыдущие без учёта времени #### TODO удалять все предыдущие без учёта времени
return posts_ret return posts_ret
@ -50,11 +47,9 @@ def get_posts_to_be_removed(chat_id, type=None, max_id=None):
logging.error('ошибка DB :: получение постов на удаление') logging.error('ошибка DB :: получение постов на удаление')
logging.error(e) logging.error(e)
def del_post(msg_id, chat_id): def del_post(msg_id, chat_id):
# удаляем из базы # удаляем из базы
try: try:
candidate_cursor = collections.get_posts_removal_collection().find( candidate_cursor = collections.get_posts_removal_collection().find(
{ {
'msg_id': msg_id, 'msg_id': msg_id,

View File

@ -4,7 +4,6 @@ import logging
def get_tops(top_ = False, glob_ = False, chat_id = None): def get_tops(top_ = False, glob_ = False, chat_id = None):
if top_: if top_:
try: try:
dicks = [d for d in collections.get_dicks_collection().find({'chat_id': chat_id}, skip=0, limit=1100)] dicks = [d for d in collections.get_dicks_collection().find({'chat_id': chat_id}, skip=0, limit=1100)]
@ -33,7 +32,6 @@ def get_tops(top_ = False, glob_ = False, chat_id = None):
return dickos return dickos
def get_antitops(top_ = False, glob_ = False, chat_id = None): def get_antitops(top_ = False, glob_ = False, chat_id = None):
dicks = [] dicks = []
if top_: if top_:

View File

@ -4,7 +4,6 @@ import datetime, logging
def store_new_user(message, result ): def store_new_user(message, result ):
try: try:
novenkiy = { novenkiy = {
'user_id': message.from_user.id, 'user_id': message.from_user.id,
@ -22,7 +21,6 @@ def store_new_user(message, result ):
logging.error(f'ошибка DB в /dick :: добавление нового пользователя @{message.from_user.username}') logging.error(f'ошибка DB в /dick :: добавление нового пользователя @{message.from_user.username}')
logging.error(e2) logging.error(e2)
def update_attempts(message, user ): def update_attempts(message, user ):
try: try:
metadata = collections.get_dicks_collection().insert( metadata = collections.get_dicks_collection().insert(
@ -44,9 +42,7 @@ def update_attempts(message, user ):
logging.error(f'ошибка DB в /dick :: обновление попытки крутить пипису @{message.from_user.username}') logging.error(f'ошибка DB в /dick :: обновление попытки крутить пипису @{message.from_user.username}')
logging.error(e2) logging.error(e2)
def update_dick_size(message, user, updatedDick ): def update_dick_size(message, user, updatedDick ):
try: try:
metadata = collections.get_dicks_collection().insert( metadata = collections.get_dicks_collection().insert(
{ {
@ -67,7 +63,6 @@ def update_dick_size(message, user, updatedDick ):
logging.error(f'ошибка DB в /dick :: обновление пиписы @{message.from_user.username}') logging.error(f'ошибка DB в /dick :: обновление пиписы @{message.from_user.username}')
logging.error(e2) logging.error(e2)
def get_user(message): def get_user(message):
try: try:
#### Чекнуть есть ли юзер в базе #### Чекнуть есть ли юзер в базе

View File

@ -1,6 +1,6 @@
import random import random
def RandomDick(): def RandomDick():
# Забирает рандомный синоним к слову хуй из dick_sinonims.txt # Забирает рандомный синоним к слову хуй из dick_sinonims.txt
# у линуха и винды не забывай про разные \/ # у линуха и винды не забывай про разные \/
@ -9,4 +9,3 @@ def RandomDick():
words = file.readlines() words = file.readlines()
return random.choice(words).strip() return random.choice(words).strip()

View File

@ -3,7 +3,6 @@ import random
def ChangeWord(result): #выбирает рандомное слово для изменения размера пиписы def ChangeWord(result): #выбирает рандомное слово для изменения размера пиписы
with open("dicktxt/dick_changes.yaml", 'r', encoding='utf-8') as f: with open("dicktxt/dick_changes.yaml", 'r', encoding='utf-8') as f:
words = yaml.load(f, Loader=yaml.Loader) words = yaml.load(f, Loader=yaml.Loader)

View File

@ -1 +1,2 @@
from . import ForReadDict from . import ForReadDict

View File

@ -1,6 +1,4 @@
from handlers import pipisa from handlers import pipisa
from handlers import start_help from handlers import start_help
from handlers import time_new_year from handlers import time_new_year

View File

@ -3,6 +3,7 @@ import time
from prometheus_client import Gauge, Info from prometheus_client import Gauge, Info
from global_conf import pipisa_length_metric, user_attempt_metric, user_last_attempt_metric from global_conf import pipisa_length_metric, user_attempt_metric, user_last_attempt_metric
class user_info_struct: class user_info_struct:
user_id: str user_id: str
user_fullname: str user_fullname: str
@ -11,8 +12,6 @@ class user_info_struct:
attemptsCount: int attemptsCount: int
chat_id: int chat_id: int
def metric_wrap(chatID:int, userName: str, length: int, attemptsCount: int): def metric_wrap(chatID:int, userName: str, length: int, attemptsCount: int):
"""Pass here chat ID, username, pipisa length and attempts count to wrap them into metric.""" """Pass here chat ID, username, pipisa length and attempts count to wrap them into metric."""

View File

@ -5,22 +5,16 @@ from random import randint
import datetime, logging import datetime, logging
from dicktxt import ForReadDict, WordsChange from dicktxt import ForReadDict, WordsChange
from pipisa_functions import pipisa_time from pipisa_functions import pipisa_time
from global_conf import CONFIG from global_conf import CONFIG
from db_logic import tops, user_stuff, postcleaner from db_logic import tops, user_stuff, postcleaner
admins = CONFIG['telegram_admins_ids'] admins = CONFIG['telegram_admins_ids']
@dp.message_handler(commands=["dick"]) @dp.message_handler(commands=["dick"])
async def up_dick(message: types.Message): async def up_dick(message: types.Message):
if message.from_user.id in admins or message.chat.type != 'private': 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') 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', max_id=message.message_id) await clean_posts(chat_id=message.chat.id, type='COMMAND_CALL__DICK', max_id=message.message_id)
@ -66,8 +60,6 @@ async def up_dick(message: types.Message):
else: else:
await message.reply('Растить елду можно только в общих чатах!') await message.reply('Растить елду можно только в общих чатах!')
@dp.message_handler(commands = ['topdick', 'globaldick']) @dp.message_handler(commands = ['topdick', 'globaldick'])
async def send_topchat(message: types.Message): async def send_topchat(message: types.Message):
if message.from_user.id in admins or message.chat.type != 'private': if message.from_user.id in admins or message.chat.type != 'private':
@ -86,7 +78,6 @@ async def send_topchat(message: types.Message):
else: else:
logging.error('вызывают хз что!') logging.error('вызывают хз что!')
if not dickos: if not dickos:
await bot.send_message(message.chat.id, '🍆 Никто ничего не нарастил! 🍌') await bot.send_message(message.chat.id, '🍆 Никто ничего не нарастил! 🍌')
else: else:
@ -98,7 +89,6 @@ async def send_topchat(message: types.Message):
await message.reply('Работает только в общих чатах!\n'\ await message.reply('Работает только в общих чатах!\n'\
'Вы можете посмотреть топ по миру /globaldick') 'Вы можете посмотреть топ по миру /globaldick')
@dp.message_handler(commands = ['antitopdick', 'antiglobaldick']) @dp.message_handler(commands = ['antitopdick', 'antiglobaldick'])
async def send_antitopchat(message: types.Message): async def send_antitopchat(message: types.Message):
if message.from_user.id in admins or message.chat.type != 'private': if message.from_user.id in admins or message.chat.type != 'private':
@ -127,8 +117,6 @@ async def send_antitopchat(message: types.Message):
await message.reply('Работает только в общих чатах!\n'\ await message.reply('Работает только в общих чатах!\n'\
'Вы можете посмотреть антитоп по миру /antiglobaldick') 'Вы можете посмотреть антитоп по миру /antiglobaldick')
async def clean_posts(chat_id, type=None, max_id=None): async def clean_posts(chat_id, type=None, max_id=None):
psts = postcleaner.get_posts_to_be_removed(chat_id, type, max_id) psts = postcleaner.get_posts_to_be_removed(chat_id, type, max_id)
@ -138,9 +126,7 @@ async def clean_posts(chat_id, type=None, max_id=None):
#### TODO проверить админит ли бот #### TODO проверить админит ли бот
try: try:
await bot.delete_message( chat_id=p['chat_id'], message_id=p['msg_id'], ) await bot.delete_message(chat_id=p['chat_id'], message_id=p['msg_id'])
except Exception as e: except Exception as e:
logging.error('ошибка удаления поста-на-удаление') logging.error('ошибка удаления поста-на-удаление')
logging.error(e) logging.error(e)

View File

@ -5,23 +5,14 @@ from create_bot import dp, bot
@dp.message_handler(commands=['start']) @dp.message_handler(commands=['start'])
async def start_func(message: types.Message): async def start_func(message: types.Message):
if message.chat.type == 'private': if message.chat.type == 'private':
lkb = InlineKeyboardMarkup(row_width=1).add(InlineKeyboardButton(text = 'Добавить в группу', callback_data='add_2_group')) lkb = InlineKeyboardMarkup(row_width=1).add(InlineKeyboardButton(text = 'Добавить в группу', callback_data='add_2_group'))
await message.answer(f'<b>Добро пожаловать, {message.from_user.full_name}!</b>\n' await message.answer(f'<b>Добро пожаловать, {message.from_user.full_name}!</b>\n'
'Это бот, который растит члены. Чтобы начать, добавь бота в чат'\ 'Это бот, который растит члены. Чтобы начать, добавь бота в чат'\
, reply_markup=lkb , reply_markup=lkb
) )
# TODO добавить кнопку, по которой смогут добавлять юзера в чат # TODO добавить кнопку, по которой смогут добавлять юзера в чат
@dp.callback_query_handler(text = 'add_2_group') @dp.callback_query_handler(text = 'add_2_group')
async def addgroup(callback: types.CallbackQuery): async def addgroup(callback: types.CallbackQuery):
await callback.answer('жмав') await callback.answer('жмав')

View File

@ -2,9 +2,7 @@ import unittest
import datetime import datetime
def rolltime(check_datetime , curr_time=datetime.datetime.now()): def rolltime(check_datetime , curr_time=datetime.datetime.now()):
last_time = datetime.datetime.strptime(check_datetime, '%Y-%m-%d %H:%M:%S') last_time = datetime.datetime.strptime(check_datetime, '%Y-%m-%d %H:%M:%S')
time_to_grow = curr_time.replace(hour=10, minute=0, second=0, microsecond=0) #+ datetime.timedelta(days=0) time_to_grow = curr_time.replace(hour=10, minute=0, second=0, microsecond=0) #+ datetime.timedelta(days=0)
@ -16,14 +14,11 @@ def rolltime(check_datetime , curr_time=datetime.datetime.now()):
# print(f'\tcurr_time : {curr_time.strftime("%Y-%m-%d %H:%M:%S")}') # print(f'\tcurr_time : {curr_time.strftime("%Y-%m-%d %H:%M:%S")}')
# print(f'\t\tsecs diff : {timediff}') # print(f'\t\tsecs diff : {timediff}')
if timediff > 86400 or (curr_time > time_to_grow and last_time < time_to_grow): if timediff > 86400 or (curr_time > time_to_grow and last_time < time_to_grow):
return True return True
else: else:
return False return False
class TestPipisa(unittest.TestCase): class TestPipisa(unittest.TestCase):
def test_very_long_ago(self): def test_very_long_ago(self):
self.assertEqual(rolltime('2021-10-11 23:44:00'), True, "Пиписа прокручена очень давно. Очевидный прокрут") self.assertEqual(rolltime('2021-10-11 23:44:00'), True, "Пиписа прокручена очень давно. Очевидный прокрут")
@ -42,7 +37,6 @@ class TestPipisa(unittest.TestCase):
datetime.datetime.now().replace(hour=10, minute=1, second=0, microsecond=0) datetime.datetime.now().replace(hour=10, minute=1, second=0, microsecond=0)
), True, "Крутилась вчера через минуту после обновления роллов. Должно пропускать ") ), True, "Крутилась вчера через минуту после обновления роллов. Должно пропускать ")
def test_hour_before_roll(self): def test_hour_before_roll(self):
self.assertEqual( self.assertEqual(
rolltime( rolltime(
@ -79,9 +73,5 @@ class TestPipisa(unittest.TestCase):
datetime.datetime.now().replace(hour=10, minute=19, second=0, microsecond=0) datetime.datetime.now().replace(hour=10, minute=19, second=0, microsecond=0)
), False, "Сегодня уже открутили а хотят ещё. Фейл.") ), False, "Сегодня уже открутили а хотят ещё. Фейл.")
if __name__ == "__main__": if __name__ == "__main__":
unittest.main(verbosity=2) unittest.main(verbosity=2)