diff --git a/.flake8 b/.flake8 new file mode 100644 index 0000000..40b71b7 --- /dev/null +++ b/.flake8 @@ -0,0 +1,3 @@ +[flake8] +exclude = .git,__pycache__,venv +max-line-length = 120 \ No newline at end of file diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml new file mode 100644 index 0000000..3a742e3 --- /dev/null +++ b/.github/workflows/lint.yaml @@ -0,0 +1,23 @@ +name: Linter + +on: push + +env: + PYTHONUNBUFFERED: 1 + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: 3.8 + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + pip install flake8 + - name: Check flake8 + run: python -m flake8 . diff --git a/.github/workflows/push.yaml b/.github/workflows/push.yaml new file mode 100644 index 0000000..171bfce --- /dev/null +++ b/.github/workflows/push.yaml @@ -0,0 +1,43 @@ +name: Publish Docker image +on: + push: + branches: + - stable +env: + IMAGE_NAME: bot + USERNAME: mihalin +jobs: + # Push image to GitHub Packages. + # See also https://docs.docker.com/docker-hub/builds/ + ghr_push: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Build image + run: docker build . --tag $IMAGE_NAME + + - name: Log into GitHub Container Registry + run: echo "${{ secrets.CR_PAT }}" | docker login https://ghcr.io -u $USERNAME --password-stdin + + - name: Push poi image to GitHub Container Registry + run: | + IMAGE_ID=ghcr.io/${{ github.repository }}/$IMAGE_NAME + + # Change all uppercase to lowercase + IMAGE_ID=$(echo $IMAGE_ID | tr '[A-Z]' '[a-z]') + + # Strip git ref prefix from version + VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,') + + # Strip "v" prefix from tag name + [[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//') + + # Use Docker `latest` tag convention + [ "$VERSION" == "main" ] && VERSION=latest + + echo IMAGE_ID=$IMAGE_ID + echo VERSION=$VERSION + + docker tag $IMAGE_NAME $IMAGE_ID:$VERSION + docker push $IMAGE_ID:$VERSION diff --git a/instance/bot.py b/instance/bot.py index 1b514f5..2d90fa8 100644 --- a/instance/bot.py +++ b/instance/bot.py @@ -27,7 +27,7 @@ class BotInstance(ABC): @abstractmethod async def _properties(self) -> BotProperties: - raise NotImplemented() + raise NotImplementedError() def stop_polling(self): print("stop polling") @@ -112,8 +112,8 @@ class FreezeBotInstance(BotInstance): if __name__ == '__main__': """ Режим single-instance. В этом режиме не работает olgram. На сервере запускается только один feedback (instance) - бот для пересылки сообщений. Все настройки этого бота задаются в переменных окружения на сервере. Бот работает - в режиме polling + бот для пересылки сообщений. Все настройки этого бота задаются в переменных окружения на сервере. Бот работает + в режиме polling """ bot = FreezeBotInstance( InstanceSettings.token(), diff --git a/main.py b/main.py index 0ecda73..0c26372 100644 --- a/main.py +++ b/main.py @@ -4,10 +4,10 @@ from tortoise import Tortoise from olgram.router import dp from olgram.settings import TORTOISE_ORM -import olgram.commands.bots -import olgram.commands.start -import olgram.commands.menu -import olgram.commands.bot_actions +import olgram.commands.bots # noqa: F401 +import olgram.commands.start # noqa: F401 +import olgram.commands.menu # noqa: F401 +import olgram.commands.bot_actions # noqa: F401 async def init_database(): diff --git a/olgram/commands/bots.py b/olgram/commands/bots.py index 34f92b3..4ee46e9 100644 --- a/olgram/commands/bots.py +++ b/olgram/commands/bots.py @@ -41,9 +41,9 @@ async def add_bot(message: types.Message, state: FSMContext): 1. Перейдите в бот @BotFather, нажмите START и отправьте команду /newbot 2. Введите название бота, а потом username бота. 3. После создания бота перешлите ответное сообщение в этот бот или скопируйте и пришлите token бота. - + Важно: не подключайте боты, которые используются в других сервисах (Manybot, Chatfuel, Livegram и других). - + Подробную инструкцию по созданию бота читайте здесь /help) """)) await state.set_state("add_bot") @@ -58,7 +58,7 @@ async def bot_added(message: types.Message, state: FSMContext): async def on_invalid_token(): await message.answer(dedent(""" - Это не токен бота. + Это не токен бота. Токен выглядит вот так: 123456789:AAAA-abc123_AbcdEFghijKLMnopqrstu12 """)) diff --git a/olgram/commands/menu.py b/olgram/commands/menu.py index 7bc0e93..f58f7a1 100644 --- a/olgram/commands/menu.py +++ b/olgram/commands/menu.py @@ -28,7 +28,7 @@ async def send_bots_menu(chat_id: int, user_id: int, call=None): bots = await Bot.filter(owner=user) if not bots: await AioBot.get_current().send_message(chat_id, dedent(""" - У вас нет добавленных ботов. + У вас нет добавленных ботов. Отправьте команду /addbot, чтобы добавить бот. """)) @@ -80,8 +80,8 @@ async def send_chats_menu(bot: Bot, call: types.CallbackQuery): """) else: text = dedent(f""" - В этом разделе вы можете привязать бота @{bot.name} к чату. - Выберите чат, куда бот будет пересылать сообщения. + В этом разделе вы можете привязать бота @{bot.name} к чату. + Выберите чат, куда бот будет пересылать сообщения. """) await edit_or_create(call, text, keyboard) @@ -92,15 +92,18 @@ async def send_bot_menu(bot: Bot, call: types.CallbackQuery): keyboard = types.InlineKeyboardMarkup(row_width=2) keyboard.insert( types.InlineKeyboardButton(text="Текст", - callback_data=menu_callback.new(level=2, bot_id=bot.id, operation="text", chat=empty)) + callback_data=menu_callback.new(level=2, bot_id=bot.id, operation="text", + chat=empty)) ) keyboard.insert( types.InlineKeyboardButton(text="Чат", - callback_data=menu_callback.new(level=2, bot_id=bot.id, operation="chat", chat=empty)) + callback_data=menu_callback.new(level=2, bot_id=bot.id, operation="chat", + chat=empty)) ) keyboard.insert( types.InlineKeyboardButton(text="Удалить бот", - callback_data=menu_callback.new(level=2, bot_id=bot.id, operation="delete", chat=empty)) + callback_data=menu_callback.new(level=2, bot_id=bot.id, operation="delete", + chat=empty)) ) keyboard.insert( types.InlineKeyboardButton(text="<< Назад", diff --git a/olgram/settings.py b/olgram/settings.py index 27c5a43..96e1a64 100644 --- a/olgram/settings.py +++ b/olgram/settings.py @@ -62,4 +62,4 @@ TORTOISE_ORM = { "default_connection": "default", }, }, -} \ No newline at end of file +}