diff --git a/.gitignore b/.gitignore
index ab12272..b845209 100644
--- a/.gitignore
+++ b/.gitignore
@@ -356,3 +356,4 @@ dmypy.json
# Cython debug symbols
cython_debug/
+todobot/config.py
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000..105ce2d
--- /dev/null
+++ b/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..6bab3e4
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..f7fb9db
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/telegram-bot-tutorial.iml b/.idea/telegram-bot-tutorial.iml
new file mode 100644
index 0000000..07abf20
--- /dev/null
+++ b/.idea/telegram-bot-tutorial.iml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/run_todobot.py b/run_todobot.py
new file mode 100644
index 0000000..75fa8ab
--- /dev/null
+++ b/run_todobot.py
@@ -0,0 +1,4 @@
+from todobot.bot import main
+
+if __name__ == '__main__':
+ main()
diff --git a/todobot/__init__.py b/todobot/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/todobot/bot.py b/todobot/bot.py
new file mode 100644
index 0000000..6562c70
--- /dev/null
+++ b/todobot/bot.py
@@ -0,0 +1,53 @@
+import logging
+
+from telegram import ForceReply, Update
+from telegram.ext import Application, CommandHandler, ContextTypes, MessageHandler, filters
+
+from todobot.config import TELEGRAM_TOKEN
+
+# Enable logging
+logging.basicConfig(
+ format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level=logging.INFO
+)
+# set higher logging level for httpx to avoid all GET and POST requests being logged
+logging.getLogger("httpx").setLevel(logging.WARNING)
+
+logger = logging.getLogger(__name__)
+
+
+# Define a few command handlers. These usually take the two arguments update and
+# context.
+async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
+ """Send a message when the command /start is issued."""
+ user = update.effective_user
+ await update.message.reply_text('Hello, my dear friends!')
+
+
+async def help_command(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
+ """Send a message when the command /help is issued."""
+ await update.message.reply_text("Help!")
+
+
+async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
+ """Echo the user message."""
+ await update.message.reply_text(update.message.text)
+
+
+def main() -> None:
+ """Start the bot."""
+ # Create the Application and pass it your bot's token.
+ application = Application.builder().token("TELEGRAM_TOKEN").build()
+
+ # on different commands - answer in Telegram
+ application.add_handler(CommandHandler("start", start))
+ application.add_handler(CommandHandler("help", help_command))
+
+ # on non command i.e message - echo the message on Telegram
+ application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))
+
+ # Run the bot until the user presses Ctrl-C
+ application.run_polling(allowed_updates=Update.ALL_TYPES)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/todobot/config.py b/todobot/config.py
new file mode 100644
index 0000000..12b4068
--- /dev/null
+++ b/todobot/config.py
@@ -0,0 +1 @@
+TELEGRAM_TOKEN = ''