diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..0ef602a73624f84decdea57dcf69b24f7895e5e4
--- /dev/null
+++ b/.pre-commit-config.yaml
@@ -0,0 +1,31 @@
+repos:
+  - repo: https://github.com/timothycrosley/isort
+    rev: develop
+    hooks:
+      - id: isort
+        language_version: python3.8
+        exclude: >
+          (?x)^(
+              alembic/.+|
+              systemd/.+
+          )$
+  - repo: https://github.com/ambv/black
+    rev: 19.10b0
+    hooks:
+      - id: black
+        language_version: python3.8
+  - repo: https://github.com/pre-commit/pre-commit-hooks
+    rev: v3.1.0
+    hooks:
+      - id: check-ast
+      - id: requirements-txt-fixer
+      - id: trailing-whitespace
+      - id: flake8
+        language_version: python3.8
+        name: flake8
+        entry: flake8
+        exclude: >
+          (?x)^(
+              alembic/.+|
+              systemd/.+
+          )$
diff --git a/requirements.txt b/requirements.txt
index fe294259dad0b4b6cd41539a4e728ca7b4499902..c78eb40ea8b83db8ac699007ed81eb2c8ecf56a0 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -3,3 +3,7 @@ Telethon==1.14.0
 requests-async==0.6.2
 pytz==2020.1
 Flask==1.1.2
+pre-commit==2.5.1
+black==19.10b0
+isort==4.3.21
+flake8==3.8.3
diff --git a/src/actions/fun.py b/src/actions/fun.py
index da9af46cd49820cd8bb9c2e76578d304535d3a1a..c7298e62008bd4326f0a20821052b9ef1be16149 100644
--- a/src/actions/fun.py
+++ b/src/actions/fun.py
@@ -45,7 +45,9 @@ async def blyaficate(event: events.NewMessage.Event):
     await event.reply(response)
 
 
-@config.telegram_client.on(events.NewMessage(pattern=rf"^({'|'.join(swearing)})\.?$", forwards=False))
+@config.telegram_client.on(
+    events.NewMessage(pattern=rf"^({'|'.join(swearing)})\.?$", forwards=False)
+)
 async def swearing_reply(event):
     await event.reply(
         random.choice(
@@ -68,7 +70,9 @@ async def swearing_reply(event):
     )
 
 
-@config.telegram_client.on(events.NewMessage(from_users=["clockblocker_tests_bot"], forwards=False))
+@config.telegram_client.on(
+    events.NewMessage(from_users=["clockblocker_tests_bot"], forwards=False)
+)
 async def lenochka_reply(event: events.NewMessage.Event):
     await event.reply(
         random.choice(
diff --git a/src/actions/replies.py b/src/actions/replies.py
index aa16ac8d895ba95cafb4bac4c60af9df20ae10bd..e1f83c38df9d72cd36881eab7bd1f70c42fddcf7 100644
--- a/src/actions/replies.py
+++ b/src/actions/replies.py
@@ -14,25 +14,12 @@ async def welcome(event: events.ChatAction.Event):
         await event.respond(random.choice(["Привет!", "Добро пожаловать!"]))
     if event.user_left or event.user_kicked:
         await event.respond(
-            random.choice(
-                [
-                    "До скорых встреч!",
-                    "Прощайте!",
-                    "До свидания!",
-                    "Пока!",
-                ]
-            )
+            random.choice(["До скорых встреч!", "Прощайте!", "До свидания!", "Пока!"])
         )
 
 
 @config.telegram_client.on(events.NewMessage(pattern=r"^(П|п)ривет\.?", forwards=False))
 async def hello(event):
     await event.respond(
-        random.choice(
-            [
-                "Привет!",
-                "Добрый день!",
-                "Добрейший вечерочек!",
-            ]
-        )
+        random.choice(["Привет!", "Добрый день!", "Добрейший вечерочек!"])
     )
diff --git a/src/initializator.py b/src/initializator.py
index f0448a2db9d3e323f847df47db651035a6c2bd23..85d71c7a9f22ea2dcab21b30f30e8d2df335f2a4 100644
--- a/src/initializator.py
+++ b/src/initializator.py
@@ -1,6 +1,6 @@
 import asyncio
 import logging
-from multiprocessing import Process, Manager
+from multiprocessing import Manager, Process
 
 from telethon import TelegramClient
 
@@ -35,12 +35,15 @@ def init():
         "bot_session", config.telegram_app_id, config.telegram_api_hash
     )
     manager = Manager()
-    token = manager.Value('s', None)
+    token = manager.Value("s", None)
     web_app = Process(target=create_web_app, args=(token,))
     web_app.start()
-    client.start(phone=config.telegram_account_phone, code_callback=get_code_from_web(token))
+    client.start(
+        phone=config.telegram_account_phone, code_callback=get_code_from_web(token)
+    )
     config.telegram_client = client
     from src.actions import finish
+
     finish()
 
     return client
diff --git a/src/server_app.py b/src/server_app.py
index 050011b7d53f7a93076dcdba0a1b441c23f3cabb..05296dd1405999507dca0deb17ba7fd12725b4a4 100644
--- a/src/server_app.py
+++ b/src/server_app.py
@@ -2,7 +2,7 @@ import logging
 import random
 import uuid
 
-from flask import Flask, render_template, request, send_file, current_app
+from flask import Flask, current_app, render_template, request, send_file
 
 from src.config import config
 
@@ -10,10 +10,7 @@ logger = logging.getLogger(__name__)
 
 
 def form_template():
-    context = {
-        'activated': current_app.activated,
-        'cash_dropper': str(uuid.uuid4())
-    }
+    context = {"activated": current_app.activated, "cash_dropper": str(uuid.uuid4())}
     return render_template("index.html", **context)
 
 
@@ -31,7 +28,6 @@ def get_code():
 
 
 class MyServer(Flask):
-
     def __init__(self, token_value, *args, **kwargs):
         super(MyServer, self).__init__(*args, **kwargs)
         self.token_value = token_value