changed mongoDb collection structure, removed group entity & repository, updated README.md, changed folder names to singular forms

This commit is contained in:
miloszowi
2021-09-25 16:49:11 +02:00
parent baa8a78cad
commit cd8e3507ca
27 changed files with 347 additions and 393 deletions

24
src/handler/abstractHandler.py Executable file
View File

@@ -0,0 +1,24 @@
from abc import abstractmethod
from telegram.ext.callbackcontext import CallbackContext
from telegram.ext.handler import Handler
from telegram.update import Update
from handler.vo.updateData import UpdateData
class AbstractHandler:
def __init__(self) -> None:
pass
@abstractmethod
def getBotHandler(self) -> Handler: raise Exception('getBotHandler method is not implemented')
@abstractmethod
def handle(self, update: Update, context: CallbackContext) -> None: raise Exception('handle method is not implemented')
def getUpdateData(self, update: Update) -> UpdateData:
return UpdateData.createFromUpdate(update)
def reply(self, update: Update, message: str) -> None:
update.effective_message.reply_markdown_v2(text=message)

38
src/handler/inHandler.py Executable file
View File

@@ -0,0 +1,38 @@
from config.contents import opted_in, opted_in_failed
from exception.notFoundException import NotFoundException
from repository.userRepository import UserRepository
from telegram.ext.callbackcontext import CallbackContext
from telegram.ext.commandhandler import CommandHandler
from telegram.update import Update
from handler.abstractHandler import AbstractHandler
class InHandler(AbstractHandler):
botHandler: CommandHandler
userRepository: UserRepository
def __init__(self) -> None:
self.botHandler = CommandHandler('in', self.handle)
self.userRepository = UserRepository()
def handle(self, update: Update, context: CallbackContext) -> None:
updateData = self.getUpdateData(update)
try:
user = self.userRepository.getById(updateData.getUserId())
if user.isInChat(updateData.getChatId()):
self.reply(update, opted_in_failed)
return
user.addToChat(updateData.getChatId())
self.userRepository.save(user)
except NotFoundException:
self.userRepository.saveByUpdateData(updateData)
self.reply(update, opted_in)
def getBotHandler(self) -> CommandHandler:
return self.botHandler

40
src/handler/mentionHandler.py Executable file
View File

@@ -0,0 +1,40 @@
from typing import Iterable
from config.contents import mention_failed
from entity.user import User
from repository.userRepository import UserRepository
from telegram.ext.callbackcontext import CallbackContext
from telegram.ext.commandhandler import CommandHandler
from telegram.update import Update
from handler.abstractHandler import AbstractHandler
class MentionHandler(AbstractHandler):
botHandler: CommandHandler
userRepository: UserRepository
def __init__(self) -> None:
self.botHandler = CommandHandler('everyone', self.handle)
self.userRepository = UserRepository()
def handle(self, update: Update, context: CallbackContext) -> None:
updateData = self.getUpdateData(update)
users = self.userRepository.getAllForChat(updateData.getChatId())
if users:
self.reply(update, self.buildMentionMessage(users))
return
self.reply(update, mention_failed)
def getBotHandler(self) -> CommandHandler:
return self.botHandler
def buildMentionMessage(self, users: Iterable[User]) -> str:
result = ''
for user in users:
result += f'*[{user.getUsername()}](tg://user?id={user.getUserId()})* '
return result

36
src/handler/outHandler.py Executable file
View File

@@ -0,0 +1,36 @@
from config.contents import opted_off, opted_off_failed
from exception.notFoundException import NotFoundException
from repository.userRepository import UserRepository
from telegram.ext.callbackcontext import CallbackContext
from telegram.ext.commandhandler import CommandHandler
from telegram.update import Update
from handler.abstractHandler import AbstractHandler
class OutHandler(AbstractHandler):
botHandler: CommandHandler
userRepository: UserRepository
def __init__(self) -> None:
self.botHandler = CommandHandler('out', self.handle)
self.userRepository = UserRepository()
def handle(self, update: Update, context: CallbackContext) -> None:
updateData = self.getUpdateData(update)
try:
user = self.userRepository.getById(updateData.getUserId())
if not user.isInChat(updateData.getChatId()):
raise NotFoundException()
except NotFoundException:
self.reply(update, opted_off_failed)
return
user.removeFromChat(updateData.getChatId())
self.userRepository.save(user)
self.reply(update, opted_off)
def getBotHandler(self) -> CommandHandler:
return self.botHandler

View File

@@ -0,0 +1,36 @@
from __future__ import annotations
import names
from telegram.update import Update
class UpdateData():
userId: str
chatId: str
username: str
def __init__(self, userId: str, chatId: str, username: str) -> None:
self.userId = userId
self.chatId = chatId
self.username = username
def getUserId(self) -> str:
return self.userId
def getChatId(self) -> str:
return self.chatId
def getUsername(self) -> str:
return self.username
@staticmethod
def createFromUpdate(update: Update) -> UpdateData:
userId = str(update.effective_user.id)
chatId = str(update.effective_chat.id)
chatId = "-284685928"
username = update.effective_user.username or update.effective_user.first_name
if not username:
username = names.get_first_name()
return UpdateData(userId, chatId, username)