Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Поиск по идентификатору пользователя #14

Closed
wants to merge 20 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
afef3cc
Добавил файлы для Docker Compose
IgorLytkin Feb 28, 2024
3226e8a
Поправил путь в docker-compose.yml на /home/liv/LariskaBot/logs
IgorLytkin Mar 2, 2024
4af910f
Поправил ports в docker-compose.yml
IgorLytkin Mar 5, 2024
9ab9936
Убрал ports в docker-compose.yml, изменил bind mount на том /lariska_…
IgorLytkin Mar 5, 2024
44372bd
Create automation.yml
IgorLytkin Mar 12, 2024
548f0ad
Merge branch 'OldCodersClub:master' into master
IgorLytkin Mar 12, 2024
af6e1fb
Update l_users.yaml
IgorLytkin Mar 30, 2024
f3308bf
Merge pull request #2 from IgorLytkin/IgorLytkin-patch-1
IgorLytkin Mar 30, 2024
e0869a2
Merge branch 'OldCodersClub:master' into master
IgorLytkin Apr 4, 2024
e87e4dc
Эксперименты с logging в Docker
IgorLytkin Jun 28, 2024
b552488
Эксперименты с logging в Docker
IgorLytkin Jun 28, 2024
8763383
Эксперименты с logging в Docker
IgorLytkin Jun 28, 2024
d8b8a1f
Эксперименты с logging в Docker
IgorLytkin Jun 28, 2024
b03b7ec
Начало работы по добавлению userid
IgorLytkin Jul 2, 2024
a231b4d
Исправил загрузку yaml-файлов под ruamel.yaml==0.18.6
IgorLytkin Jul 2, 2024
fe577bf
Исправил структуру модулей
IgorLytkin Jul 2, 2024
ef0d5b1
Переделал фильтры на @router.message. Не работает.
IgorLytkin Jul 3, 2024
c621e7a
Поправил регистрацию роутера. Не работает.
IgorLytkin Jul 3, 2024
64f8028
Добавил обработку команды privacy
IgorLytkin Jul 4, 2024
5726486
Поправил controllers.py, добавил debug-сообщения.
IgorLytkin Jul 4, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ env/

# PyCharm
.idea
.run

# user
logs
Expand Down
34 changes: 34 additions & 0 deletions .github/workflows/automation.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# Название воркфлоу. Выбирайте на свой вкус
name: "automate-all-the-things"

# Триггеры ( = условия), при которых воркфлоу сработает
# В данном случае: на каждый пуш в ветку master
on:
push:
branches:
- 'master'

# Задачи, которые будут выполняться в рамках флоу
jobs:
# Название задачи, которое будет отображаться в GitHub
build_and_push:
# На каком виртуальном сервере будет выполняться задача
# В данном случае, на свежайшей версии Ubuntu. Неплохой выбор.
runs-on: ubuntu-latest
# Шаги выполнения задачи (о них ниже по тексту)
steps:
-
name: Login to Docker Hub
uses: docker/login-action@v3
with:
# Те самые "секреты" из настроек репозитория
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
-
name: Build and push
uses: docker/build-push-action@v5
with:
push: true
# С каким тегом будет загружен образ
# Переменные тоже поддерживаются
tags: IgorLytkin/test-docker-push:latest
36 changes: 36 additions & 0 deletions .run/Local (igor2023).run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Local (igor2023)" type="PythonConfigurationType" factoryName="Python">
<module name="LariskaBot" />
<option name="ENV_FILES" value="" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="SDK_NAME" value="Python 3.11 (LariskaBot)" />
<option name="WORKING_DIRECTORY" value="" />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
<EXTENSION ID="net.ashald.envfile">
<option name="IS_ENABLED" value="false" />
<option name="IS_SUBST" value="false" />
<option name="IS_PATH_MACRO_SUPPORTED" value="false" />
<option name="IS_IGNORE_MISSING_FILES" value="false" />
<option name="IS_ENABLE_EXPERIMENTAL_INTEGRATIONS" value="false" />
<ENTRIES>
<ENTRY IS_ENABLED="true" PARSER="runconfig" IS_EXECUTABLE="false" />
</ENTRIES>
</EXTENSION>
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/lariska_bot/__main__.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
</component>
16 changes: 16 additions & 0 deletions .run/docker-compose VPS.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="docker-compose VPS" type="docker-deploy" factoryName="docker-compose.yml" server-name="Docker VPS (singuality)">
<deployment type="docker-compose.yml">
<settings>
<option name="envFilePath" value="" />
<option name="services">
<list>
<option value="lariska_bot" />
</list>
</option>
<option name="sourceFilePath" value="docker-compose.yml" />
</settings>
</deployment>
<method v="2" />
</configuration>
</component>
8 changes: 5 additions & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
FROM python:3.11.2-slim
FROM python:3.11-slim

