Compare commits

...

4 Commits

Author SHA1 Message Date
3a28cbb080 Update '.drone.yml'
All checks were successful
continuous-integration/drone/push Build is passing
2023-06-19 08:57:59 -04:00
da06b5ad23 minor fixes and PEP8'ification
All checks were successful
continuous-integration/drone/push Build is passing
2023-06-19 19:24:40 +10:00
6169e6e32a minor fixes and PEP8'ification
All checks were successful
continuous-integration/drone/push Build is passing
2023-06-19 17:33:06 +10:00
61075491ec added statistics
All checks were successful
continuous-integration/drone/push Build is passing
2023-06-19 17:09:04 +10:00
4 changed files with 106 additions and 84 deletions

View File

@@ -20,6 +20,12 @@ steps:
- cd /usr/share/$DRONE_REPO_NAME - cd /usr/share/$DRONE_REPO_NAME
- git pull - git pull
- chown -R jack:jack . - chown -R jack:jack .
when:
branch:
- main
- name: restart systemd unit - name: restart systemd unit
commands: commands:
- systemctl restart jack_bot - systemctl restart jack_bot
when:
branch:
- main

View File

@@ -1,16 +1,42 @@
from aiogram import types, Dispatcher 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 create_bot import bot, dp
from sqdb import user, session from sqdb import user, session, DickRequest
import random import random
import traceback
from random import randint from random import randint
import datetime import datetime
from dicktxt import ForReadDict from dicktxt import ForReadDict
size_change = None
dick_plus = None
dick_minus = None
def top_dick_message(delimiter, top_list):
message = f'🏆Топ 10 бубылд чата🏆\n\n'
f'🚀 {delimiter.join(map(str, top_list[0]))}\n'
f'💫 {delimiter.join(map(str, top_list[1]))}\n'
f'🍆 {delimiter.join(map(str, top_list[2]))}\n'
f'🍌 {delimiter.join(map(str, top_list[3]))}\n'
f'🐍 {delimiter.join(map(str, top_list[4]))}\n'
f'🐎 {delimiter.join(map(str, top_list[5]))}\n'
f'🌭 {delimiter.join(map(str, top_list[6]))}\n'
f'🌶 {delimiter.join(map(str, top_list[7]))}\n'
f'👌 {delimiter.join(map(str, top_list[8]))}\n'
f'💩 {delimiter.join(map(str, top_list[9]))}\n'
return message
@dp.message_handler(commands=["maintainance"])
async def stop_for_maintenance(message: types.Message): # остановить бота
if message.from_user.id == 226765676:
close_all_sessions() # TODO Вспомнить, как это, блять, делается.
@dp.message_handler(commands=["dick"]) @dp.message_handler(commands=["dick"])
async def up_dick(message: types.Message): async def up_dick(message: types.Message): # рандомайзер
# рандомайзер
numb = randint(-6, 10) numb = randint(-6, 10)
global size_change, dick_plus, dick_minus global size_change, dick_plus, dick_minus
dick_plus = ('<b>вырос</b>', '<b>подрос</b>', '<b>привстал</b>') dick_plus = ('<b>вырос</b>', '<b>подрос</b>', '<b>привстал</b>')
@@ -18,25 +44,27 @@ async def up_dick(message: types.Message):
if numb > 0: if numb > 0:
size_change = random.choice(dick_plus) + '🚀' size_change = random.choice(dick_plus) + '🚀'
# if numb = 0 size_change = random.choice(const) TODO # if numb = 0 size_change = random.choice(const) TODO
else: size_change = random.choice(dick_minus) + '' else:
size_change = random.choice(dick_minus) + ''
# работа с таблицей # работа с таблицей
try: try:
dick_request = DickRequest(size_change=numb, date_changed=datetime.datetime.now())
b = session.query(user).filter(user.user_id == message.from_user.id).first() b = session.query(user).filter(user.user_id == message.from_user.id).first()
if b: if b:
last_time = b.datetimes last_time = b.date_updated
now_time = datetime.datetime.now() now_time = datetime.datetime.now()
diff = now_time.day - last_time.day diff = now_time.day - last_time.day
if abs(diff) <= 0: if abs(diff) <= 0:
try: try:
current_dick = b.dick_size current_dick = b.dick_size
await bot.send_message(message.chat.id, f'@{message.from_user.username},'
f'🚫 вы уже крутили пипису, '
await bot.send_message(message.chat.id, f'@{message.from_user.username},🚫 вы уже крутили пипису, ее размер <b>{current_dick}</b> см! ') f'ее размер <b>{current_dick}</b> см! ')
except: except Exception as e:
print('ошибка в if diff <=0') print('ошибка в if diff <=0 ' + "\n".join(traceback.format_tb(e.__traceback__)))
session.rollback() session.rollback()
finally: finally:
session.close_all() session.close_all()
@@ -44,49 +72,59 @@ async def up_dick(message: types.Message):
else: else:
try: try:
a = session.query(user).filter(user.user_id == message.from_user.id).first() # запрос на поиск в таблице usr = session.query(user)
updetedDick = a.dick_size = (a.dick_size + numb) a = usr.filter(user.user_id == message.from_user.id).first() # запрос на поиск в таблице
a.datetimes = datetime.datetime.now() updated_dick = a.dick_size = (a.dick_size + numb)
dick_request.user = a
a.date_updated = datetime.datetime.now()
session.add(dick_request)
session.flush() session.flush()
session.commit() # обновляет запись session.commit() # обновляет запись
randomword = ForReadDict.RandomDick() randomword = ForReadDict.RandomDick()
await bot.send_message(message.chat.id, f'@{message.from_user.username}, ваш <em>{randomword}</em> {size_change}\ await bot.send_message(message.chat.id, f'@{message.from_user.username}, '
на <b>{abs(numb)}</b> см!\n\ f'ваш <em>{randomword}</em> {size_change}'
Теперь он равен <b>{updetedDick}</b> см! ') f'на <b>{abs(numb)}</b> см!\n'
except: f'Теперь он равен <b>{updated_dick}</b> см! ')
except Exception as e:
session.rollback() session.rollback()
print('ошибка в обновлении пиписы') print('ошибка в обновлении пиписы, трейсбек-бек-бек: ' +
"\n".join(traceback.format_tb(e.__traceback__)))
finally: finally:
session.close_all() session.close_all()
print('пиписа обновлена') print('пиписа обновлена')
else: else:
session.close() session.close()
try: try:
int_table = user(user_id = message.from_user.id, user_fullname = message.from_user.full_name, dick_size = numb, datetimes = datetime.datetime.now(),\ int_table = user(user_id=message.from_user.id,
user_fullname=message.from_user.full_name,
dick_size=numb,
date_updated=datetime.datetime.now(),
date_created=datetime.datetime.now(),
chat_id=message.chat.id) chat_id=message.chat.id)
dick_request.user = int_table
session.add(int_table) session.add(int_table)
session.add(dick_request)
session.flush() session.flush()
session.commit() session.commit()
session.close() session.close()
await bot.send_message(message.chat.id, f'@{message.from_user.username}, '
await bot.send_message(message.chat.id, f'@{message.from_user.username}, ваш писюн {size_change}\n\ f'ваш писюн {size_change}\n'
на <b>{abs(numb)}</b> см!\n\ f'на <b>{abs(numb)}</b> см!\n'
Теперь он равен <b>{numb}</b> см!') f'Теперь он равен <b>{numb}</b> см!')
except: except Exception as e:
print('ошибка в добавлении нового пользователя') print('ошибка в добавлении нового пользователя, трейсбек: ' +
'\n'.join(traceback.format_tb(e.__traceback__)))
session.rollback() session.rollback()
finally: finally:
session.close_all() session.close_all()
print('Успешно добавлен пользователь') print('Успешно добавлен пользователь')
except: except Exception as e:
session.rollback() session.rollback()
print('ошибка в основном коде') print('ошибка в основном коде, трейсбек:' + '\n'.join(traceback.format_tb(e.__traceback__)))
finally: finally:
session.close_all() session.close_all()
@@ -95,6 +133,7 @@ async def up_dick(message: types.Message):
async def send_topchat(message: types.Message): async def send_topchat(message: types.Message):
try: try:
changechat_id = session.query(user).filter(user.user_id == message.from_user.id).first() changechat_id = session.query(user).filter(user.user_id == message.from_user.id).first()
delimiter = ': '
chats = message.chat.id chats = message.chat.id
if changechat_id.chat_id != chats: if changechat_id.chat_id != chats:
changechat_id.chat_id = chats changechat_id.chat_id = chats
@@ -102,50 +141,29 @@ async def send_topchat(message: types.Message):
session.close() session.close()
else: else:
session.close() 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() users = session.query(user.user_fullname, user.dick_size).order_by(user.dick_size.desc())
delimiter = ': ' top = users.filter(user.chat_id == chats).limit(10).all()
# проверка на длину списка, если меньше limit, то: # проверка на длину списка, если меньше limit, то:
sizelen = len(top) size_len = len(top)
if sizelen < 10: if size_len < 10:
lenminus = 10 - sizelen len_minus = 10 - size_len
top.extend(('-'*lenminus)) top.extend(('-'*len_minus))
await bot.send_message(message.chat.id, f'🏆Топ 10 бубылд чата🏆\n\n\ await bot.send_message(message.chat.id, top_dick_message(delimiter, top))
🚀 {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() session.close()
# если все нормально и участников минимум 10 # если все нормально и участников минимум 10
else: else:
await bot.send_message(message.chat.id, f'🏆Топ 10 бубылд чата🏆\n\n\ await bot.send_message(message.chat.id, top_dick_message(delimiter, top))
🚀 {delimiter.join(map(str, top[0]))}\n\ except Exception as e:
💫 {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() session.rollback()
print('ошибка в /topdick') print('ошибка в /topdick. Трейсбэк:\n' + '\n'.join(traceback.format_tb(e.__traceback__)))
finally: finally:
session.close_all() session.close_all()
@dp.message_handler(commands=["globaldick"]) @dp.message_handler(commands=["globaldick"])
async def send_global_top(message: types.Message): async def send_global_top(message: types.Message):
try: try:
@@ -153,21 +171,10 @@ async def send_global_top(message: types.Message):
delimiter = ': ' delimiter = ': '
await bot.send_message(message.chat.id, top_dick_message(delimiter, top_chat))
await bot.send_message(message.chat.id, f'🏆Топ 10 пипис в мире🏆\n\n\ except Exception as e:
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() session.rollback()
print('ошибка в /glovaldick') print('ошибка в /globaldick, трейсбэк:\n' + '\n'.join(traceback.format_tb(e.__traceback__)))
finally: finally:
session.close_all() session.close_all()
@@ -176,4 +183,3 @@ async def send_global_top(message: types.Message):
# dp.register_message_handler(up_dick) # dp.register_message_handler(up_dick)
# dp.register_message_handler(send_topchat) # dp.register_message_handler(send_topchat)
# dp.register_message_handler(send_global_top) # dp.register_message_handler(send_global_top)

14
sqdb.py
View File

@@ -1,7 +1,7 @@
from sqlalchemy import create_engine, MetaData, Table, Integer, String, BIGINT, \ from sqlalchemy import create_engine, MetaData, Table, Integer, String, BIGINT, \
Column, DateTime, ForeignKey, Numeric Column, DateTime, ForeignKey, Numeric
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy import select, update from sqlalchemy import select, update
engine = create_engine('postgresql+psycopg2://postgres:postgres@postgres.vdk2ch.ru:5432/jack_bot', echo=True) engine = create_engine('postgresql+psycopg2://postgres:postgres@postgres.vdk2ch.ru:5432/jack_bot', echo=True)
@@ -19,12 +19,22 @@ class user(Base):
id = Column(Integer, primary_key=True) id = Column(Integer, primary_key=True)
user_id = Column(Integer) user_id = Column(Integer)
date_created = (Column(DateTime))
user_fullname = Column(String) user_fullname = Column(String)
dick_size = (Column(Integer)) dick_size = (Column(Integer))
datetimes = (Column(DateTime)) date_updated = (Column(DateTime))
chat_id = Column(BIGINT) chat_id = Column(BIGINT)
dick_requests = relationship("DickRequest", back_populates="user")
class DickRequest(Base):
__tablename__ = 'dick_requests'
id = Column(Integer, primary_key=True)
size_change = Column(Integer)
user_id = Column(Integer, ForeignKey("users.user_id"))
user = relationship("User", back_populates="dick_requests")
date_changed = (Column(DateTime))