Compare commits

...

11 Commits

Author SHA1 Message Date
Administrator
d40dd2c81d Merge branch 'master' of http://gitlab.sprinthub.ru/self/ruz-bot 2024-10-03 00:36:04 +03:00
Administrator
39e02f3759 fix 2024-10-03 00:35:39 +03:00
c1ffaca96b Update deploy-prod.yaml 2024-03-24 14:35:03 +00:00
Administrator
0e07ebdc61 bot enabled exp 2024-02-18 00:48:29 +03:00
Administrator
86a3b891f1 daemon true 2024-02-17 01:33:20 +03:00
Administrator
f63ce9ee90 no daemon 2024-02-17 01:26:36 +03:00
Administrator
2ebba22478 thread 2024-02-17 01:24:45 +03:00
Administrator
7ce43cf4b6 kill thread 2024-02-17 01:16:51 +03:00
Administrator
50d9d1c953 Merge branch 'master' of http://gitlab.sprinthub.ru/self/ruz-bot 2024-02-17 01:10:20 +03:00
Administrator
ea6f5e2ca4 fix staff 2024-02-17 01:09:30 +03:00
70d2f4ce52 alice 2024-02-12 22:01:56 +03:00
6 changed files with 53 additions and 29 deletions

View File

@ -19,7 +19,7 @@ services:
condition: any
placement:
constraints:
# - node.role == worker
- node.role == worker
- node.labels.zone == ru
update_config:
parallelism: 1
@ -41,7 +41,7 @@ services:
condition: any
placement:
constraints:
# - node.role == worker
- node.role == worker
- node.labels.zone == ru
update_config:
parallelism: 1
@ -63,7 +63,7 @@ services:
condition: any
placement:
constraints:
# - node.role == worker
- node.role == worker
- node.labels.zone == ru
update_config:
parallelism: 1
@ -87,7 +87,7 @@ services:
condition: any
placement:
constraints:
# - node.role == worker
- node.role == worker
- node.labels.zone == ru
update_config:
parallelism: 1

View File

@ -3,9 +3,7 @@ import os
import telebot
from telebot.types import Message
import settings
from helpers.mongo import mongo
from helpers.sprint_platform import platform
bot = telebot.TeleBot(os.getenv("TELEGRAM_TOKEN"))
@ -18,7 +16,5 @@ def on_start(message: Message):
@bot.message_handler()
def do_action(message: Message):
if settings.STAGE == 'development' and not platform.is_staff(telegram_id=message.chat.id):
return
from helpers.answer import Answer
Answer(message).process()

View File

@ -1,4 +1,5 @@
import datetime
import logging
from random import choice
from telebot.types import Message, ReplyKeyboardRemove
@ -13,6 +14,15 @@ from helpers.sprint_platform import platform
from helpers.ruz import ruz
class User:
def __init__(self, telegram_id):
self.telegram_id = telegram_id
@property
def platform_staff(self):
return platform.is_staff(telegram_id=self.telegram_id)
class Answer:
user: dict
@ -20,7 +30,6 @@ class Answer:
message_text: str
def __init__(self, message: Message):
self.message = message
self.message = message
self.message_text = message.text or message.caption or ""
user = mongo.users_collection.find_one({"chat_id": message.chat.id})
@ -43,6 +52,14 @@ class Answer:
self.user = user
def process(self):
user = User(self.user['chat_id'])
try:
bot_enabled_exp = platform.get_experiment('bot_enabled')
if not bot_enabled_exp['enabled'] or not eval(bot_enabled_exp['condition']):
return
except Exception as exc:
logging.info(exc)
return
getattr(
self,
"handle_state_" + self.user['state'],
@ -145,6 +162,21 @@ class Answer:
self.set_state("reset")
return
elif self.message_text == "Подключение Алисы":
alice_exp = platform.get_experiment('alice')
telegram_id = self.user['chat_id']
try:
user = User(telegram_id)
alice_exp_enabled = alice_exp['enabled'] and eval(alice_exp['condition'])
except Exception as exc:
logging.info(exc)
alice_exp_enabled = False
if not alice_exp_enabled:
self.send_message(
'Эта функция еще не работает!',
reply_markup=main_keyboard(self.user['chat_id']),
parse_mode='Markdown'
)
return
if self.user.get('yandex_id', None) is None:
words = platform.get_config('words')
while True:

View File

@ -13,12 +13,7 @@ def main_keyboard(telegram_id):
kb.row("Ежедневные уведомления")
alice_exp = platform.get_experiment('alice')
try:
class User:
def __init__(self, telegram_id):
self.telegram_id = telegram_id
@property
def platform_staff(self):
return platform.is_staff(telegram_id=self.telegram_id)
from helpers.answer import User
user = User(telegram_id)
alice_exp_enabled = alice_exp['enabled'] and eval(alice_exp['condition'])
except Exception as exc:

View File

@ -39,7 +39,7 @@ class RUZ:
del data['stream_links']
def get_schedule(self, user: dict, begin_date: datetime.datetime):
start_date_str = begin_date.strftime("%Y.%m.%d")
start_date_str = begin_date.strftime("%Y-%m-%d")
search_str = settings.RUZ_API + f"v3/ruz/lessons?start={start_date_str}&offset=30&email={user['email']}"
try:
data = get(search_str)

View File

@ -22,6 +22,7 @@ class PlatformClient:
self.fetch_url = urllib.parse.urljoin(self.endpoint, 'fetch')
self.config_storage = {}
self.experiment_storage = {}
self.staff_storage = {}
self.poll_data()
if need_poll:
self.poll_data_in_thread()
@ -32,7 +33,7 @@ class PlatformClient:
sleep(30)
self.fetch()
Thread(target=inner).start()
Thread(target=inner, daemon=True).start()
def poll_data(self):
self.fetch(with_exception=True)
@ -63,6 +64,10 @@ class PlatformClient:
local_platform = json.loads(open('local_platform.json', 'r').read())
self.config_storage = local_platform['configs']
self.experiment_storage = local_platform['experiments']
self.staff_storage = {
key: set(value)
for key, value in local_platform['platform_staff'].items()
}
return
response_data = self.request_with_retries(self.fetch_url, {
'project': self.app_name,
@ -70,6 +75,10 @@ class PlatformClient:
}, with_exception)
self.config_storage = response_data['configs']
self.experiment_storage = response_data['experiments']
self.staff_storage = {
key: set(value)
for key, value in response_data['platform_staff'].items()
}
def fetch_configs(self, with_exception=False):
if self.stage == 'local':
@ -98,18 +107,10 @@ class PlatformClient:
self.experiment_storage[experiment] = response_data
def is_staff(self, **kwargs):
if self.stage == 'local':
local_platform = json.loads(open('local_platform.json', 'r').read())
local_staff = local_platform['staff']
for element in local_staff:
for key, value in kwargs.items():
if element[key] == value:
return True
return False
response_data = self.request_with_retries(self.staff_url, kwargs)
if response_data is None:
return False
return response_data['is_staff']
for key, value in kwargs.items():
if value in self.staff_storage[key]:
return True
return False
def get_config(self, name):
return self.config_storage[name]