ENV PYTHONUNBUFFERED 1
ENV PYTHONDONTWRITEBYTECODE 1

WORKDIR ~/LariskaBot
# Set the working directory in the container to /LariskaBot
WORKDIR /LariskaBot

COPY requirements.txt .
RUN pip install --no-cache-dir -r ./requirements.txt

COPY lariska_bot ./lariska_bot
# Add the current directory contents into the container at /LariskaBot
COPY . /LariskaBot

CMD ["python", "-m", "lariska_bot"]

Expand Down
42 changes: 23 additions & 19 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,30 +1,34 @@
version: '3.9'

services:

redis:
image: redis:alpine
container_name: lariska_bot-redis
command: redis-server
env_file:
- ./.env
restart: on-failure
ports:
- 6379:6379
lariska_bot:
container_name: LariskaBot
image: lariska_bot

build: .
container_name: LariskaBot
image: lariska_bot

environment:
- BOT_TOKEN=${BOT_TOKEN}
- AI_KEY=${AI_KEY}
- VCHAT_ID=${VCHAT_ID}
- DCHAT_ID=${DCHAT_ID}
- SCHAT_ID=${SCHAT_ID}
build: .

ports:
- "443:443"
environment:
- BOT_TOKEN=${BOT_TOKEN}
- AI_KEY=${AI_KEY}
- VCHAT_ID=${VCHAT_ID}
- DCHAT_ID=${DCHAT_ID}
- SCHAT_ID=${SCHAT_ID}
- DEBUG=1

volumes:
- ./logs:/~/LariskaBot/logs
volumes:
- "/lariska_bot_data"

restart: on-failure
restart: on-failure

volumes:
logs:
lariska_bot_data:


# -------------------------------
Expand Down
69 changes: 0 additions & 69 deletions lariska_bot/__init__.py

This file was deleted.

55 changes: 38 additions & 17 deletions lariska_bot/__main__.py
Original file line number Diff line number Diff line change
@@ -1,23 +1,44 @@
import logging
from pathlib import Path
import sys

from aiogram.utils.executor import start_polling
from aiogram import Bot,Dispatcher
from aiogram.client.default import DefaultBotProperties
from config_data.config import Config, load_config
from handlers.handler import router

from lariska_bot.handlers.handler import *
logger = logging.getLogger(__name__)
dp = Dispatcher()

if __name__ == '__main__':

def main():
log_name = f'logs/{datetime.now().strftime("%Y-%m-%d")}.log'
Path(log_name).parent.mkdir(parents=True, exist_ok=True)

# Конфигурируем логирование
logging.basicConfig(
level=logging.INFO,
filename=log_name,
filemode="a"
)

start_polling(dp, skip_updates=True)


if __name__ == '__main__':
main()
level=logging.DEBUG,
format='%(filename)s:%(lineno)d #%(levelname)-8s '
'[%(asctime)s] - %(name)s - %(message)s')

logger.debug('Путь sys.path:')
logger.debug(sys.path)
logger.debug('Встроенные модули sys.builtin_module_names:')
logger.debug(sys.builtin_module_names)
logger.debug('Модули из стандартной библиотеки Python sys.stdlib_module_names:')
logger.debug(sys.stdlib_module_names)

