first one

This commit is contained in:
2023-06-05 16:31:04 +03:00
commit e25080d054
11 changed files with 165 additions and 0 deletions

69
bot/app/bot.py Normal file
View File

@ -0,0 +1,69 @@
# Telebot imports
from telebot.async_telebot import AsyncTeleBot
from telebot.asyncio_storage import StateMemoryStorage, StatePickleStorage
from telebot.asyncio_handler_backends import State, StatesGroup
from telebot.asyncio_filters import StateFilter
from telebot import types
from telebot.callback_data import CallbackData, CallbackDataFilter
from telebot.types import Message
# Async things imports
import asyncio
# Other modules imports
import sqlite3
import json
from datetime import datetime
import math
import socket
import os
# Local imports
from config import token, admins
import textbook
import keyboards
# DB
from db.base import Session, engine, Base
from db.models import User
# from db.engine import Database
# from sqlalchemy import select
bot = AsyncTeleBot(token, state_storage=StatePickleStorage())
class States(StatesGroup):
default = State()
@bot.message_handler(commands=["start"])
async def start(msg: Message):
user = session.query(User).filter_by(id=msg.from_user.id).first()
if user:
await bot.send_message(chat_id=msg.chat.id, text="Вы зарегистрированы!")
else:
await bot.send_message(chat_id=msg.chat.id, text="Привет, новый пользователь, регистрирую тебя..")
new_user = User(id=msg.from_user.id, name=msg.from_user.first_name, username=msg.from_user.username)
session.add(new_user)
session.commit()
await bot.send_message(chat_id=msg.chat.id, text="Регистрация прошла успешно, добро пожаловать!")
print(session.query(User).all(), flush=True)
# if msg.chat.type in ("group", "supergroup"):
# await bot.send_message(chat_id=msg.chat.id, text=textbook.start_group)
# else:
# await bot.send_message(chat_id=msg.chat.id, text=textbook.start)
async def main():
a = asyncio.create_task(bot.polling(non_stop=True))
await a
if __name__ == "__main__":
print("Bot started", flush=True)
# db = Database()
Base.metadata.create_all(engine)
session = Session()
bot.add_custom_filter(StateFilter(bot))
bot.enable_saving_states(filename="./.state-save/states.pkl")
asyncio.run(main())

8
bot/app/db/base.py Normal file
View File

@ -0,0 +1,8 @@
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
engine = create_engine("postgresql+psycopg2://user:password@postgres:5432/db")
Session = sessionmaker(bind=engine)
Base = declarative_base()

17
bot/app/db/engine.py Normal file
View File

@ -0,0 +1,17 @@
from sqlalchemy import create_engine, MetaData
from db.settings import Settings
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
class Database:
def __init__(self):
self.engine = create_engine("postgresql+psycopg2://user:password@postgres:5432/db")
self.meta = MetaData()
self.engine.connect()
self.meta.create_all(bind=self.engine)
self._Session = sessionmaker(bind=self.engine)
self.base = declarative_base()
def session(self):
return self._Session

21
bot/app/db/models.py Normal file
View File

@ -0,0 +1,21 @@
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, BigInteger, Uuid
from sqlalchemy.orm import relationship
import uuid
from db.base import Base
class User(Base):
__tablename__ = "user"
id = Column(BigInteger, primary_key=True)
name = Column(String)
username = Column(String)
#
#
# class Queue(Base):
# __tablename__ = "queue"
#
# id = Column(Uuid, primary_key=True, default=uuid.uuid4())
# owner = relationship(User)

15
bot/app/db/settings.py Normal file
View File

@ -0,0 +1,15 @@
from dataclasses import dataclass
@dataclass
class Settings:
dialect: str = "postgresql"
driver: str = "psycopg2"
user: str = "user"
password: str = "password"
db_name: str = "db"
host: str = "postgres"
port: int = 5432
@property
def uri(self):
return f"{self.dialect}+{self.driver}://{self.user}:{self.password}@{self.host}:{self.port}/{self.db_name}"

0
bot/app/keyboards.py Normal file
View File

3
bot/app/textbook.py Normal file
View File

@ -0,0 +1,3 @@
start = "Привет! Я помогу тебе вести очередность людей! Это бывает очень полезно для сдачи работ, к примеру, когда люди договариваются в разных чатах, а ближе к сдаче получается путаница. Ты можешь создавать очереди, отправлять ссылки на вступление, менять очередноcть, создавать очереди в групповых чатах и т.д.!"
start_group = "Привет, я QUEUEBOT 2.0, помогаю создавать очереди в твоих групповых чатах без регистрации и смс!\n\nЧтобы пользоваться мной в этом чате, пользователь с правами админа должен настроить меня, комманда /settings, также не забудь выдать мне права администратора, чтобы я мог видеть список участников этой группы!"
menu = "Главное меню"