mirror of
https://github.com/EDeev/chatping_abobot.git
synced 2026-06-18 22:20:58 +03:00
v. 2.1
This commit is contained in:
parent
f132905659
commit
a425d3ba0e
8 changed files with 1009 additions and 0 deletions
26
code/base.py
Normal file
26
code/base.py
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
# ДАННЫЕ БОТА
|
||||||
|
TOKEN = "" # @chat_abobot
|
||||||
|
DEBAG = "-*********" # Технический чат
|
||||||
|
|
||||||
|
TEX_GROUP = "-*********"
|
||||||
|
|
||||||
|
# ОБРАЩЕНИЯ К ПОЛЬЗОВАТЕЛЯМ
|
||||||
|
KILL_LIST = ["побить", "отмудохать", "избить", "уебать", "отметелить"]
|
||||||
|
TMOK_LIST = ["поцеловать", "чмокнуть", "соснуть", "лайкнуть"]
|
||||||
|
QUAT_LIST = [['дай', 'дайте'], ['ахуенный', 'ахуеный', 'охуеный', 'охуенный', 'блять', 'сука'], ['совет', 'совета']]
|
||||||
|
|
||||||
|
# ФРАЗЫ ИВЕНТ ДРАКИ
|
||||||
|
VAR_WIN = ["опустив его ниже плинтуса!", "поставив его на место!"]
|
||||||
|
VAR_LOSE = ["Кунг - Фу!", "магии!", "резинового члена!", "банды цапель!"]
|
||||||
|
|
||||||
|
# ПЕРЕВОДЧИК СЛОВ
|
||||||
|
ERR = ['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';',
|
||||||
|
"'", 'z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '/', '`']
|
||||||
|
ERR_ = ['Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '{', '}', 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', ':',
|
||||||
|
'"', 'Z', 'X', 'C', 'V', 'B', 'N', 'M', '<', '>', '?', '~']
|
||||||
|
TRU = ['й', 'ц', 'у', 'к', 'е', 'н', 'г', 'ш', 'щ', 'з', 'х', 'ъ', 'ф', 'ы', 'в', 'а', 'п', 'р', 'о', 'л', 'д', 'ж',
|
||||||
|
'э', 'я', 'ч', 'с', 'м', 'и', 'т', 'ь', 'б', 'ю', '.']
|
||||||
|
TRU_ = ['Й', 'Ц', 'У', 'К', 'Е', 'Н', 'Г', 'Ш', 'Щ', 'З', 'Х', 'Ъ', 'Ф', 'Ы', 'В', 'А', 'П', 'Р', 'О', 'Л', 'Д', 'Ж',
|
||||||
|
'Э', 'Я', 'Ч', 'С', 'М', 'И', 'Т', 'Ь', 'Б', 'Ю', ',']
|
||||||
|
|
||||||
|
ALB = ['а', 'у', 'о', 'ы', 'и', 'э', 'я', 'ю', 'ё', 'е', 'А', 'У', 'О', 'Ы', 'И', 'Э', 'Я', 'Ю', 'Ё', 'Е']
|
||||||
422
code/bot.py
Normal file
422
code/bot.py
Normal file
|
|
@ -0,0 +1,422 @@
|
||||||
|
import logging, random, pymorphy2, requests
|
||||||
|
import asyncio, base, re, os, enchant, sql
|
||||||
|
|
||||||
|
from gtts import gTTS
|
||||||
|
from script import checker, translator, notice, lang_form, revers, upd_stat
|
||||||
|
from aiogram import Bot, Dispatcher, executor, types
|
||||||
|
from datetime import datetime as dt
|
||||||
|
# from filters import Admin
|
||||||
|
|
||||||
|
# log level
|
||||||
|
logging.basicConfig(level=logging.INFO)
|
||||||
|
|
||||||
|
# bot init
|
||||||
|
bot = Bot(token=base.TOKEN)
|
||||||
|
dp = Dispatcher(bot)
|
||||||
|
morph = pymorphy2.MorphAnalyzer()
|
||||||
|
engl_dict = enchant.Dict("en_US")
|
||||||
|
|
||||||
|
# инициализируем соединение с БД
|
||||||
|
db = sql.Base('../db/base.db')
|
||||||
|
du = sql.User('../db/users.db')
|
||||||
|
dg = sql.Group('../db/groups.db')
|
||||||
|
dm = sql.Month('../db/month.db')
|
||||||
|
|
||||||
|
# инициализируем фильтры
|
||||||
|
# dp.filters_factory.bind(Admin)
|
||||||
|
|
||||||
|
|
||||||
|
@dp.message_handler(content_types=["new_chat_members"])
|
||||||
|
async def notification(message: types.Message):
|
||||||
|
if not du.group_exists(message.chat.id):
|
||||||
|
du.add_group(message.chat.id)
|
||||||
|
|
||||||
|
group_id = du.get_group_id(message.chat.id)
|
||||||
|
db.add_group(group_id)
|
||||||
|
dg.created_group(group_id)
|
||||||
|
|
||||||
|
await bot.send_message(message.chat.id, f'<b>Привет группа {message.chat.title}!</b>\n\nВсе функции вы можете '
|
||||||
|
f'узнать по команде /help! Для того, чтобы '
|
||||||
|
f'уведомления по имени и команда /all нормально функционировали, '
|
||||||
|
f'необходимо чтобы каждый участник группы написал хотя бы одно '
|
||||||
|
f'сообщение в чат! Также для того, чтобы системные сообщения удалялись '
|
||||||
|
f'автоматически, необходимо боту выдать права администратора!',
|
||||||
|
types.ParseMode.HTML)
|
||||||
|
else:
|
||||||
|
try:
|
||||||
|
await message.delete()
|
||||||
|
except Exception:
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
# ОБНОВЛЕНИЕ АЙДИ ГРУППЫ
|
||||||
|
@dp.message_handler(content_types=['migrate_to_chat_id', 'migrate_from_chat_id'])
|
||||||
|
async def chat_reload(message: types.Message):
|
||||||
|
if du.group_exists(message.migrate_from_chat_id):
|
||||||
|
du.update_group_id(du.get_group_id(message.migrate_from_chat_id), message.migrate_to_chat_id)
|
||||||
|
|
||||||
|
|
||||||
|
# КОМАНДЫ
|
||||||
|
@dp.message_handler(commands=['start', 'help'])
|
||||||
|
async def helps(message: types.Message):
|
||||||
|
if message.chat.id > 0:
|
||||||
|
user_id = message.from_user.id
|
||||||
|
if not du.user_exists(user_id):
|
||||||
|
du.add_user(user_id)
|
||||||
|
else:
|
||||||
|
group_id, user_id = message.chat.id, message.from_user.id
|
||||||
|
if not du.user_exists(user_id):
|
||||||
|
du.add_user(user_id)
|
||||||
|
if not du.group_exists(group_id):
|
||||||
|
du.add_group(group_id)
|
||||||
|
upd_stat(user_id, group_id, 3, message.from_user.first_name, True)
|
||||||
|
|
||||||
|
buttons = [types.InlineKeyboardButton(text="КОМАНДЫ", callback_data="com"),
|
||||||
|
types.InlineKeyboardButton(text="ИВЕНТЫ", callback_data="even"),
|
||||||
|
types.InlineKeyboardButton(text="АВТОР", callback_data="auth"),
|
||||||
|
types.InlineKeyboardButton(text="ФУНКЦИИ", callback_data="fun")]
|
||||||
|
|
||||||
|
keyboard = types.InlineKeyboardMarkup(row_width=2)
|
||||||
|
keyboard.add(*buttons)
|
||||||
|
|
||||||
|
try:
|
||||||
|
await bot.send_voice(chat_id=message.chat.id, voice=open('../data/tts.ogg', 'rb'),
|
||||||
|
caption='*-* Этот АБОБОТ поможет вам приятно провести время в чате с различными командами, '
|
||||||
|
'ивентами и удобными функциями, которые облегчают использование чата)\n\n'
|
||||||
|
'*-* Также прошу если вам понравился бот, оставить отзыв о его использовании на '
|
||||||
|
'команду /report)', parse_mode=types.ParseMode.MARKDOWN, reply_markup=keyboard)
|
||||||
|
except Exception:
|
||||||
|
await bot.send_message(chat_id=message.chat.id,
|
||||||
|
text='*-* Этот АБОБОТ поможет вам приятно провести время в чате с различными командами, '
|
||||||
|
'ивентами и удобными функциями, которые облегчают использование чата)\n\n'
|
||||||
|
'*-* Также прошу если вам понравился бот, оставить отзыв о его использовании на '
|
||||||
|
'команду /report)', parse_mode=types.ParseMode.MARKDOWN, reply_markup=keyboard)
|
||||||
|
|
||||||
|
|
||||||
|
# ИЛАЙН КЛАВИАТУРА HELP
|
||||||
|
@dp.callback_query_handler(text="auth")
|
||||||
|
async def author(call: types.CallbackQuery):
|
||||||
|
await call.message.answer(text='*| АВТОР |*\n\n*>>* Этот бот, как бы это не печально звучало, но одна из лучших'
|
||||||
|
' моих работ и если кого-нибудь у меня получится действительно достойный продукт,'
|
||||||
|
' вы сможете о нём узнать в моём телеграм канале *@itsproger*', parse_mode=types.ParseMode.MARKDOWN)
|
||||||
|
|
||||||
|
|
||||||
|
@dp.callback_query_handler(text="fun")
|
||||||
|
async def function(call: types.CallbackQuery):
|
||||||
|
await call.message.answer(text='*| ФУНКЦИИ |*\n\n*1.* Возможность перевода случайно написанного текста на '
|
||||||
|
'транслите\n*2.* Ведение обширной статистики сообщений\n*3.* Упоминание участника '
|
||||||
|
'при написании его имени в чате\n*4.* Автоматическое удаление системных сообщений',
|
||||||
|
parse_mode=types.ParseMode.MARKDOWN)
|
||||||
|
|
||||||
|
|
||||||
|
@dp.callback_query_handler(text="com")
|
||||||
|
async def commands(call: types.CallbackQuery):
|
||||||
|
await call.message.answer(text='<b>| КОМАНДЫ |</b>\n\n/all - упомянуть всех в чате\n/help - полный список функций\n'
|
||||||
|
'/stat_group - полная статистика группы\n/stat_user - полная статистика '
|
||||||
|
'отправителя\n/edit и /back_edit - первая команда даёт возможность '
|
||||||
|
'сменить имя для упоминаний на любое слово, а вторая для возврата динамического '
|
||||||
|
'имени\n/start_bot и /stop_bot - возможность отключения текстовых ивентов',
|
||||||
|
parse_mode=types.ParseMode.HTML)
|
||||||
|
|
||||||
|
|
||||||
|
@dp.callback_query_handler(text="even")
|
||||||
|
async def events(call: types.CallbackQuery):
|
||||||
|
await call.message.answer(text='*| ИВЕНТЫ |*\n\n*"Чмокнуть"* - сделать кому-нибудь приятно\n*"Отмудохать"* - '
|
||||||
|
'выместить злость на кого-нибудь\n*"Число от ... до ..."* - случайное значение из '
|
||||||
|
'диапозона\n*"Подраться с ..."* - повод кого-нибудь побить\n*"Переведи (..) - ..."* '
|
||||||
|
'- перевод слова на керпичный язык\n*"Дай блять совет!"* - даёт рандомный охуенный '
|
||||||
|
'совет\n*"Переверни - ..."* - переворачивает слова в предложении\n*"Озвучь - ..."* '
|
||||||
|
'- озвучивает написанный текст',
|
||||||
|
parse_mode=types.ParseMode.MARKDOWN)
|
||||||
|
|
||||||
|
|
||||||
|
# ОСТАЛЬНЫЕ КОМАНДЫ
|
||||||
|
@dp.message_handler(commands=['all'], commands_prefix='@/')
|
||||||
|
async def every(message: types.Message):
|
||||||
|
if message.chat.id < 0:
|
||||||
|
upd_stat(message.from_user.id, message.chat.id, 3, message.from_user.first_name, True)
|
||||||
|
try:
|
||||||
|
await message.reply(notice(du.get_user_id(message.from_user.id), True, du.get_group_id(message.chat.id), message.from_user.id),
|
||||||
|
types.ParseMode.HTML)
|
||||||
|
except Exception as e:
|
||||||
|
# print(repr(e))
|
||||||
|
await message.reply('В группе состоит менее 3х человек, из-за чего команда не работает!')
|
||||||
|
else:
|
||||||
|
await message.reply('Эта команда предназначена для вызова в чате!')
|
||||||
|
|
||||||
|
|
||||||
|
@dp.message_handler(commands=['stat_group'])
|
||||||
|
async def stat_group(message: types.Message):
|
||||||
|
if message.chat.id < 0:
|
||||||
|
upd_stat(message.from_user.id, message.chat.id, 3, message.from_user.first_name, True)
|
||||||
|
group_id = du.get_group_id(message.chat.id)
|
||||||
|
|
||||||
|
group = db.stat_group(group_id)
|
||||||
|
month = db.month_stat_group(group_id)
|
||||||
|
|
||||||
|
await message.answer(text=f'*| СТАТИСТИКА ГРУППЫ |*\n\n'
|
||||||
|
f'*>>* В целом сообщений *[ {message.message_id} ]*\n\n'
|
||||||
|
f'*- За всё время* / *За месяц -*\n'
|
||||||
|
f'*>>* Сообщений в базе *[ {group[0]} / {month[0]} ]*\n\n'
|
||||||
|
f'*>* Ответов *- [ {group[1]} / {month[1]} ]*\n'
|
||||||
|
f'*>* Команд *- [ {group[2]} / {month[2]} ]*\n'
|
||||||
|
f'*>* Ссылок *- [ {group[3]} / {month[3]} ]*\n'
|
||||||
|
f'*>* Стикеров *- [ {group[5]} / {month[5]} ]*\n'
|
||||||
|
f'*>* Медиа файлов *- [ {group[4]} / {month[4] } ]*\n'
|
||||||
|
f'*>* Голос/Кружочки *- [ {group[6]} / {month[6]} ]*',
|
||||||
|
parse_mode=types.ParseMode.MARKDOWN)
|
||||||
|
|
||||||
|
|
||||||
|
@dp.message_handler(commands=['stat_user'])
|
||||||
|
async def stat_user(message: types.Message):
|
||||||
|
if message.chat.id < 0:
|
||||||
|
upd_stat(message.from_user.id, message.chat.id, 3, message.from_user.first_name, True)
|
||||||
|
user_id, group_id = du.get_user_id(message.from_user.id), du.get_group_id(message.chat.id)
|
||||||
|
|
||||||
|
group = dg.stat_user(user_id, group_id)
|
||||||
|
month = dm.stat_user(user_id, group_id)
|
||||||
|
|
||||||
|
namer = "".join(re.sub(r'[^\w\s]', '', message.from_user.first_name).split())
|
||||||
|
name = morph.parse(namer)[0].inflect({"gent"})
|
||||||
|
|
||||||
|
if name is None: name = namer
|
||||||
|
else: name = name.word
|
||||||
|
|
||||||
|
await message.answer(text=f'*| СТАТИСТИКА {name.upper()} |*\n\n'
|
||||||
|
f'*- За всё время* / *За месяц -*\n'
|
||||||
|
f'*>>* Сообщений в базе *[ {group[0]} / {month[0]} ]*\n\n'
|
||||||
|
f'*>* Ответов *- [ {group[1]} / {month[1]} ]*\n'
|
||||||
|
f'*>* Команд *- [ {group[2]} / {month[2]} ]*\n'
|
||||||
|
f'*>* Ссылок *- [ {group[3]} / {month[3]} ]*\n'
|
||||||
|
f'*>* Стикеров *- [ {group[5]} / {month[5]} ]*\n'
|
||||||
|
f'*>* Медиа файлов *- [ {group[4]} / {month[4]} ]*\n'
|
||||||
|
f'*>* Голос/Кружочки *- [ {group[6]} / {month[6]} ]*',
|
||||||
|
parse_mode=types.ParseMode.MARKDOWN)
|
||||||
|
|
||||||
|
|
||||||
|
@dp.message_handler(commands=['edit'])
|
||||||
|
async def update(message: types.Message):
|
||||||
|
if message.chat.id < 0:
|
||||||
|
upd_stat(message.from_user.id, message.chat.id, 3, message.from_user.first_name, True)
|
||||||
|
user_id, group_id = du.get_user_id(message.from_user.id), du.get_group_id(message.chat.id)
|
||||||
|
|
||||||
|
text_edit = re.sub(r'[^\w\s]', '', message.text.lower()).split()
|
||||||
|
if len(text_edit) == 2:
|
||||||
|
name = morph.parse(text_edit[1])[0]
|
||||||
|
|
||||||
|
if name is None: name = text_edit[1]
|
||||||
|
else: name = name.normal_form
|
||||||
|
|
||||||
|
if name not in list(map(lambda x: x[0], dg.all_names(group_id))):
|
||||||
|
if not db.edit_user_exists(user_id):
|
||||||
|
db.add_edit_user(user_id)
|
||||||
|
|
||||||
|
dg.update_name(user_id, group_id, name)
|
||||||
|
await message.reply(f'{name.title()}, ваше имя было успешно изменено)')
|
||||||
|
else:
|
||||||
|
await message.reply(f'{message.from_user.first_name.lower().title()}, такое имя уже присутствует в чате!')
|
||||||
|
else:
|
||||||
|
await message.reply('Вы не правильно ввели имя! Имя должно быть '
|
||||||
|
'из одного слова и идти сразу после команды!')
|
||||||
|
|
||||||
|
|
||||||
|
@dp.message_handler(commands=['back_edit'])
|
||||||
|
async def update_return(message: types.Message):
|
||||||
|
if message.chat.id < 0:
|
||||||
|
upd_stat(message.from_user.id, message.chat.id, 3, message.from_user.first_name, True)
|
||||||
|
user_id, group_id = du.get_user_id(message.from_user.id), du.get_group_id(message.chat.id)
|
||||||
|
name = re.sub(r'[^\w\s]', '', message.from_user.first_name.lower())
|
||||||
|
|
||||||
|
if db.edit_user_exists(user_id):
|
||||||
|
db.del_edit_user(user_id)
|
||||||
|
dg.update_name(user_id, group_id, name)
|
||||||
|
|
||||||
|
await message.reply(f'{name.title()}, вы успешно вернулись к динамическому изменению имени)')
|
||||||
|
else:
|
||||||
|
await message.reply(f'{name.title()}, вы не устанавливали постоянное имя!')
|
||||||
|
|
||||||
|
|
||||||
|
@dp.message_handler(commands=['start_bot'])
|
||||||
|
async def opening(message: types.Message):
|
||||||
|
if message.chat.id < 0:
|
||||||
|
upd_stat(message.from_user.id, message.chat.id, 3, message.from_user.first_name, True)
|
||||||
|
|
||||||
|
group_id = du.get_group_id(message.chat.id)
|
||||||
|
if db.check_status(group_id):
|
||||||
|
await message.answer("У вас уже включены текстовые ивенты!")
|
||||||
|
else:
|
||||||
|
db.update_status(group_id)
|
||||||
|
await message.answer("Текстовые ивенты включены!")
|
||||||
|
|
||||||
|
|
||||||
|
@dp.message_handler(commands=['stop_bot'])
|
||||||
|
async def closing(message: types.Message):
|
||||||
|
if message.chat.id < 0:
|
||||||
|
upd_stat(message.from_user.id, message.chat.id, 3, message.from_user.first_name, True)
|
||||||
|
|
||||||
|
group_id = du.get_group_id(message.chat.id)
|
||||||
|
if db.check_status(group_id):
|
||||||
|
db.update_status(group_id)
|
||||||
|
await message.answer("Текстовые ивенты отключены!")
|
||||||
|
else:
|
||||||
|
await message.answer("У вас уже отключены текстовые ивенты!")
|
||||||
|
|
||||||
|
|
||||||
|
# УДАЛЕНИЕ ПОЛЬЗОВАТЕЛЕЙ АВТОМАТИЧЕСКИ
|
||||||
|
@dp.message_handler(content_types=["left_chat_member"])
|
||||||
|
async def delete(message: types.Message):
|
||||||
|
if du.user_exists(message.left_chat_member.id):
|
||||||
|
user_id, group_id = du.get_user_id(message.left_chat_member.id), du.get_group_id(message.chat.id)
|
||||||
|
|
||||||
|
dg.del_user(group_id, user_id)
|
||||||
|
if db.group_exists_month(group_id):
|
||||||
|
if dm.user_exists(user_id, group_id): dm.del_user(group_id, user_id)
|
||||||
|
|
||||||
|
try: await message.delete()
|
||||||
|
except Exception: return
|
||||||
|
|
||||||
|
|
||||||
|
# УДАЛЕНИЕ ТЕХ. СООБЩЕНИЙ
|
||||||
|
@dp.message_handler(content_types=["new_chat_title", "new_chat_photo", "pinned_message", "voice_chat_ended",
|
||||||
|
"voice_chat_participants_invited"])
|
||||||
|
async def chat_events(message: types.Message):
|
||||||
|
try: await message.delete()
|
||||||
|
except Exception: return
|
||||||
|
|
||||||
|
|
||||||
|
# СТАТИСТИКА
|
||||||
|
@dp.message_handler(content_types=['location', 'contact', 'video', 'photo', 'audio', 'document'])
|
||||||
|
async def media(message: types.Message):
|
||||||
|
if message.chat.id < 0: upd_stat(message.from_user.id, message.chat.id, 5, message.from_user.first_name, True)
|
||||||
|
|
||||||
|
|
||||||
|
@dp.message_handler(content_types=['voice', 'video_note'])
|
||||||
|
async def voice(message: types.Message):
|
||||||
|
if message.chat.id < 0: upd_stat(message.from_user.id, message.chat.id, 7, message.from_user.first_name, True)
|
||||||
|
|
||||||
|
|
||||||
|
@dp.message_handler(content_types=['sticker'])
|
||||||
|
async def stick(message: types.Message):
|
||||||
|
if message.chat.id < 0: upd_stat(message.from_user.id, message.chat.id, 6, message.from_user.first_name, True)
|
||||||
|
|
||||||
|
|
||||||
|
# ТЕКСТОВЫЕ ИВЕНТЫ
|
||||||
|
@dp.message_handler(content_types=['text'])
|
||||||
|
async def send_events(message: types.Message):
|
||||||
|
group_id, user_id, name = message.chat.id, message.from_user.id, message.from_user.first_name
|
||||||
|
|
||||||
|
# ОБНОВЛЕНИЕ КОЛ-ВО
|
||||||
|
if message.chat.id < 0:
|
||||||
|
upd_stat(user_id, group_id, 1, name) # СООБЩЕНИЙ
|
||||||
|
if len(message.text) > 1 and message.text[0] == '/': upd_stat(user_id, group_id, 3, name) # КОМАНД
|
||||||
|
if 'reply_to_message' in message: upd_stat(user_id, group_id, 2, name) # ОТВЕТОВ НА СООБЩЕНИЯ
|
||||||
|
|
||||||
|
# ПЕРЕМЕННЫЕ
|
||||||
|
low_mes = message.text.lower() # СООБЩЕНИЕ В НИЖНЕМ РЕГИСТРЕ
|
||||||
|
words = message.text.split() # СПИСОК СЛОВ В СООБЩЕНИИ
|
||||||
|
unsigned = re.sub(r'[^\w\s]', '', low_mes).split() # СПИСОК СЛОВ БЕЗ ПУНКТУАЦИИ
|
||||||
|
first_form = [morph.parse(i)[0].normal_form for i in unsigned] # СПИСОК СЛОВ В ПЕРВОЙ ФОРМЕ
|
||||||
|
if message.chat.id < 0: # СПИСОК ИМЕН В СООБЩЕНИИ (ТОЛЬКО В ГРУППЕ)
|
||||||
|
names = [_ for _ in first_form if _ in list(map(lambda x: x[0], dg.all_names(du.get_group_id(group_id))))]
|
||||||
|
|
||||||
|
if len(words) >= 2:
|
||||||
|
# ПОЛЕЗНЫЕ ФУНКЦИИ
|
||||||
|
if len(words) == 5 and "число от" in low_mes:
|
||||||
|
await message.answer(
|
||||||
|
text=f"Число <b>[ {random.randint(int(low_mes.split()[2]), int(low_mes.split()[4]))} ]</b>",
|
||||||
|
parse_mode=types.ParseMode.HTML)
|
||||||
|
return
|
||||||
|
|
||||||
|
if unsigned[0] == 'переведи':
|
||||||
|
if "переведи - " in low_mes:
|
||||||
|
await message.answer(lang_form([words[_] for _ in range(len(words)) if _ > 1]))
|
||||||
|
elif f"переведи ({unsigned[1]}) - " in low_mes:
|
||||||
|
if len(unsigned[1]) == 1:
|
||||||
|
await message.answer(lang_form([words[_] for _ in range(len(words)) if _ > 2], unsigned[1]))
|
||||||
|
return
|
||||||
|
|
||||||
|
if unsigned[0] == 'переверни':
|
||||||
|
if "переверни - " in low_mes:
|
||||||
|
await message.answer(revers(message.text[12:], True))
|
||||||
|
elif "переверни полностью - " in low_mes:
|
||||||
|
await message.answer(revers(message.text[22:], False))
|
||||||
|
return
|
||||||
|
|
||||||
|
if unsigned[0] == 'озвучь' and "озвучь - " in low_mes:
|
||||||
|
text_to_voice = message.text[9:]
|
||||||
|
tts = gTTS(text_to_voice, lang='ru')
|
||||||
|
tts.save('../data/voices/voice.ogg')
|
||||||
|
await bot.send_voice(chat_id=group_id, voice=open('../data/voices/voice.ogg', 'rb'),
|
||||||
|
caption=f"<b>{text_to_voice}</b>", parse_mode=types.ParseMode.HTML)
|
||||||
|
os.remove('../data/voices/voice.ogg')
|
||||||
|
return
|
||||||
|
|
||||||
|
# РАНДОМ ИВЕНТЫ
|
||||||
|
if "подраться" == words[0].lower() and "с" == words[1].lower():
|
||||||
|
text = " ".join([words[i] for i in range(len(words)) if i > 1])
|
||||||
|
|
||||||
|
if random.randint(0, 1) == 0:
|
||||||
|
await message.bot.send_photo(chat_id=group_id,
|
||||||
|
photo=open(f"../data/fight/({random.randint(1, 8)}).jpg", 'rb'),
|
||||||
|
caption=f"{message.from_user.first_name}, ты был унижен {text.title()}"
|
||||||
|
f", с помощью {base.VAR_LOSE[random.randint(0, 3)]}")
|
||||||
|
else:
|
||||||
|
await message.bot.send_photo(chat_id=group_id,
|
||||||
|
photo=open(f"../data/fight/({random.randint(1, 8)}).jpg", 'rb'),
|
||||||
|
caption=f"{message.from_user.first_name}, ты победил в драке "
|
||||||
|
f"с {text.title()}, {base.VAR_WIN[random.randint(0, 1)]}")
|
||||||
|
|
||||||
|
# ИВЕНТ ВЗАИМОДЕЙСТВИЯ
|
||||||
|
for word in base.TMOK_LIST:
|
||||||
|
if word in low_mes:
|
||||||
|
lst = [words[i] for i in range(len(words)) if i != 0]
|
||||||
|
text = " ".join(lst)
|
||||||
|
|
||||||
|
slv = morph.parse(words[0].lower())[0]
|
||||||
|
await message.bot.send_photo(chat_id=group_id,
|
||||||
|
photo=open(f"../data/tmok/({random.randint(1, 4)}).jpg", 'rb'),
|
||||||
|
caption=f"{message.from_user.first_name} "
|
||||||
|
f"{slv.inflect({'past', 'sing', 'indc'}).word} {text}")
|
||||||
|
|
||||||
|
for word in base.KILL_LIST:
|
||||||
|
if word in low_mes:
|
||||||
|
lst = [words[i] for i in range(len(words)) if i != 0]
|
||||||
|
text = " ".join(lst)
|
||||||
|
|
||||||
|
slv = morph.parse(words[0].lower())[0]
|
||||||
|
await message.bot.send_photo(chat_id=group_id,
|
||||||
|
photo=open(f"../data/kill/({random.randint(1, 6)}).jpg", 'rb'),
|
||||||
|
caption=f"{message.from_user.first_name} "
|
||||||
|
f"{slv.inflect({'past', 'sing', 'indc'}).word} {text}")
|
||||||
|
|
||||||
|
if unsigned[0] in base.QUAT_LIST[0] and \
|
||||||
|
unsigned[1] in base.QUAT_LIST[1] and unsigned[2] in base.QUAT_LIST[2]:
|
||||||
|
word = requests.get('http://fucking-great-advice.ru/api/random').json()
|
||||||
|
await message.reply(word["text"])
|
||||||
|
return
|
||||||
|
|
||||||
|
if message.chat.id < 0:
|
||||||
|
# ЛИСТ КОМАНДЫ
|
||||||
|
if names:
|
||||||
|
try:
|
||||||
|
await message.reply(notice(names, False, du.get_group_id(group_id), user_id), types.ParseMode.HTML)
|
||||||
|
except Exception as e:
|
||||||
|
return
|
||||||
|
"""
|
||||||
|
await bot.send_message(chat_id=base.TEX_GROUP, text=f"<b>[ {str(dt.now())[:-10]} ]</b> "
|
||||||
|
f"<b><i>=></i></b> <i>{repr(e)}</i> (уведомления по именам)",
|
||||||
|
parse_mode=types.ParseMode.HTML)
|
||||||
|
"""
|
||||||
|
return
|
||||||
|
|
||||||
|
# ПЕРЕВОДЧИК СЛОВ
|
||||||
|
if checker([i for i in low_mes], words, group_id, user_id, name.lower()) == len(low_mes) and \
|
||||||
|
not any([engl_dict.check(i) for i in unsigned]):
|
||||||
|
await message.reply(f"[{message.from_user.first_name}](tg://user_id?id={user_id}) *>* {translator(words)}",
|
||||||
|
types.ParseMode.MARKDOWN)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
loop = asyncio.get_event_loop()
|
||||||
|
executor.start_polling(dp, skip_updates=True)
|
||||||
172
code/script.py
Normal file
172
code/script.py
Normal file
|
|
@ -0,0 +1,172 @@
|
||||||
|
from base import ERR, ERR_, TRU, TRU_, ALB
|
||||||
|
from string import digits, punctuation
|
||||||
|
import re, sql
|
||||||
|
|
||||||
|
# инициализируем соединение с БД
|
||||||
|
db = sql.Base('../db/base.db')
|
||||||
|
du = sql.User('../db/users.db')
|
||||||
|
dg = sql.Group('../db/groups.db')
|
||||||
|
dm = sql.Month('../db/month.db')
|
||||||
|
|
||||||
|
|
||||||
|
def upd_stat(user_id, group_id, var_id, name, mes=False):
|
||||||
|
name = re.sub(r'[^\w\s]', '', name.lower())
|
||||||
|
if not du.user_exists(user_id):
|
||||||
|
du.add_user(user_id)
|
||||||
|
user_id = du.get_user_id(user_id)
|
||||||
|
|
||||||
|
if not du.group_exists(group_id):
|
||||||
|
du.add_group(group_id)
|
||||||
|
group_id = du.get_group_id(group_id)
|
||||||
|
|
||||||
|
if not db.group_exists(group_id):
|
||||||
|
db.add_group(group_id)
|
||||||
|
dg.created_group(group_id)
|
||||||
|
|
||||||
|
if not dg.user_exists(user_id, group_id):
|
||||||
|
dg.add_user(group_id, user_id, name)
|
||||||
|
|
||||||
|
db.update_stat(group_id, var_id)
|
||||||
|
dg.update_stat(user_id, group_id, var_id)
|
||||||
|
|
||||||
|
if not db.group_exists_month(group_id):
|
||||||
|
db.add_group_month(group_id)
|
||||||
|
dm.created_group(group_id)
|
||||||
|
dm.add_user(group_id, user_id)
|
||||||
|
else:
|
||||||
|
if not dm.user_exists(user_id, group_id):
|
||||||
|
dm.add_user(group_id, user_id)
|
||||||
|
|
||||||
|
db.update_month_stat(group_id, var_id)
|
||||||
|
dm.update_stat(user_id, group_id, var_id)
|
||||||
|
|
||||||
|
if mes:
|
||||||
|
db.update_month_stat(group_id, 1)
|
||||||
|
dg.update_stat(user_id, group_id, 1)
|
||||||
|
dm.update_stat(user_id, group_id, 1)
|
||||||
|
db.update_stat(group_id, 1)
|
||||||
|
|
||||||
|
if not db.edit_user_exists(user_id):
|
||||||
|
dg.update_name(user_id, group_id, name)
|
||||||
|
|
||||||
|
|
||||||
|
def lang_form(text, smbl='г'):
|
||||||
|
for i in range(len(text)):
|
||||||
|
word = [str(j) + str(smbl) + str(j).lower() if j in ALB else str(j) for j in text[i]]
|
||||||
|
text[i] = ''.join(word)
|
||||||
|
return ' '.join(text)
|
||||||
|
|
||||||
|
|
||||||
|
def notice(name, all_users, group_id, author):
|
||||||
|
names = [i[0] for i in dg.all_names(group_id)]
|
||||||
|
ids = [du.get_first_user_id(i[0]) for i in dg.all_ids(group_id)]
|
||||||
|
|
||||||
|
if all_users:
|
||||||
|
name = dg.user_name(name, group_id)
|
||||||
|
usr = ["<a href=\""+'tg://user?id='+str(ids[i])+"\">"+names[i].title()+"</a>" for i in range(len(names))
|
||||||
|
if names[i] != name.lower()]
|
||||||
|
usr.append(f'{usr[-2]} и {usr[-1]}')
|
||||||
|
del usr[-2], usr[-2]
|
||||||
|
return f'{", ".join(usr)} вас вызывает {name.title()}'
|
||||||
|
else:
|
||||||
|
no_copy = []
|
||||||
|
for i in name:
|
||||||
|
if i not in no_copy:
|
||||||
|
no_copy.append(i)
|
||||||
|
|
||||||
|
if len(no_copy) > 1: # ПЕРЕПИСАТЬ КОД ГАВНА КУСОК
|
||||||
|
usr = ["<a href=\""+'tg://user?id='+str(ids[names.index(_)])+"\">"+_.title()+"</a>" for _ in no_copy
|
||||||
|
if int(author) != ids[names.index(_)]]
|
||||||
|
usr.append(f'{usr[-2]} и {usr[-1]}')
|
||||||
|
del usr[-2], usr[-2]
|
||||||
|
return f"{', '.join(usr)} вас упомянули)"
|
||||||
|
else:
|
||||||
|
usr = "<a href=\""+'tg://user?id='+str(ids[names.index(no_copy[0])])+"\">"+no_copy[0].title()+"</a>"
|
||||||
|
return f"{usr}, тебя упомянули)"
|
||||||
|
|
||||||
|
|
||||||
|
def checker(signs, words, group_id, user_id, name):
|
||||||
|
if len([z for z in signs if (z in digits) or (z in punctuation)]) == len(signs) or signs[0] == '/':
|
||||||
|
return int('-1')
|
||||||
|
|
||||||
|
if len(signs) > 4:
|
||||||
|
for x in range(3, len(signs)):
|
||||||
|
http = "".join([signs[x - 3], signs[x - 2], signs[x - 1], signs[x]])
|
||||||
|
if 'http' in http:
|
||||||
|
upd_stat(user_id, group_id, 4, name)
|
||||||
|
return int('-1')
|
||||||
|
|
||||||
|
count, raw = 0, 0
|
||||||
|
for word in words:
|
||||||
|
for symbol in word:
|
||||||
|
raw += 1
|
||||||
|
if (symbol in ERR) or (symbol in ERR_) or (symbol in digits):
|
||||||
|
count += 1
|
||||||
|
return len(signs) - raw + count
|
||||||
|
|
||||||
|
|
||||||
|
def translator(words):
|
||||||
|
itg = []
|
||||||
|
for word in words:
|
||||||
|
raw_word = []
|
||||||
|
for symbol in word:
|
||||||
|
if symbol in ERR:
|
||||||
|
count = 0
|
||||||
|
for _ in ERR:
|
||||||
|
if symbol == _:
|
||||||
|
raw_word.append(TRU[count])
|
||||||
|
break
|
||||||
|
count += 1
|
||||||
|
elif symbol in ERR_:
|
||||||
|
count = 0
|
||||||
|
for _ in ERR_:
|
||||||
|
if symbol == _:
|
||||||
|
raw_word.append(TRU_[count])
|
||||||
|
break
|
||||||
|
count += 1
|
||||||
|
itg.append("".join(raw_word))
|
||||||
|
return " ".join(itg)
|
||||||
|
|
||||||
|
|
||||||
|
def revers(message, var):
|
||||||
|
no_pct = re.sub(r'[^\w\s]', '', message)
|
||||||
|
|
||||||
|
if var:
|
||||||
|
sml, pnc, pct, prf = [i for i in message] + [str(0)], [], [], False
|
||||||
|
for i in sml:
|
||||||
|
if i in punctuation or i == ' ':
|
||||||
|
pnc.append(i)
|
||||||
|
prf, flag = True if sml.index(i) == 0 else False, False
|
||||||
|
else:
|
||||||
|
flag = True
|
||||||
|
|
||||||
|
if flag and len(pnc) > 0:
|
||||||
|
pct.append(''.join(pnc))
|
||||||
|
pnc = []
|
||||||
|
|
||||||
|
wrd, rev, lst, txt = no_pct.split(), [], [], []
|
||||||
|
for i in wrd:
|
||||||
|
word, up, itg = [i[-1 - l].lower() for l in range(len(i))], [], []
|
||||||
|
|
||||||
|
for _ in i:
|
||||||
|
up.append(True if _ in TRU_ else False)
|
||||||
|
for j in range(len(up)):
|
||||||
|
itg.append(word[j].upper() if up[j] else word[j])
|
||||||
|
|
||||||
|
rev.append(''.join(itg))
|
||||||
|
|
||||||
|
if prf:
|
||||||
|
for i in range(len(pct)):
|
||||||
|
txt = (txt + [pct[i]]) if (i + 1) == len(pct) and len(pct) > len(rev) else (txt + [pct[i], rev[i]])
|
||||||
|
return ''.join(txt)
|
||||||
|
else:
|
||||||
|
for i in range(len(rev)):
|
||||||
|
if i > 0:
|
||||||
|
txt.append(pct[i - 1])
|
||||||
|
txt.append(rev[i])
|
||||||
|
if (i + 1) == len(rev) and len(pct) == len(rev):
|
||||||
|
txt.append(pct[i])
|
||||||
|
return ''.join(txt)
|
||||||
|
else:
|
||||||
|
sml = [i for i in message]
|
||||||
|
return ''.join([sml[-1 - i] for i in range(len(sml))])
|
||||||
389
code/sql.py
Normal file
389
code/sql.py
Normal file
|
|
@ -0,0 +1,389 @@
|
||||||
|
import sqlite3
|
||||||
|
|
||||||
|
|
||||||
|
class Base:
|
||||||
|
def __init__(self, database):
|
||||||
|
"""Подключаемся к БД и сохраняем курсор соединения"""
|
||||||
|
self.connection = sqlite3.connect(database)
|
||||||
|
self.cursor = self.connection.cursor()
|
||||||
|
|
||||||
|
# КОМАНДЫ
|
||||||
|
def add_group(self, group_id):
|
||||||
|
"""Добавляем нового пользователя"""
|
||||||
|
with self.connection:
|
||||||
|
self.cursor.execute(f"INSERT INTO `work` (`group_id`) VALUES(?)", (group_id,))
|
||||||
|
self.cursor.execute(f"INSERT INTO `stat` (`group_id`, `mes`, `rep`, `com`, `url`, `med`, `sti`, "
|
||||||
|
f"`voi`) VALUES(?,?,?,?,?,?,?,?)", (group_id, 0, 0, 0, 0, 0, 0, 0))
|
||||||
|
return
|
||||||
|
|
||||||
|
def group_exists(self, group_id):
|
||||||
|
"""Проверяем, есть ли уже пользователь в базе"""
|
||||||
|
with self.connection:
|
||||||
|
result = self.cursor.execute(f'SELECT * FROM `work` WHERE `group_id` = ?', (group_id,)).fetchall()
|
||||||
|
return bool(len(result))
|
||||||
|
|
||||||
|
# ТАБЛИЦА STAT
|
||||||
|
def update_stat(self, group_id, var_id):
|
||||||
|
"""Обновляем статистику"""
|
||||||
|
try:
|
||||||
|
with self.connection:
|
||||||
|
self.cursor.execute(f"SELECT * FROM `stat` WHERE `group_id` = ?", (group_id,))
|
||||||
|
if var_id == 1:
|
||||||
|
return self.cursor.execute(f"UPDATE `stat` SET `mes` = ? WHERE `group_id` = ?",
|
||||||
|
((self.cursor.fetchone()[1] + 1), group_id))
|
||||||
|
elif var_id == 2:
|
||||||
|
return self.cursor.execute(f"UPDATE `stat` SET `rep` = ? WHERE `group_id` = ?",
|
||||||
|
((self.cursor.fetchone()[2] + 1), group_id))
|
||||||
|
elif var_id == 3:
|
||||||
|
return self.cursor.execute(f"UPDATE `stat` SET `com` = ? WHERE `group_id` = ?",
|
||||||
|
((self.cursor.fetchone()[3] + 1), group_id))
|
||||||
|
elif var_id == 4:
|
||||||
|
return self.cursor.execute(f"UPDATE `stat` SET `url` = ? WHERE `group_id` = ?",
|
||||||
|
((self.cursor.fetchone()[4] + 1), group_id))
|
||||||
|
elif var_id == 5:
|
||||||
|
return self.cursor.execute(f"UPDATE `stat` SET `med` = ? WHERE `group_id` = ?",
|
||||||
|
((self.cursor.fetchone()[5] + 1), group_id))
|
||||||
|
elif var_id == 6:
|
||||||
|
return self.cursor.execute(f"UPDATE `stat` SET `sti` = ? WHERE `group_id` = ?",
|
||||||
|
((self.cursor.fetchone()[6] + 1), group_id))
|
||||||
|
elif var_id == 7:
|
||||||
|
return self.cursor.execute(f"UPDATE `stat` SET `voi` = ? WHERE `group_id` = ?",
|
||||||
|
((self.cursor.fetchone()[7] + 1), group_id))
|
||||||
|
except Exception as e:
|
||||||
|
print(repr(e))
|
||||||
|
|
||||||
|
def stat_group(self, group_id):
|
||||||
|
"""Получение данных пользователя"""
|
||||||
|
with self.connection:
|
||||||
|
self.cursor.execute(f"SELECT * FROM `stat` WHERE `group_id` = ?", (group_id,))
|
||||||
|
data = self.cursor.fetchone()
|
||||||
|
return data[1:]
|
||||||
|
|
||||||
|
# ТАБЛИЦА MONTH
|
||||||
|
def group_exists_month(self, group_id):
|
||||||
|
"""Проверяем, есть ли уже пользователь в базе"""
|
||||||
|
with self.connection:
|
||||||
|
result = self.cursor.execute('SELECT * FROM `month` WHERE `group_id` = ?', (group_id,)).fetchall()
|
||||||
|
return bool(len(result))
|
||||||
|
|
||||||
|
def add_group_month(self, group_id):
|
||||||
|
"""Добавляем нового пользователя"""
|
||||||
|
with self.connection:
|
||||||
|
return self.cursor.execute("INSERT INTO `month` (`group_id`, `mes`, `rep`, `com`, `url`, `med`, `sti`, "
|
||||||
|
"`voi`) VALUES(?,?,?,?,?,?,?,?)", (group_id, 0, 0, 0, 0, 0, 0, 0))
|
||||||
|
|
||||||
|
def update_month_stat(self, group_id, var_id):
|
||||||
|
"""Обновляем статистику"""
|
||||||
|
try:
|
||||||
|
with self.connection:
|
||||||
|
self.cursor.execute(f"SELECT * FROM `month` WHERE `group_id` = ?", (group_id,))
|
||||||
|
if var_id == 1:
|
||||||
|
return self.cursor.execute(f"UPDATE `month` SET `mes` = ? WHERE `group_id` = ?",
|
||||||
|
((self.cursor.fetchone()[1] + 1), group_id))
|
||||||
|
elif var_id == 2:
|
||||||
|
return self.cursor.execute(f"UPDATE `month` SET `rep` = ? WHERE `group_id` = ?",
|
||||||
|
((self.cursor.fetchone()[2] + 1), group_id))
|
||||||
|
elif var_id == 3:
|
||||||
|
return self.cursor.execute(f"UPDATE `month` SET `com` = ? WHERE `group_id` = ?",
|
||||||
|
((self.cursor.fetchone()[3] + 1), group_id))
|
||||||
|
elif var_id == 4:
|
||||||
|
return self.cursor.execute(f"UPDATE `month` SET `url` = ? WHERE `group_id` = ?",
|
||||||
|
((self.cursor.fetchone()[4] + 1), group_id))
|
||||||
|
elif var_id == 5:
|
||||||
|
return self.cursor.execute(f"UPDATE `month` SET `med` = ? WHERE `group_id` = ?",
|
||||||
|
((self.cursor.fetchone()[5] + 1), group_id))
|
||||||
|
elif var_id == 6:
|
||||||
|
return self.cursor.execute(f"UPDATE `month` SET `sti` = ? WHERE `group_id` = ?",
|
||||||
|
((self.cursor.fetchone()[6] + 1), group_id))
|
||||||
|
elif var_id == 7:
|
||||||
|
return self.cursor.execute(f"UPDATE `month` SET `voi` = ? WHERE `group_id` = ?",
|
||||||
|
((self.cursor.fetchone()[7] + 1), group_id))
|
||||||
|
except Exception as e:
|
||||||
|
print(repr(e))
|
||||||
|
|
||||||
|
def month_stat_group(self, group_id):
|
||||||
|
"""Получение данных пользователя"""
|
||||||
|
with self.connection:
|
||||||
|
self.cursor.execute(f"SELECT * FROM `month` WHERE `group_id` = ?", (group_id,))
|
||||||
|
data = self.cursor.fetchone()
|
||||||
|
return data[1:]
|
||||||
|
|
||||||
|
# ТАБЛИЦА EDIT
|
||||||
|
def add_edit_user(self, user_id):
|
||||||
|
"""Добавляем нового пользователя"""
|
||||||
|
with self.connection:
|
||||||
|
return self.cursor.execute("INSERT INTO `edit` (`user_id`) VALUES(?)", (user_id,))
|
||||||
|
|
||||||
|
def edit_user_exists(self, user_id):
|
||||||
|
"""Проверяем, есть ли уже пользователь в базе"""
|
||||||
|
with self.connection:
|
||||||
|
result = self.cursor.execute('SELECT * FROM `edit` WHERE `user_id` = ?', (user_id,)).fetchall()
|
||||||
|
return bool(len(result))
|
||||||
|
|
||||||
|
def del_edit_user(self, user_id):
|
||||||
|
"""Удаление пользователя"""
|
||||||
|
with self.connection:
|
||||||
|
return self.cursor.execute(f'DELETE FROM `edit` WHERE `user_id` = ?', (user_id,))
|
||||||
|
|
||||||
|
# ТАБЛИЦА WORK
|
||||||
|
def check_status(self, group_id):
|
||||||
|
"""Получаем статус"""
|
||||||
|
with self.connection:
|
||||||
|
return self.cursor.execute(f'SELECT `state` FROM `work` WHERE `group_id` = ?', (group_id,)).fetchone()[0]
|
||||||
|
|
||||||
|
def update_status(self, group_id):
|
||||||
|
"""Обновляем статус"""
|
||||||
|
with self.connection:
|
||||||
|
state = self.cursor.execute(f'SELECT `state` FROM `work` WHERE `group_id` = ?', (group_id,)).fetchone()[0]
|
||||||
|
return self.cursor.execute(f"UPDATE `work` SET `state` = ? WHERE `group_id` = ?", (not state, group_id))
|
||||||
|
|
||||||
|
# ЗАКРЫТИЕ ВЫЗОВА
|
||||||
|
def close(self):
|
||||||
|
"""Закрываем соединение с БД"""
|
||||||
|
self.connection.close()
|
||||||
|
|
||||||
|
|
||||||
|
class User:
|
||||||
|
def __init__(self, database):
|
||||||
|
"""Подключаемся к БД и сохраняем курсор соединения"""
|
||||||
|
self.connection = sqlite3.connect(database)
|
||||||
|
self.cursor = self.connection.cursor()
|
||||||
|
|
||||||
|
# СВЯЗКА ПОЛЬЗОВАТЕЛЯ
|
||||||
|
def user_exists(self, user_id):
|
||||||
|
"""Проверяем, есть ли уже пользователь в базе"""
|
||||||
|
with self.connection:
|
||||||
|
result = self.cursor.execute(f'SELECT * FROM `users` WHERE `user_id` = ?', (user_id,)).fetchall()
|
||||||
|
return bool(len(result))
|
||||||
|
|
||||||
|
def add_user(self, user_id):
|
||||||
|
"""Добавляем нового пользователя"""
|
||||||
|
with self.connection:
|
||||||
|
return self.cursor.execute(f"INSERT INTO `users` (`user_id`) VALUES(?)", (user_id,))
|
||||||
|
|
||||||
|
def get_user_id(self, user_id):
|
||||||
|
"""Получаем короткое айди юзера"""
|
||||||
|
with self.connection:
|
||||||
|
return self.cursor.execute(f'SELECT `id` FROM `users` WHERE `user_id` = ?', (user_id,)).fetchone()[0]
|
||||||
|
|
||||||
|
def get_first_user_id(self, user_id):
|
||||||
|
"""Получаем длинное айди юзера"""
|
||||||
|
with self.connection:
|
||||||
|
return self.cursor.execute(f'SELECT `user_id` FROM `users` WHERE `id` = ?', (user_id,)).fetchone()[0]
|
||||||
|
|
||||||
|
# СВЯЗКА ГРУППЫ
|
||||||
|
def group_exists(self, group_id):
|
||||||
|
"""Проверяем, есть ли уже группа в базе"""
|
||||||
|
with self.connection:
|
||||||
|
result = self.cursor.execute('SELECT * FROM `groups` WHERE `group_id` = ?', (group_id,)).fetchall()
|
||||||
|
return bool(len(result))
|
||||||
|
|
||||||
|
def add_group(self, group_id):
|
||||||
|
"""Добавляем новую группу в таблицу"""
|
||||||
|
with self.connection:
|
||||||
|
return self.cursor.execute("INSERT INTO `groups` (`group_id`) VALUES(?)", (group_id,))
|
||||||
|
|
||||||
|
def get_group_id(self, group_id):
|
||||||
|
"""Получаем короткое айди юзера"""
|
||||||
|
with self.connection:
|
||||||
|
return self.cursor.execute(f'SELECT `id` FROM `groups` WHERE `group_id` = ?', (group_id,)).fetchone()[0]
|
||||||
|
|
||||||
|
def get_first_group_id(self, group_id):
|
||||||
|
"""Получаем длинное айди юзера"""
|
||||||
|
with self.connection:
|
||||||
|
return self.cursor.execute(f'SELECT `group_id` FROM `groups` WHERE `id` = ?', (group_id,)).fetchone()[0]
|
||||||
|
|
||||||
|
def update_group_id(self, from_id, to_id):
|
||||||
|
"""Заменяем на новый айди"""
|
||||||
|
with self.connection:
|
||||||
|
return self.cursor.execute("UPDATE `groups` SET `group_id` = ? WHERE `id` = ?", (to_id, from_id))
|
||||||
|
|
||||||
|
# ЗАКРЫТИЕ ВЫЗОВА
|
||||||
|
def close(self):
|
||||||
|
"""Закрываем соединение с БД"""
|
||||||
|
self.connection.close()
|
||||||
|
|
||||||
|
|
||||||
|
class Group:
|
||||||
|
def __init__(self, database):
|
||||||
|
"""Подключаемся к БД и сохраняем курсор соединения"""
|
||||||
|
self.connection = sqlite3.connect(database)
|
||||||
|
self.cursor = self.connection.cursor()
|
||||||
|
|
||||||
|
# КОМАНДЫ
|
||||||
|
def created_group(self, group_id):
|
||||||
|
"""Создаём новую таблицу"""
|
||||||
|
with self.connection:
|
||||||
|
return self.cursor.execute(f"""CREATE TABLE IF NOT EXISTS [{group_id}] (
|
||||||
|
user_id INTEGER NOT NULL,
|
||||||
|
first_name STRING,
|
||||||
|
mes INTEGER,
|
||||||
|
rep INTEGER,
|
||||||
|
com INTEGER,
|
||||||
|
url INTEGER,
|
||||||
|
med INTEGER,
|
||||||
|
sti INTEGER,
|
||||||
|
voi INTEGER);""")
|
||||||
|
|
||||||
|
def add_user(self, group_id, user_id, name):
|
||||||
|
"""Добавляем нового пользователя"""
|
||||||
|
with self.connection:
|
||||||
|
return self.cursor.execute(f"INSERT INTO `{group_id}` (`user_id`, `first_name`, `mes`, `rep`, `com`, `url`, "
|
||||||
|
f"`med`, `sti`, `voi`) VALUES(?,?,?,?,?,?,?,?,?)", (user_id, name, 0, 0, 0, 0, 0,
|
||||||
|
0, 0))
|
||||||
|
|
||||||
|
def all_names(self, group_id):
|
||||||
|
"""Список имён"""
|
||||||
|
with self.connection:
|
||||||
|
return self.cursor.execute(f'SELECT `first_name` FROM `{group_id}`').fetchall()
|
||||||
|
|
||||||
|
def all_ids(self, group_id):
|
||||||
|
"""Список айди"""
|
||||||
|
with self.connection:
|
||||||
|
return self.cursor.execute(f'SELECT `user_id` FROM `{group_id}`').fetchall()
|
||||||
|
|
||||||
|
def update_stat(self, user_id, group_id, var_id):
|
||||||
|
"""Обновляем статистику"""
|
||||||
|
try:
|
||||||
|
with self.connection:
|
||||||
|
self.cursor.execute(f"SELECT * FROM `{group_id}` WHERE `user_id` = ?", (user_id,))
|
||||||
|
if var_id == 1:
|
||||||
|
return self.cursor.execute(f"UPDATE `{group_id}` SET `mes` = ? WHERE `user_id` = ?",
|
||||||
|
((self.cursor.fetchone()[2] + 1), user_id))
|
||||||
|
elif var_id == 2:
|
||||||
|
return self.cursor.execute(f"UPDATE `{group_id}` SET `rep` = ? WHERE `user_id` = ?",
|
||||||
|
((self.cursor.fetchone()[3] + 1), user_id))
|
||||||
|
elif var_id == 3:
|
||||||
|
return self.cursor.execute(f"UPDATE `{group_id}` SET `com` = ? WHERE `user_id` = ?",
|
||||||
|
((self.cursor.fetchone()[4] + 1), user_id))
|
||||||
|
elif var_id == 4:
|
||||||
|
return self.cursor.execute(f"UPDATE `{group_id}` SET `url` = ? WHERE `user_id` = ?",
|
||||||
|
((self.cursor.fetchone()[5] + 1), user_id))
|
||||||
|
elif var_id == 5:
|
||||||
|
return self.cursor.execute(f"UPDATE `{group_id}` SET `med` = ? WHERE `user_id` = ?",
|
||||||
|
((self.cursor.fetchone()[6] + 1), user_id))
|
||||||
|
elif var_id == 6:
|
||||||
|
return self.cursor.execute(f"UPDATE `{group_id}` SET `sti` = ? WHERE `user_id` = ?",
|
||||||
|
((self.cursor.fetchone()[7] + 1), user_id))
|
||||||
|
elif var_id == 7:
|
||||||
|
return self.cursor.execute(f"UPDATE `{group_id}` SET `voi` = ? WHERE `user_id` = ?",
|
||||||
|
((self.cursor.fetchone()[8] + 1), user_id))
|
||||||
|
except Exception as e:
|
||||||
|
print(repr(e))
|
||||||
|
|
||||||
|
def user_exists(self, user_id, group_id):
|
||||||
|
"""Проверяем, есть ли уже пользователь в базе"""
|
||||||
|
with self.connection:
|
||||||
|
result = self.cursor.execute(f'SELECT * FROM `{group_id}` WHERE `user_id` = ?', (user_id,)).fetchall()
|
||||||
|
return bool(len(result))
|
||||||
|
|
||||||
|
def update_name(self, user_id, group_id, name):
|
||||||
|
"""Обновляем имя пользователя"""
|
||||||
|
with self.connection:
|
||||||
|
return self.cursor.execute(f"UPDATE `{group_id}` SET `first_name` = ? WHERE `user_id` = ?", (name, user_id))
|
||||||
|
|
||||||
|
def user_name(self, user_id, group_id):
|
||||||
|
"""Получаем имя пользователя по айди"""
|
||||||
|
with self.connection:
|
||||||
|
return self.cursor.execute(f"SELECT `first_name` FROM `{group_id}` WHERE `user_id` = ?", (user_id,)).fetchone()[0]
|
||||||
|
|
||||||
|
def stat_user(self, user_id, group_id):
|
||||||
|
"""Получение данных пользователя"""
|
||||||
|
with self.connection:
|
||||||
|
self.cursor.execute(f"SELECT * FROM `{group_id}` WHERE `user_id` = ?", (user_id,))
|
||||||
|
data = self.cursor.fetchone()
|
||||||
|
return data[2:]
|
||||||
|
|
||||||
|
def del_user(self, group_id, user_id):
|
||||||
|
"""Удаление пользователя"""
|
||||||
|
with self.connection:
|
||||||
|
return self.cursor.execute(f'DELETE FROM `{group_id}` WHERE `user_id` = ?', (user_id,))
|
||||||
|
|
||||||
|
# ЗАКРЫТИЕ ВЫЗОВА
|
||||||
|
def close(self):
|
||||||
|
"""Закрываем соединение с БД"""
|
||||||
|
self.connection.close()
|
||||||
|
|
||||||
|
|
||||||
|
class Month:
|
||||||
|
def __init__(self, database):
|
||||||
|
"""Подключаемся к БД и сохраняем курсор соединения"""
|
||||||
|
self.connection = sqlite3.connect(database)
|
||||||
|
self.cursor = self.connection.cursor()
|
||||||
|
|
||||||
|
# КОМАНДЫ
|
||||||
|
def update_stat(self, user_id, group_id, var_id):
|
||||||
|
"""Обновляем статистику"""
|
||||||
|
try:
|
||||||
|
with self.connection:
|
||||||
|
self.cursor.execute(f"SELECT * FROM `{group_id}` WHERE `user_id` = ?", (user_id,))
|
||||||
|
if var_id == 1:
|
||||||
|
return self.cursor.execute(f"UPDATE `{group_id}` SET `mes` = ? WHERE `user_id` = ?",
|
||||||
|
((self.cursor.fetchone()[1] + 1), user_id))
|
||||||
|
elif var_id == 2:
|
||||||
|
return self.cursor.execute(f"UPDATE `{group_id}` SET `rep` = ? WHERE `user_id` = ?",
|
||||||
|
((self.cursor.fetchone()[2] + 1), user_id))
|
||||||
|
elif var_id == 3:
|
||||||
|
return self.cursor.execute(f"UPDATE `{group_id}` SET `com` = ? WHERE `user_id` = ?",
|
||||||
|
((self.cursor.fetchone()[3] + 1), user_id))
|
||||||
|
elif var_id == 4:
|
||||||
|
return self.cursor.execute(f"UPDATE `{group_id}` SET `url` = ? WHERE `user_id` = ?",
|
||||||
|
((self.cursor.fetchone()[4] + 1), user_id))
|
||||||
|
elif var_id == 5:
|
||||||
|
return self.cursor.execute(f"UPDATE `{group_id}` SET `med` = ? WHERE `user_id` = ?",
|
||||||
|
((self.cursor.fetchone()[5] + 1), user_id))
|
||||||
|
elif var_id == 6:
|
||||||
|
return self.cursor.execute(f"UPDATE `{group_id}` SET `sti` = ? WHERE `user_id` = ?",
|
||||||
|
((self.cursor.fetchone()[6] + 1), user_id))
|
||||||
|
elif var_id == 7:
|
||||||
|
return self.cursor.execute(f"UPDATE `{group_id}` SET `voi` = ? WHERE `user_id` = ?",
|
||||||
|
((self.cursor.fetchone()[7] + 1), user_id))
|
||||||
|
except Exception as e:
|
||||||
|
print(repr(e))
|
||||||
|
|
||||||
|
def created_group(self, group_id):
|
||||||
|
"""Создаём новую таблицу"""
|
||||||
|
with self.connection:
|
||||||
|
return self.cursor.execute(f"""CREATE TABLE IF NOT EXISTS [{group_id}] (
|
||||||
|
user_id INTEGER NOT NULL,
|
||||||
|
mes INTEGER,
|
||||||
|
rep INTEGER,
|
||||||
|
com INTEGER,
|
||||||
|
url INTEGER,
|
||||||
|
med INTEGER,
|
||||||
|
sti INTEGER,
|
||||||
|
voi INTEGER);""")
|
||||||
|
|
||||||
|
def add_user(self, group_id, user_id):
|
||||||
|
"""Добавляем нового пользователя"""
|
||||||
|
with self.connection:
|
||||||
|
return self.cursor.execute(f"INSERT INTO `{group_id}` (`user_id`, `mes`, `rep`, `com`, `url`, `med`, "
|
||||||
|
f"`sti`, `voi`) VALUES(?,?,?,?,?,?,?,?)", (user_id, 0, 0, 0, 0, 0, 0, 0))
|
||||||
|
|
||||||
|
def all_ids(self, group_id):
|
||||||
|
"""Список айди"""
|
||||||
|
with self.connection:
|
||||||
|
return self.cursor.execute(f'SELECT `user_id` FROM `{group_id}`').fetchall()
|
||||||
|
|
||||||
|
def user_exists(self, user_id, group_id):
|
||||||
|
"""Проверяем, есть ли уже пользователь в базе"""
|
||||||
|
with self.connection:
|
||||||
|
result = self.cursor.execute(f'SELECT * FROM `{group_id}` WHERE `user_id` = ?', (user_id,)).fetchall()
|
||||||
|
return bool(len(result))
|
||||||
|
|
||||||
|
def stat_user(self, user_id, group_id):
|
||||||
|
"""Получение данных пользователя"""
|
||||||
|
with self.connection:
|
||||||
|
self.cursor.execute(f"SELECT * FROM `{group_id}` WHERE `user_id` = ?", (user_id,))
|
||||||
|
data = self.cursor.fetchone()
|
||||||
|
return data[1:]
|
||||||
|
|
||||||
|
def del_user(self, group_id, user_id):
|
||||||
|
"""Удаление пользователя"""
|
||||||
|
with self.connection:
|
||||||
|
return self.cursor.execute(f'DELETE FROM `{group_id}` WHERE `user_id` = ?', (user_id,))
|
||||||
|
|
||||||
|
# ЗАКРЫТИЕ ВЫЗОВА
|
||||||
|
def close(self):
|
||||||
|
"""Закрываем соединение с БД"""
|
||||||
|
self.connection.close()
|
||||||
BIN
db/base.db
Normal file
BIN
db/base.db
Normal file
Binary file not shown.
0
db/groups.db
Normal file
0
db/groups.db
Normal file
0
db/month.db
Normal file
0
db/month.db
Normal file
BIN
db/users.db
Normal file
BIN
db/users.db
Normal file
Binary file not shown.
Loading…
Add table
Reference in a new issue