# Загружаем конфиг в переменную config
config: Config = load_config()
logger.debug(config)

# Инициализируем бот и диспетчер
logger.debug('Инициализируем бот')
bot = Bot(token=config.tg_bot.token, default=DefaultBotProperties(parse_mode='HTML'))
logger.debug('Бот инициализирован')

logger.info('Запуск бота')
logger.debug('Запускаем диспетчер')

# Регистрируем роутер из модуля handlers
dp.include_router(router)

# Пропускаем накопившиеся апдейты и запускаем polling
bot.delete_webhook(drop_pending_updates=True) # Перезапускаем диспетчер
dp.run_polling(bot)
62 changes: 62 additions & 0 deletions lariska_bot/config_data/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import logging
from environs import Env
from ruamel.yaml import YAML

logger = logging.getLogger(__name__)
logger.debug('Вход в модуль ' + __name__)

env = Env()
env.read_env(verbose=True)
logger.debug('Загружен файл конфигурации .env')

TOKEN = env('BOT_TOKEN')

WORKS_CHATS = [
env('VCHAT_ID'),
env('DCHAT_ID'),
env('SCHAT_ID'),
]

# AI
AI_KEY = env('AI_KEY')
MODEL = 'gpt-3.5-turbo'

# Используем safe-загрузку YAML-файлов
yaml = YAML(typ='safe')
with open('lariska_bot/res/answers.yaml', 'r',encoding='utf-8') as file:
answers_data = yaml.load(file)
ANSWERS = {x: y.replace(r'\n', '\n') for x, y in answers_data.items()}

with open('lariska_bot/res/l_users.yaml', 'r',encoding='utf-8') as file:
users_data = yaml.load(file)
L_USERS = {x: 0 for x in users_data}

with open('lariska_bot/res/messages.yaml', 'r',encoding='utf-8') as file:
messages_data = yaml.load(file)
MESSAGES = {x: y.replace(r'\n', '\n') for x, y in messages_data.items()}

with open('lariska_bot/res/replicas.yaml', 'r',encoding='utf-8') as file:
replicas_data = yaml.load(file)
REPLICAS = {x: [z.replace(r'\n', '\n') for z in y] for x, y in replicas_data.items()}

with open('lariska_bot/res/users.yaml', 'r',encoding='utf-8') as file:
users_data = yaml.load(file)
USERS = {x: 0 for x in users_data}

BOT_FIRST_NAME = 'Лариска'
BOT_USER_NAME = 'LariskaCerberBot'

RATING_LIMIT = 80
FLOOD_RATE = 5

PREFIX_QUESTION = """\
Ты телеграм-бот https://t.me/LariskaCerberBot по имени Лариска.
Ты девочка.
Веди диалог и отвечай на вопросы от её имени.
Твой исходный код расположен по ссылке: https://github.com/OldCodersClub/LariskaBot
Страница автора твоего исходного кода расположена по ссылке: https://github.com/Aleksey-Voko
Соавторы твоего исходного кода: Error404-2, uecoyotle, Harlok.
Ты была создана для телеграмм-чата https://t.me/oldcodersclub под названием "Клуб дедов-программистов".
Youtube-канал этого чата: https://www.youtube.com/channel/UChbHeEGkYqM2b1HdAhf4y1g,
он называется "Клуб дедов-программистов".
"""
19 changes: 19 additions & 0 deletions lariska_bot/config_data/config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
from dataclasses import dataclass
from lariska_bot.config_data import TOKEN


@dataclass
class TgBot:
token: str # Токен для доступа к телеграм-боту

@dataclass
class Config:
tg_bot: TgBot


# Создаем функцию, которая будет читать файл .env и возвращать
# экземпляр класса Config с заполненными полями token и admin_ids
def load_config(path: str | None = None) -> Config:
return Config(
tg_bot = TgBot(token=TOKEN)
)
Loading