Initial commit
This commit is contained in:
parent
32a9f41234
commit
bb5dda4c54
6
.idea/inspectionProfiles/profiles_settings.xml
Normal file
6
.idea/inspectionProfiles/profiles_settings.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<component name="InspectionProjectProfileManager">
|
||||
<settings>
|
||||
<option name="USE_PROJECT_PROFILE" value="false" />
|
||||
<version value="1.0" />
|
||||
</settings>
|
||||
</component>
|
7
.idea/misc.xml
Normal file
7
.idea/misc.xml
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Black">
|
||||
<option name="sdkName" value="Python 3.9 (ontology-bot)" />
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.9 (ontology-bot)" project-jdk-type="Python SDK" />
|
||||
</project>
|
8
.idea/modules.xml
Normal file
8
.idea/modules.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/ontology-bot.iml" filepath="$PROJECT_DIR$/.idea/ontology-bot.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
10
.idea/ontology-bot.iml
Normal file
10
.idea/ontology-bot.iml
Normal file
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="PYTHON_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<excludeFolder url="file://$MODULE_DIR$/venv" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
6
.idea/vcs.xml
Normal file
6
.idea/vcs.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
418
main.py
Normal file
418
main.py
Normal file
@ -0,0 +1,418 @@
|
||||
import telebot
|
||||
from telebot import types
|
||||
import sqlite3
|
||||
|
||||
# Создаем экземпляр бота с указанием токена
|
||||
bot = telebot.TeleBot('7160826305:AAE034sFnCCmdh-KfSBUrvlvr_rmdBJHwXg')
|
||||
|
||||
# Создаем глобальный словарь для хранения вопросов и вариантов ответов
|
||||
questions = {
|
||||
"question1": {
|
||||
"question": "Вопрос для темы 1",
|
||||
"options": ['Ответ 1', 'Ответ 2', 'Ответ 3', 'Ответ 4'],
|
||||
"correct_option_id": 2
|
||||
},
|
||||
"question2": {
|
||||
"question": "Вопрос для темы 2",
|
||||
"options": ['Ответ 1', 'Ответ 2', 'Ответ 3', 'Ответ 4'],
|
||||
"correct_option_id": 2
|
||||
},
|
||||
"question3": {
|
||||
"question": "Вопрос для темы 3",
|
||||
"options": ['Ответ 1', 'Ответ 2', 'Ответ 3', 'Ответ 4'],
|
||||
"correct_option_id": 2
|
||||
},
|
||||
"question4": {
|
||||
"question": "Вопрос для темы 4",
|
||||
"options": ['Ответ 1', 'Ответ 2', 'Ответ 3', 'Ответ 4'],
|
||||
"correct_option_id": 2
|
||||
},
|
||||
"question5": {
|
||||
"question": "Вопрос для темы 5",
|
||||
"options": ['Ответ 1', 'Ответ 2', 'Ответ 3', 'Ответ 4'],
|
||||
"correct_option_id": 2
|
||||
},
|
||||
"question6": {
|
||||
"question": "Вопрос для темы 6",
|
||||
"options": ['Ответ 1', 'Ответ 2', 'Ответ 3', 'Ответ 4'],
|
||||
"correct_option_id": 2
|
||||
},
|
||||
"question7": {
|
||||
"question": "Вопрос для темы 7",
|
||||
"options": ['Ответ 1', 'Ответ 2', 'Ответ 3', 'Ответ 4'],
|
||||
"correct_option_id": 2
|
||||
},
|
||||
"question8": {
|
||||
"question": "Вопрос для темы 8",
|
||||
"options": ['Ответ 1', 'Ответ 2', 'Ответ 3', 'Ответ 4'],
|
||||
"correct_option_id": 2
|
||||
},
|
||||
}
|
||||
|
||||
links = {
|
||||
"https://telegra.ph/ONTOLOGIYA-KAK-UCHENIE-O-BYTII-04-13",
|
||||
"https://telegra.ph/Primenenie-ontologij-04-13",
|
||||
"https://telegra.ph/Sovremennaya-ontologiya-aktualnye-problemy-04-13",
|
||||
"https://telegra.ph/Filosofiya-nauki-i-konkretnye-nauki-04-13",
|
||||
"https://telegra.ph/FILOSOFSKIE-PROBLEMY-INFORMATIKI-04-13",
|
||||
"https://telegra.ph/Isklyuchitelnost-ponyatiya-informacii-04-13",
|
||||
"https://telegra.ph/Filosofskie-problemy-informatiki-i-informacionnyh-tehnologij-04-13",
|
||||
"https://telegra.ph/Filosofskie-problemy-informatiki-i-informacionnyh-tehnologij-04-13",
|
||||
}
|
||||
|
||||
# Функция для обработки команды /start
|
||||
@bot.message_handler(commands=['start'])
|
||||
def handle_start(message):
|
||||
# Получаем информацию о пользователе
|
||||
username = message.from_user.first_name
|
||||
user_id = message.from_user.id
|
||||
chat_id = message.chat.id
|
||||
|
||||
# Подключаемся к базе данных
|
||||
conn = sqlite3.connect('users.db')
|
||||
cursor = conn.cursor()
|
||||
|
||||
# Проверяем, есть ли пользователь уже в базе данных
|
||||
cursor.execute("SELECT * FROM users WHERE chat_id=?", (chat_id,))
|
||||
existing_user = cursor.fetchone()
|
||||
|
||||
if existing_user:
|
||||
bot.reply_to(message, 'С возвращением!')
|
||||
else:
|
||||
bot.reply_to(message, 'Привет, {}! Я записал тебя в базу данных.'.format(username))
|
||||
# Добавляем нового пользователя в базу данных
|
||||
cursor.execute("INSERT INTO users (username, user_id, chat_id, count) VALUES (?, ?, ?, 0)",
|
||||
(username, user_id, chat_id))
|
||||
cursor.execute("INSERT INTO topics (chat_id, question1, question2, question3, question4, question5, question6, question7, question8) VALUES (?, 0, 0, 0, 0, 0, 0, 0, 0)", (chat_id,))
|
||||
|
||||
|
||||
# Сохраняем изменения в базе данных
|
||||
conn.commit()
|
||||
|
||||
# Закрываем соединение с базой данных
|
||||
conn.close()
|
||||
|
||||
# Запрашиваем у пользователя выбор из меню
|
||||
bot.send_message(chat_id, "Пожалуйста, выбери один из пунктов меню:",
|
||||
reply_markup=create_menu_keyboard())
|
||||
|
||||
# Создаем клавиатуру с пунктами меню
|
||||
def create_menu_keyboard():
|
||||
keyboard = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True)
|
||||
keyboard.add(types.KeyboardButton('Темы'))
|
||||
keyboard.add(types.KeyboardButton('Профиль'))
|
||||
keyboard.add(types.KeyboardButton('Рейтинг'))
|
||||
return keyboard
|
||||
|
||||
# Функция для обработки выбора пользователя
|
||||
@bot.message_handler(func=lambda message: True)
|
||||
def handle_menu(message):
|
||||
if message.text == 'Темы':
|
||||
show_topics(message.chat.id)
|
||||
elif message.text == 'Профиль':
|
||||
show_profile(message.chat.id)
|
||||
elif message.text == 'Рейтинг':
|
||||
show_rating(message.chat.id)
|
||||
elif message.text == 'Вернуться к главному меню':
|
||||
bot.send_message(message.chat.id, "Пожалуйста, выбери один из пунктов меню:",
|
||||
reply_markup=create_menu_keyboard())
|
||||
|
||||
# Функция для отображения рейтинга пользователей
|
||||
def show_rating(chat_id):
|
||||
# Подключаемся к базе данных
|
||||
conn = sqlite3.connect('users.db')
|
||||
cursor = conn.cursor()
|
||||
|
||||
# Получаем список пользователей, отсортированный по убыванию баллов (count)
|
||||
cursor.execute("SELECT username, count FROM users ORDER BY count DESC")
|
||||
rating = cursor.fetchall()
|
||||
|
||||
# Формируем сообщение с рейтингом пользователей
|
||||
message = "Рейтинг пользователей:\n"
|
||||
for i, (username, count) in enumerate(rating, start=1):
|
||||
message += f"{i}. {username}: {count} баллов\n"
|
||||
|
||||
# Отправляем сообщение с рейтингом
|
||||
bot.send_message(chat_id, message)
|
||||
|
||||
# Закрываем соединение с базой данных
|
||||
conn.close()
|
||||
|
||||
bot.send_message(chat_id, "Для возврата к главному меню нажмите кнопку ниже:",
|
||||
reply_markup=create_main_menu_keyboard())
|
||||
|
||||
# Функция для создания клавиатуры главного меню
|
||||
def create_main_menu_keyboard():
|
||||
keyboard = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True)
|
||||
keyboard.add(types.KeyboardButton('Вернуться к главному меню'))
|
||||
return keyboard
|
||||
|
||||
# Функция для отображения профиля пользователя
|
||||
def show_profile(chat_id):
|
||||
# Подключаемся к базе данных
|
||||
conn = sqlite3.connect('users.db')
|
||||
cursor = conn.cursor()
|
||||
|
||||
# Получаем информацию о пользователе из таблицы users
|
||||
cursor.execute("SELECT username, count FROM users WHERE chat_id=?", (chat_id,))
|
||||
user_data = cursor.fetchone()
|
||||
|
||||
# Получаем информацию о темах, которые пользователь прошел из таблицы topics
|
||||
cursor.execute("SELECT * FROM topics WHERE chat_id=?", (chat_id,))
|
||||
topics_data = cursor.fetchone()
|
||||
|
||||
# Подсчитываем количество тем, которые пользователь прошел
|
||||
num_topics_passed = sum(topic_flag for topic_flag in topics_data[2:])
|
||||
|
||||
# Формируем сообщение с профилем пользователя
|
||||
if user_data:
|
||||
username, count = user_data
|
||||
message = f"Профиль пользователя {username}:\n"
|
||||
message += f"Баллов: {count}\n"
|
||||
message += f"Количество тем, которые прошел: {num_topics_passed} из 8"
|
||||
else:
|
||||
message = "Профиль пользователя не найден"
|
||||
|
||||
# Отправляем сообщение с профилем пользователя
|
||||
bot.send_message(chat_id, message)
|
||||
|
||||
keyboard = types.InlineKeyboardMarkup(row_width=1)
|
||||
keyboard.add(types.InlineKeyboardButton(text="Сбросить прогресс", callback_data="remove_progress"))
|
||||
bot.send_message(chat_id, 'Вы можете сбросить процесс прохождения '
|
||||
'всех тем, нажав на кнопку ниже (но учтите, что потеряете все баллы)',
|
||||
reply_markup=keyboard)
|
||||
|
||||
# Закрываем соединение с базой данных
|
||||
conn.close()
|
||||
|
||||
bot.send_message(chat_id, "Для возврата к главному меню нажмите кнопку ниже:",
|
||||
reply_markup=create_main_menu_keyboard())
|
||||
|
||||
|
||||
# Функция для отображения клавиатуры с темами
|
||||
def show_topics(chat_id, page = 1):
|
||||
|
||||
# Создаем клавиатуру с темами в зависимости от текущей страницы
|
||||
keyboard = create_topics_keyboard(page)
|
||||
|
||||
# Отправляем сообщение с клавиатурой тем
|
||||
bot.send_message(chat_id, "Выберите тему:", reply_markup=keyboard)
|
||||
|
||||
bot.send_message(chat_id, "Для возврата к главному меню нажмите кнопку ниже:",
|
||||
reply_markup=create_main_menu_keyboard())
|
||||
|
||||
def create_topics_keyboard(page):
|
||||
# Создаем клавиатуру с темами
|
||||
keyboard = types.InlineKeyboardMarkup(row_width=1)
|
||||
|
||||
# Определяем диапазон тем для текущей страницы
|
||||
start_topic = (page - 1) * 4 + 1
|
||||
end_topic = min(page * 4, 8) # Всего 8 тем
|
||||
|
||||
if start_topic == 1:
|
||||
keyboard.add(types.InlineKeyboardButton(text="1.Онтология как учение о бытии", callback_data="topic1"))
|
||||
keyboard.add(types.InlineKeyboardButton(text="2.Применение онтологий", callback_data="topic2"))
|
||||
keyboard.add(types.InlineKeyboardButton(text="3.Современная онтология: актуальные проблемы", callback_data="topic3"))
|
||||
keyboard.add(types.InlineKeyboardButton(text="4.Философия науки и конкретные науки", callback_data="topic4"))
|
||||
elif start_topic == 5:
|
||||
keyboard.add(types.InlineKeyboardButton(text="5.Философские проблемы информатики", callback_data="topic5"))
|
||||
keyboard.add(types.InlineKeyboardButton(text="6.Исключительность понятия информации", callback_data="topic6"))
|
||||
keyboard.add(types.InlineKeyboardButton(text="7.Философские проблемы информатики и информационных технологий", callback_data="topic7"))
|
||||
keyboard.add(types.InlineKeyboardButton(text="8.Факты об онтологии", callback_data="topic8"))
|
||||
|
||||
# Добавляем кнопки для перехода к следующей странице
|
||||
if end_topic < 8:
|
||||
keyboard.add(types.InlineKeyboardButton(text="Следующая страница ->", callback_data=f"next_page{page+1}"))
|
||||
|
||||
# Добавляем кнопку для перехода к предыдущей странице (если не на первой странице)
|
||||
if page > 1:
|
||||
keyboard.add(types.InlineKeyboardButton(text="<- Предыдущая страница", callback_data=f"prev_page{page-1}"))
|
||||
|
||||
return keyboard
|
||||
|
||||
# Обработчик для нажатия на кнопку "Следующая страница" или "Предыдущая страница"
|
||||
@bot.callback_query_handler(func=lambda call: call.data.startswith(('next_page', 'prev_page')))
|
||||
def handle_page_navigation(call):
|
||||
page = int(call.data.split('page')[-1])
|
||||
|
||||
# Удаляем предыдущее сообщение
|
||||
bot.delete_message(call.message.chat.id, call.message.message_id)
|
||||
bot.delete_message(call.message.chat.id, call.message.message_id + 1)
|
||||
|
||||
# Показываем темы для новой страницы
|
||||
show_topics(call.message.chat.id, page)
|
||||
|
||||
# Обработчик для нажатия на кнопку с темой
|
||||
@bot.callback_query_handler(func=lambda call: True)
|
||||
def handle_topic(call):
|
||||
topic = call.data
|
||||
chat_id = call.message.chat.id
|
||||
global questions
|
||||
|
||||
# Отправляем сообщение с текстом по выбранной теме
|
||||
if topic == "remove_progress":
|
||||
conn = sqlite3.connect('users.db')
|
||||
cursor = conn.cursor()
|
||||
cursor.execute(
|
||||
"UPDATE topics SET question1 = 0 WHERE chat_id=?",
|
||||
(call.message.chat.id,))
|
||||
cursor.execute("UPDATE users SET count = 0 WHERE user_id=?", (call.message.chat.id,))
|
||||
bot.send_message(chat_id, 'Прогресс очищен')
|
||||
# Закрываем соединение с базой данных
|
||||
conn.commit()
|
||||
conn.close()
|
||||
elif topic == "topic1":
|
||||
keyboard = types.InlineKeyboardMarkup(row_width=1)
|
||||
test_button = types.InlineKeyboardButton(text="Пройти тест по статье", callback_data="question1")
|
||||
keyboard.add(test_button)
|
||||
|
||||
# Отправляем ссылку на статью
|
||||
bot.send_message(chat_id, "https://telegra.ph/ONTOLOGIYA-KAK-UCHENIE-O-BYTII-04-13",
|
||||
reply_markup=keyboard)
|
||||
bot.delete_message(chat_id, call.message.message_id)
|
||||
bot.delete_message(chat_id, call.message.message_id + 1)
|
||||
|
||||
bot.send_message(chat_id, "Для возврата к главному меню нажмите кнопку ниже:",
|
||||
reply_markup=create_main_menu_keyboard())
|
||||
elif topic == "topic2":
|
||||
keyboard = types.InlineKeyboardMarkup(row_width=1)
|
||||
test_button = types.InlineKeyboardButton(text="Пройти тест по статье", callback_data="question2")
|
||||
keyboard.add(test_button)
|
||||
|
||||
# Отправляем ссылку на статью
|
||||
bot.send_message(chat_id, "https://telegra.ph/Primenenie-ontologij-04-13",
|
||||
reply_markup=keyboard)
|
||||
bot.delete_message(chat_id, call.message.message_id)
|
||||
elif topic == "topic3":
|
||||
keyboard = types.InlineKeyboardMarkup(row_width=1)
|
||||
test_button = types.InlineKeyboardButton(text="Пройти тест по статье", callback_data="question3")
|
||||
keyboard.add(test_button)
|
||||
|
||||
# Отправляем ссылку на статью
|
||||
bot.send_message(chat_id, "https://telegra.ph/Sovremennaya-ontologiya-aktualnye-problemy-04-13",
|
||||
reply_markup=keyboard)
|
||||
bot.delete_message(chat_id, call.message.message_id)
|
||||
elif topic == "topic4":
|
||||
keyboard = types.InlineKeyboardMarkup(row_width=1)
|
||||
test_button = types.InlineKeyboardButton(text="Пройти тест по статье", callback_data="question4")
|
||||
keyboard.add(test_button)
|
||||
|
||||
# Отправляем ссылку на статью
|
||||
bot.send_message(chat_id, "https://telegra.ph/Filosofiya-nauki-i-konkretnye-nauki-04-13",
|
||||
reply_markup=keyboard)
|
||||
bot.delete_message(chat_id, call.message.message_id)
|
||||
elif topic == "topic5":
|
||||
keyboard = types.InlineKeyboardMarkup(row_width=1)
|
||||
test_button = types.InlineKeyboardButton(text="Пройти тест по статье", callback_data="question5")
|
||||
keyboard.add(test_button)
|
||||
|
||||
# Отправляем ссылку на статью
|
||||
bot.send_message(chat_id, "https://telegra.ph/FILOSOFSKIE-PROBLEMY-INFORMATIKI-04-13",
|
||||
reply_markup=keyboard)
|
||||
bot.delete_message(chat_id, call.message.message_id)
|
||||
elif topic == "topic6":
|
||||
keyboard = types.InlineKeyboardMarkup(row_width=1)
|
||||
test_button = types.InlineKeyboardButton(text="Пройти тест по статье", callback_data="question6")
|
||||
keyboard.add(test_button)
|
||||
|
||||
# Отправляем ссылку на статью
|
||||
bot.send_message(chat_id, "https://telegra.ph/Isklyuchitelnost-ponyatiya-informacii-04-13",
|
||||
reply_markup=keyboard)
|
||||
bot.delete_message(chat_id, call.message.message_id)
|
||||
elif topic == "topic7":
|
||||
keyboard = types.InlineKeyboardMarkup(row_width=1)
|
||||
test_button = types.InlineKeyboardButton(text="Пройти тест по статье", callback_data="question7")
|
||||
keyboard.add(test_button)
|
||||
|
||||
# Отправляем ссылку на статью
|
||||
bot.send_message(chat_id, "https://telegra.ph/Filosofskie-problemy-informatiki-i-informacionnyh-tehnologij-04-13",
|
||||
reply_markup=keyboard)
|
||||
bot.delete_message(chat_id, call.message.message_id)
|
||||
elif topic == "topic8":
|
||||
keyboard = types.InlineKeyboardMarkup(row_width=1)
|
||||
test_button = types.InlineKeyboardButton(text="Пройти тест по статье", callback_data="question8")
|
||||
keyboard.add(test_button)
|
||||
|
||||
# Отправляем ссылку на статью
|
||||
bot.send_message(chat_id, "https://telegra.ph/Filosofskie-problemy-informatiki-i-informacionnyh-tehnologij-04-13",
|
||||
reply_markup=keyboard)
|
||||
bot.delete_message(chat_id, call.message.message_id)
|
||||
elif topic in questions:
|
||||
conn = sqlite3.connect('users.db')
|
||||
cursor = conn.cursor()
|
||||
cursor.execute(f"SELECT {topic} FROM topics WHERE chat_id={call.message.chat.id}")
|
||||
result = cursor.fetchone()
|
||||
if result is not None:
|
||||
if result[0] == 0: # Проверяем, что first_flag равен 0
|
||||
cursor.execute(f"UPDATE topics SET {topic} = 1 WHERE chat_id={call.message.chat.id}")
|
||||
conn.commit()
|
||||
|
||||
question_data = questions[topic]
|
||||
question = question_data["question"]
|
||||
options = question_data["options"]
|
||||
correct = question_data["correct_option_id"]
|
||||
|
||||
poll = bot.send_poll(call.message.chat.id, question, options, is_anonymous=False,
|
||||
type='quiz', open_period=30, correct_option_id=correct)
|
||||
else:
|
||||
bot.send_message(chat_id, "Жулик! Проходить тест можно только один раз!")
|
||||
else:
|
||||
bot.send_message(chat_id, "Вас нет в базе данных!")
|
||||
conn.close()
|
||||
|
||||
|
||||
# Обработка ответов на опросы
|
||||
@bot.poll_answer_handler(func=lambda poll_answer: True)
|
||||
def handle_poll_answer(poll_answer):
|
||||
chosen_option_id = poll_answer.option_ids
|
||||
|
||||
# Проверяем, совпадает ли выбранный вариант с правильным
|
||||
if chosen_option_id[0] == 2:
|
||||
result_message = "Правильно! 🎉"
|
||||
right_answer(poll_answer.user.id)
|
||||
else:
|
||||
result_message = "Неправильно 😞"
|
||||
|
||||
# Отправляем сообщение с результатом
|
||||
bot.send_message(poll_answer.user.id, result_message)
|
||||
|
||||
def right_answer(user_id):
|
||||
conn = sqlite3.connect('users.db')
|
||||
cursor = conn.cursor()
|
||||
cursor.execute("UPDATE users SET count = count + 1 WHERE user_id=?", (user_id,))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
# Создаем таблицу пользователей в базе данных
|
||||
def create_table():
|
||||
conn = sqlite3.connect('users.db')
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, username VARCHAR, user_id VARCHAR, chat_id VARCHAR, count INTEGER)''')
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def create_falg_table():
|
||||
conn = sqlite3.connect('users.db')
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('''CREATE TABLE IF NOT EXISTS topics (
|
||||
id INTEGER PRIMARY KEY,
|
||||
chat_id VARCHAR,
|
||||
question1 INTEGER,
|
||||
question2 INTEGER,
|
||||
question3 INTEGER,
|
||||
question4 INTEGER,
|
||||
question5 INTEGER,
|
||||
question6 INTEGER,
|
||||
question7 INTEGER,
|
||||
question8 INTEGER
|
||||
)''')
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
# Вызываем функцию для создания таблицы пользователей
|
||||
create_table()
|
||||
create_falg_table()
|
||||
|
||||
# Запускаем бота
|
||||
bot.polling()
|
||||
|
Loading…
Reference in New Issue
Block a user