diff --git a/db.py b/db.py
index 4f7e3ee..62bfc72 100644
--- a/db.py
+++ b/db.py
@@ -1,204 +1,204 @@
-import sqlite3
-import configparser
-import os
-import sys
-
-config_path = os.path.join(sys.path[0], 'settings.ini')
-config = configparser.ConfigParser()
-config.read(config_path)
-LOGS = config.getboolean('Settings', 'logs')
-IMPORTANT_LOGS = config.get('Telegram', 'important_logs')
-
-
-class BotDB:
-
- def __init__(self, db_file):
- self.conn = sqlite3.connect(db_file, check_same_thread=False)
- self.cursor = self.conn.cursor()
-
- def get_message_from_db(self, type: str, username):
- """Функция для запроса к базе данных и получения сообщений для бота. В аргументы передаются:
- type - тип получаемой обратной связи, строковое значение, сохраненное в БД
- username - имя пользователя
- """
- # Подключаемся к базе
- try:
- cursor = self.conn.cursor()
- cursor.execute(f"SELECT * FROM messages WHERE type=?", (type,))
- # Забираем данные из таблицы, преобразуем в строку, заменяем поле username на имя пользователя,
- # и вместо амберсанда подставляем перенос строки
- if type == 'connect_with_admin' or type == 'del_message' or type == 'suggest_news' or type == 'start_message':
- response_from_database = str(cursor.fetchone()[1]).replace('username', username).replace('&', '\n')
- else:
- response_from_database = str(cursor.fetchone()[1]).replace('&', '\n')
- return response_from_database
- except sqlite3.Error as error:
- print(error)
-
- def get_error_message_from_db(self, id: int):
- """Функция для запроса к базе данных и получения сообщений ошибки. В аргументы передаются:
- id - идентификатор ошибки
- """
- # Подключаемся к базе
- try:
- cursor = self.conn.cursor()
- cursor.execute(f"SELECT * FROM error_messages WHERE id=?", (id,))
- response_from_database = str(cursor.fetchone()[1])
- return response_from_database
- except sqlite3.Error as error:
- print(error)
-
- def add_new_user_in_db(self, user_id, first_name, full_name, username, is_bot, language_code, date_added, date_changed):
- """Добавляем юзера в базу"""
- try:
- self.cursor.execute("INSERT INTO 'our_users' ('user_id', 'first_name', 'full_name', 'username', 'is_bot', "
- "'language_code', 'date_added', 'date_changed') VALUES (?, ?, ?, ?, ?, ?, ?, ?)",
- (user_id, first_name, full_name,
- username,is_bot,language_code,date_added,date_changed))
- return self.conn.commit()
- except sqlite3.Error as error:
- print(error)
-
-
- def user_exists(self, user_id):
- """Проверяем, есть ли юзер в базе"""
- try:
- result = self.cursor.execute("SELECT `id` FROM `our_users` WHERE `user_id` = ?", (user_id,))
- return bool(len(result.fetchall()))
- except sqlite3.Error as error:
- print(error)
-
-
- def get_user_id(self, user_id):
- """Достаем id юзера в базе по его user_id"""
- try:
- result = self.cursor.execute("SELECT `id` FROM `our_users` WHERE `user_id` = ?", (user_id,))
- return result.fetchone()[0]
- except sqlite3.Error as error:
- print(error)
-
-
- def get_username(self, user_id):
- """Достаем id юзера в базе по его user_id"""
- try:
- result = self.cursor.execute("SELECT `username` FROM `our_users` WHERE `user_id` = ?", (user_id,))
- return result.fetchone()[0]
- except sqlite3.Error as error:
- print(error)
-
- def get_all_user_id(self):
- """Достаем все айдишники юзеров из БД и преобразуем их в список"""
- try:
- result = self.cursor.execute("SELECT `user_id` FROM `our_users`",)
- fetch_all = result.fetchall()
- list_of_users = []
- for i in fetch_all:
- list_of_users.append(i[0])
- return list_of_users
- except sqlite3.Error as error:
- print(error)
-
- def get_user_first_name(self, user_id):
- try:
- result = self.cursor.execute("SELECT `first_name` FROM `our_users` WHERE `user_id` = ?", (user_id,))
- return result.fetchone()[0]
- except sqlite3.Error as error:
- print(error)
-
-
- def change_name(self, user_id):
- #TODO: реализовать функцию изменения имени пользователя по которому к нему обращается бот. ОБновляем поля first_name, date_changed
- #result = self.cursor.execute("UPDATE 'our_users' SET (?) WHERE user_id = (?)", (new_user_name), )
- pass
-
- def add_audio_record(self, file_name, author_id, date_added, listen_count, file_id):
- """Добавляет информацию о войсе юзера в БД"""
- try:
- result = self.cursor.execute("INSERT INTO `audio_message_reference` (file_name, author_id, date_added, listen_count, file_id) VALUES (?, ?, ?, ?, ?)", (file_name, author_id, date_added, listen_count, file_id))
- return self.conn.commit()
- except sqlite3.Error as error:
- print(error)
-
- def last_date_audio(self):
- """Получаем дату последнего войса"""
- try:
- result = self.cursor.execute(
- "SELECT `date_added` FROM `audio_message_reference` ORDER BY date_added DESC LIMIT 1")
- return result.fetchone()[0]
- except sqlite3.Error as error:
- print(error)
-
-
- def get_last_user_audio_record(self, user_id):
- """Получает данные о количестве записей пользователя"""
- try:
- result = self.cursor.execute("SELECT `file_id` FROM `audio_message_reference` WHERE `author_id` = ?", (user_id,))
- return bool(len(result.fetchall()))
- except sqlite3.Error as error:
- print(error)
-
- def get_id_for_audio_record(self, user_id):
- """Получает ID аудио сообщения пользователя"""
- try:
- result = self.cursor.execute("SELECT `file_id` FROM `audio_message_reference` WHERE `author_id` = ? ORDER BY date_added DESC LIMIT 1",
- (user_id,))
- return result.fetchone()[0]
- except sqlite3.Error as error:
- print(error)
-
- def get_path_for_audio_record(self, user_id):
- """Получает данные о названии файла"""
- try:
- result = self.cursor.execute("SELECT `file_name` FROM `audio_message_reference` WHERE `author_id` = ? ORDER BY date_added DESC LIMIT 1", (user_id,))
- return result.fetchone()[0]
- except sqlite3.Error as error:
- print(error)
-
- def check_listen_audio(self, user_id):
- """Проверяет прослушано ли аудио пользователем"""
- try:
- query_listen_audio = self.cursor.execute(
- """SELECT l.file_name
- FROM audio_message_reference a
- LEFT JOIN listen_audio_users l ON l.file_name = a.file_name
- WHERE l.user_id = ?
- AND l.file_name IS NOT NULL""" , (user_id,))
- check_sign = query_listen_audio.fetchall()
- query_all_audio = self.cursor.execute('SELECT file_name FROM audio_message_reference WHERE author_id <> ?', (user_id,))
- sign_all_audio = query_all_audio.fetchall()
- new_sign1 = list(set(sign_all_audio) - set(check_sign))
- new_sign = []
- for i in new_sign1:
- new_sign.append(i[0])
- return new_sign
- except sqlite3.Error as error:
- print(error)
-
- def mark_listened_audio(self, file_name, user_id):
- """Отмечает аудио прослушанным для конкретного пользователя."""
- try:
- result = self.cursor.execute("INSERT INTO `listen_audio_users` (file_name, user_id, is_listen) VALUES (?, ?, ?)", (file_name, user_id, 1))
- return self.conn.commit()
- except sqlite3.Error as error:
- print(error)
-
- def get_info_about_stickers(self, user_id):
- """Получает данные о получении стикеров пользователем"""
- try:
- result = self.cursor.execute("SELECT `has_stickers` FROM `our_users` WHERE `user_id` = ?", (user_id,))
- return result.fetchone()[0]
- except sqlite3.Error as error:
- print(error)
-
- def update_info_about_stickers(self, user_id):
- """Обновляет данные о получении стикеров пользователем"""
- try:
- result = self.cursor.execute("UPDATE `our_users` SET `has_stickers` = 1 WHERE `user_id` = ?", (user_id,))
- return self.conn.commit()
- except sqlite3.Error as error:
- print(error)
-
- def close(self):
- """Закрываем соединение с БД"""
- self.conn.close()
-
+import sqlite3
+import configparser
+import os
+import sys
+
+config_path = os.path.join(sys.path[0], 'settings.ini')
+config = configparser.ConfigParser()
+config.read(config_path)
+LOGS = config.getboolean('Settings', 'logs')
+IMPORTANT_LOGS = config.get('Telegram', 'important_logs')
+
+
+class BotDB:
+
+ def __init__(self, db_file):
+ self.conn = sqlite3.connect(db_file, check_same_thread=False)
+ self.cursor = self.conn.cursor()
+
+ def get_message_from_db(self, type: str, username):
+ """Функция для запроса к базе данных и получения сообщений для бота. В аргументы передаются:
+ type - тип получаемой обратной связи, строковое значение, сохраненное в БД
+ username - имя пользователя
+ """
+ # Подключаемся к базе
+ try:
+ cursor = self.conn.cursor()
+ cursor.execute(f"SELECT * FROM messages WHERE type=?", (type,))
+ # Забираем данные из таблицы, преобразуем в строку, заменяем поле username на имя пользователя,
+ # и вместо амберсанда подставляем перенос строки
+ if type == 'connect_with_admin' or type == 'del_message' or type == 'suggest_news' or type == 'start_message':
+ response_from_database = str(cursor.fetchone()[1]).replace('username', username).replace('&', '\n')
+ else:
+ response_from_database = str(cursor.fetchone()[1]).replace('&', '\n')
+ return response_from_database
+ except sqlite3.Error as error:
+ print(error)
+
+ def get_error_message_from_db(self, id: int):
+ """Функция для запроса к базе данных и получения сообщений ошибки. В аргументы передаются:
+ id - идентификатор ошибки
+ """
+ # Подключаемся к базе
+ try:
+ cursor = self.conn.cursor()
+ cursor.execute(f"SELECT * FROM error_messages WHERE id=?", (id,))
+ response_from_database = str(cursor.fetchone()[1])
+ return response_from_database
+ except sqlite3.Error as error:
+ print(error)
+
+ def add_new_user_in_db(self, user_id, first_name, full_name, username, is_bot, language_code, date_added, date_changed):
+ """Добавляем юзера в базу"""
+ try:
+ self.cursor.execute("INSERT INTO 'our_users' ('user_id', 'first_name', 'full_name', 'username', 'is_bot', "
+ "'language_code', 'date_added', 'date_changed') VALUES (?, ?, ?, ?, ?, ?, ?, ?)",
+ (user_id, first_name, full_name,
+ username,is_bot,language_code,date_added,date_changed))
+ return self.conn.commit()
+ except sqlite3.Error as error:
+ print(error)
+
+
+ def user_exists(self, user_id):
+ """Проверяем, есть ли юзер в базе"""
+ try:
+ result = self.cursor.execute("SELECT `id` FROM `our_users` WHERE `user_id` = ?", (user_id,))
+ return bool(len(result.fetchall()))
+ except sqlite3.Error as error:
+ print(error)
+
+
+ def get_user_id(self, user_id):
+ """Достаем id юзера в базе по его user_id"""
+ try:
+ result = self.cursor.execute("SELECT `id` FROM `our_users` WHERE `user_id` = ?", (user_id,))
+ return result.fetchone()[0]
+ except sqlite3.Error as error:
+ print(error)
+
+
+ def get_username(self, user_id):
+ """Достаем id юзера в базе по его user_id"""
+ try:
+ result = self.cursor.execute("SELECT `username` FROM `our_users` WHERE `user_id` = ?", (user_id,))
+ return result.fetchone()[0]
+ except sqlite3.Error as error:
+ print(error)
+
+ def get_all_user_id(self):
+ """Достаем все айдишники юзеров из БД и преобразуем их в список"""
+ try:
+ result = self.cursor.execute("SELECT `user_id` FROM `our_users`",)
+ fetch_all = result.fetchall()
+ list_of_users = []
+ for i in fetch_all:
+ list_of_users.append(i[0])
+ return list_of_users
+ except sqlite3.Error as error:
+ print(error)
+
+ def get_user_first_name(self, user_id):
+ try:
+ result = self.cursor.execute("SELECT `first_name` FROM `our_users` WHERE `user_id` = ?", (user_id,))
+ return result.fetchone()[0]
+ except sqlite3.Error as error:
+ print(error)
+
+
+ def change_name(self, user_id):
+ #TODO: реализовать функцию изменения имени пользователя по которому к нему обращается бот. ОБновляем поля first_name, date_changed
+ #result = self.cursor.execute("UPDATE 'our_users' SET (?) WHERE user_id = (?)", (new_user_name), )
+ pass
+
+ def add_audio_record(self, file_name, author_id, date_added, listen_count, file_id):
+ """Добавляет информацию о войсе юзера в БД"""
+ try:
+ result = self.cursor.execute("INSERT INTO `audio_message_reference` (file_name, author_id, date_added, listen_count, file_id) VALUES (?, ?, ?, ?, ?)", (file_name, author_id, date_added, listen_count, file_id))
+ return self.conn.commit()
+ except sqlite3.Error as error:
+ print(error)
+
+ def last_date_audio(self):
+ """Получаем дату последнего войса"""
+ try:
+ result = self.cursor.execute(
+ "SELECT `date_added` FROM `audio_message_reference` ORDER BY date_added DESC LIMIT 1")
+ return result.fetchone()[0]
+ except sqlite3.Error as error:
+ print(error)
+
+
+ def get_last_user_audio_record(self, user_id):
+ """Получает данные о количестве записей пользователя"""
+ try:
+ result = self.cursor.execute("SELECT `file_id` FROM `audio_message_reference` WHERE `author_id` = ?", (user_id,))
+ return bool(len(result.fetchall()))
+ except sqlite3.Error as error:
+ print(error)
+
+ def get_id_for_audio_record(self, user_id):
+ """Получает ID аудио сообщения пользователя"""
+ try:
+ result = self.cursor.execute("SELECT `file_id` FROM `audio_message_reference` WHERE `author_id` = ? ORDER BY date_added DESC LIMIT 1",
+ (user_id,))
+ return result.fetchone()[0]
+ except sqlite3.Error as error:
+ print(error)
+
+ def get_path_for_audio_record(self, user_id):
+ """Получает данные о названии файла"""
+ try:
+ result = self.cursor.execute("SELECT `file_name` FROM `audio_message_reference` WHERE `author_id` = ? ORDER BY date_added DESC LIMIT 1", (user_id,))
+ return result.fetchone()[0]
+ except sqlite3.Error as error:
+ print(error)
+
+ def check_listen_audio(self, user_id):
+ """Проверяет прослушано ли аудио пользователем"""
+ try:
+ query_listen_audio = self.cursor.execute(
+ """SELECT l.file_name
+ FROM audio_message_reference a
+ LEFT JOIN listen_audio_users l ON l.file_name = a.file_name
+ WHERE l.user_id = ?
+ AND l.file_name IS NOT NULL""" , (user_id,))
+ check_sign = query_listen_audio.fetchall()
+ query_all_audio = self.cursor.execute('SELECT file_name FROM audio_message_reference WHERE author_id <> ?', (user_id,))
+ sign_all_audio = query_all_audio.fetchall()
+ new_sign1 = list(set(sign_all_audio) - set(check_sign))
+ new_sign = []
+ for i in new_sign1:
+ new_sign.append(i[0])
+ return new_sign
+ except sqlite3.Error as error:
+ print(error)
+
+ def mark_listened_audio(self, file_name, user_id):
+ """Отмечает аудио прослушанным для конкретного пользователя."""
+ try:
+ result = self.cursor.execute("INSERT INTO `listen_audio_users` (file_name, user_id, is_listen) VALUES (?, ?, ?)", (file_name, user_id, 1))
+ return self.conn.commit()
+ except sqlite3.Error as error:
+ print(error)
+
+ def get_info_about_stickers(self, user_id):
+ """Получает данные о получении стикеров пользователем"""
+ try:
+ result = self.cursor.execute("SELECT `has_stickers` FROM `our_users` WHERE `user_id` = ?", (user_id,))
+ return result.fetchone()[0]
+ except sqlite3.Error as error:
+ print(error)
+
+ def update_info_about_stickers(self, user_id):
+ """Обновляет данные о получении стикеров пользователем"""
+ try:
+ result = self.cursor.execute("UPDATE `our_users` SET `has_stickers` = 1 WHERE `user_id` = ?", (user_id,))
+ return self.conn.commit()
+ except sqlite3.Error as error:
+ print(error)
+
+ def close(self):
+ """Закрываем соединение с БД"""
+ self.conn.close()
+
diff --git a/main.py b/main.py
index 510d161..08ee2da 100644
--- a/main.py
+++ b/main.py
@@ -1,325 +1,339 @@
-import configparser
-import os
-import sys
-from pathlib import Path
-from time import sleep
-from db import BotDB
-import telebot
-import random
-from datetime import datetime
-import time
-from telebot import types
-from telebot.apihelper import ApiTelegramException
-
-#Настройки
-config_path = os.path.join(sys.path[0], 'settings.ini')
-config = configparser.ConfigParser()
-config.read(config_path)
-#TELEGRAM
-BOT_TOKEN = config.get('Telegram', 'BOT_TOKEN')
-GROUP_FOR_POST = config.get('Telegram', 'group_for_posts')
-GROUP_FOR_MESSAGE = config.get('Telegram', 'group_for_message')
-MAIN_PUBLIC = config.get('Telegram', 'main_public')
-GROUP_FOR_LOGS = config.get('Telegram', 'group_for_logs')
-IMPORTANT_LOGS = config.get('Telegram', 'important_logs')
-PREVIEW_LINK = config.getboolean('Telegram', 'PREVIEW_LINK')
-#SETTINGS
-LOGS = config.getboolean('Settings', 'logs')
-TEST = config.getboolean('Settings', 'test')
-
-
-#Инициализируем бота и базку
-bot = telebot.TeleBot(BOT_TOKEN, parse_mode=None)
-BotDB = BotDB('tg-bot-database')
-
-def telegram_bot():
- @bot.message_handler(commands=['start'])
- def send_welcome(message):
- #TODO: Здесь переписать через randint
- #TODO: Тексты приветствий вынести в отдельный файл
- try:
- name_stick_hello = list(Path('Stick').rglob('Hello_*'))
- number_stick_hello = random.randint(1, len(name_stick_hello))
- random_stick_hello = open(name_stick_hello[number_stick_hello], 'rb')
- #logging
- if LOGS:
- bot.forward_message(chat_id=GROUP_FOR_LOGS,
- from_chat_id=message.chat.id,
- message_id=message.message_id)
- bot.send_sticker(message.chat.id, random_stick_hello)
- sleep(0.3)
- except:
- if LOGS:
- bot.send_message(IMPORTANT_LOGS, BotDB.get_error_message_from_db(7))
-
- try:
- user_id = message.from_user.id
- first_name = message.from_user.first_name
- full_name = message.from_user.full_name
- is_bot = message.from_user.is_bot
- username = message.from_user.username
- language_code = message.from_user.language_code
- time_UTC = int(time.time())
- date_added = datetime.fromtimestamp(time_UTC)
- date_changed = datetime.fromtimestamp(time_UTC)
-
- markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
- item1 = types.KeyboardButton("📢Предложить свой пост")
- item2 = types.KeyboardButton("📩Связаться с админами")
- item3 = types.KeyboardButton("❌Удалить пост")
- if BotDB.user_exists(user_id):
- is_need_sticker = BotDB.get_info_about_stickers(user_id=message.from_user.id)
- if is_need_sticker == 0:
- item5 = types.KeyboardButton("🤪Хочу стикеры")
- BotDB.update_info_about_stickers(user_id=message.from_user.id)
- markup.add(item1, item2, item3, item5)
- else:
- markup.add(item1, item2, item3)
- else:
- BotDB.add_new_user_in_db(user_id, first_name, full_name, username, is_bot, language_code, date_added, date_changed)
- is_need_sticker = BotDB.get_info_about_stickers(user_id=message.from_user.id)
- if is_need_sticker == 0:
- item5 = types.KeyboardButton("🤪Хочу стикеры")
- BotDB.update_info_about_stickers(user_id=message.from_user.id)
- markup.add(item1, item2, item3, item5)
- else:
- markup.add(item1, item2, item3)
- hello_message = BotDB.get_message_from_db('start_message', first_name)
- bot.send_message(message.chat.id, hello_message, parse_mode='html', reply_markup=markup, disable_web_page_preview=not PREVIEW_LINK)
- except:
- if LOGS:
- bot.send_message(IMPORTANT_LOGS, BotDB.get_error_message_from_db(8))
- bot.register_next_step_handler(message, go_send_messages)
-
- @bot.message_handler(commands=['end_command'])
- def after_post(message):
- markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
- item1 = types.KeyboardButton("📢Предложить свой пост")
- item2 = types.KeyboardButton("📩Связаться с админами")
- item3 = types.KeyboardButton("❌Удалить пост")
- item5 = types.KeyboardButton("👋🏼Сказать пока!")
- markup.add(item1, item2, item3, item5)
- bot.send_message(message.chat.id,
- "Выбери нужную кнопку внизу экрана".format(
- message.from_user, bot.get_me()),
- parse_mode='html', reply_markup=markup, disable_web_page_preview=not PREVIEW_LINK)
- bot.register_next_step_handler(message, go_send_messages)
-
- def go_send_messages(message):
- global msg
- if message.text == '📢Предложить свой пост':
- try:
- markup = types.ReplyKeyboardRemove()
- first_name = message.from_user.first_name
- suggest_news = BotDB.get_message_from_db('suggest_news', first_name)
- bot.send_message(message.chat.id, suggest_news, parse_mode='html')
- sleep(0.3)
- first_name = message.from_user.first_name
- suggest_news_2 = BotDB.get_message_from_db('suggest_news_2', first_name)
- msg = bot.send_message(message.chat.id, suggest_news_2,parse_mode='html', reply_markup=markup)
- except:
- if LOGS:
- bot.send_message(IMPORTANT_LOGS, BotDB.get_error_message_from_db(10))
- #logging
- if LOGS:
- bot.forward_message(chat_id=GROUP_FOR_LOGS,
- from_chat_id=message.chat.id,
- message_id=message.message_id)
- bot.register_next_step_handler(msg, resend_message_in_group_for_post)
-
- elif message.text == "📩Связаться с админами":
- first_name = message.from_user.first_name
- connect_with_admin = BotDB.get_message_from_db('connect_with_admin', first_name)
- msg = bot.send_message(message.chat.id, connect_with_admin, parse_mode="html")
- #logging
- if LOGS:
- bot.forward_message(chat_id=GROUP_FOR_LOGS,
- from_chat_id=message.chat.id,
- message_id=message.message_id)
- bot.register_next_step_handler(msg, resend_message_in_group_for_message)
-
-
- elif message.text == "❌Удалить пост":
- #TODO: требует автоматизации. На входе говорим пришли мне пост, на выходе получаем идентификатор поста, удаляем из ТГ. Насчет удаления из ВК надо подумать
- first_name = message.from_user.first_name
- del_message = BotDB.get_message_from_db('del_message', first_name)
- msg = bot.send_message(message.chat.id, del_message, parse_mode="html")
- #logging
- if LOGS:
- bot.forward_message(chat_id=GROUP_FOR_LOGS,
- from_chat_id=message.chat.id,
- message_id=message.message_id)
- bot.register_next_step_handler(msg, resend_message_in_group_for_message)
-
- elif message.text == "👋🏼Сказать пока!":
- try:
- name_stick_bye = list(Path('Stick').rglob('Universal_*'))
- number_stick_bye = random.randint(1, len(name_stick_bye))
- random_stick_bye = open(name_stick_bye[number_stick_bye], 'rb')
- bot.send_sticker(message.chat.id, random_stick_bye)
- except ApiTelegramException:
- if LOGS:
- bot.send_message(chat_id=IMPORTANT_LOGS, text=BotDB.get_error_message_from_db(11))
-
- markup = types.ReplyKeyboardRemove()
- try:
- first_name = message.from_user.first_name
- bye_message = BotDB.get_message_from_db('bye_message', first_name)
- bot.send_message(message.chat.id, bye_message,
- parse_mode='html', reply_markup=markup, disable_web_page_preview=not PREVIEW_LINK)
- except:
- if LOGS:
- bot.send_message(chat_id=IMPORTANT_LOGS, text=BotDB.get_error_message_from_db(6))
-
- if LOGS:
- #logging
- bot.forward_message(chat_id=GROUP_FOR_LOGS,
- from_chat_id=message.chat.id,
- message_id=message.message_id)
- elif message.text == "🤪Хочу стикеры":
- markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
- item1 = types.KeyboardButton("📢Предложить свой пост")
- item2 = types.KeyboardButton("📩Связаться с админами")
- item3 = types.KeyboardButton("❌Удалить пост")
- item5 = types.KeyboardButton("👋🏼Сказать пока!")
- markup.add(item1, item2, item3, item5)
- try:
- if LOGS:
- bot.forward_message(chat_id=GROUP_FOR_LOGS,
- from_chat_id=message.chat.id,
- message_id=message.message_id)
- bot.send_message(message.chat.id, text='Хорошо, лови, добавить можно отсюда: https://t.me/addstickers/love_biysk', reply_markup=markup)
- bot.register_next_step_handler(message, callback=go_send_messages)
- except ApiTelegramException:
- if LOGS:
- bot.send_message(chat_id=IMPORTANT_LOGS, text=BotDB.get_error_message_from_db(12))
- else:
- try:
- first_name = message.from_user.first_name
- user_error = BotDB.get_message_from_db('user_error', first_name)
- bot.send_message(message.chat.id, user_error, parse_mode='html', disable_web_page_preview=not PREVIEW_LINK)
- except:
- if LOGS:
- bot.send_message(chat_id=IMPORTANT_LOGS, text=BotDB.get_error_message_from_db(9))
- #logging
- if LOGS:
- bot.forward_message(chat_id=GROUP_FOR_LOGS,
- from_chat_id=message.chat.id,
- message_id=message.message_id)
- bot.register_next_step_handler(message, callback=go_send_messages)
-
- def resend_message_in_group_for_post(message):
- markup = types.InlineKeyboardMarkup(row_width=1)
- item1 = types.InlineKeyboardButton("Опубликовать", callback_data='post_post_post')
- item2 = types.InlineKeyboardButton("Отклонить", callback_data='decline')
- markup.add(item1, item2)
- try:
- if message.content_type == 'text':
- post_text = message.text.lower()
- if post_text.find('неанон') != -1 or post_text.find('не анон') != -1:
- bot.send_message(
- #TODO: GROUP_FOR_POST
- chat_id=GROUP_FOR_POST,
- text=f'Пост из ТГ:\n{post_text}\n\nАвтор поста: {message.from_user.first_name} @{message.from_user.username}',
- reply_markup=markup
- )
- elif post_text.find('анон') != -1:
- bot.send_message(
- # TODO: GROUP_FOR_POST
- chat_id=GROUP_FOR_POST,
- text=f'Пост из ТГ:\n{message.text}\n\nПост опубликован анонимно',
- reply_markup=markup
- )
- else:
- bot.send_message(
- # TODO: GROUP_FOR_POST
- chat_id=GROUP_FOR_POST,
- text=f'Пост из ТГ:\n{post_text}\n\nАвтор поста: {message.from_user.first_name} @{message.from_user.username}',
- reply_markup=markup
- )
- elif message.content_type == 'photo' and message.media_group_id == None:
- post_text_for_photo = message.caption.lower()
- bot.send_photo(
- # TODO: GROUP_FOR_POST
- chat_id=GROUP_FOR_POST,
- caption=f'Пост из ТГ:\n{post_text_for_photo}\n\nАвтор поста: {message.from_user.first_name} @{message.from_user.username}',
- photo=message.photo[-1].file_id,
- reply_markup=markup
- )
- #TODO: Не понятна реализация с альбомами от слова совсем
- #elif message.content_type == 'photo' and message.media_group_id != None:
- # bot.forward_message(chat_id=IMPORTANT_LOGS, from_chat_id=message.chat.id, message_id=message.message_id )
- else:
- pass
- except:
- if LOGS:
- username = message.from_user.first_name
- error_message = str(BotDB.get_error_message_from_db(5)).replace('username', username)
- bot.send_message(chat_id=IMPORTANT_LOGS, text=error_message)
-
- username = message.from_user.first_name
- success_send_message = BotDB.get_message_from_db('success_send_message', username)
-
- bot.send_message(message.chat.id, success_send_message, parse_mode='html', disable_web_page_preview=not PREVIEW_LINK)
- after_post(message=message)
-
- def resend_message_in_group_for_message(message):
- bot.forward_message(chat_id=GROUP_FOR_MESSAGE,
- from_chat_id=message.chat.id,
- message_id=message.message_id
- )
- username = message.from_user.first_name
- question = BotDB.get_message_from_db('question', username)
- bot.send_message(message.chat.id, question, parse_mode='html', disable_web_page_preview=not PREVIEW_LINK)
- try:
- pass
- except:
- if LOGS:
- bot.send_message(chat_id=IMPORTANT_LOGS, text=BotDB.get_error_message_from_db(4))
- after_post(message=message)
-
-
- #Админка
- @bot.callback_query_handler(func=lambda call: True)
- def post_for_group(call):
- if call.data == 'post_post_post' and call.message.content_type == 'text':
- try:
- bot.send_message(chat_id=MAIN_PUBLIC, text=call.message.text)
- bot.delete_message(chat_id=GROUP_FOR_POST, message_id=call.message.message_id)
- except:
- if LOGS:
- bot.send_message(chat_id=IMPORTANT_LOGS, text=BotDB.get_error_message_from_db(3))
- elif call.data == 'post_post_post' and call.message.content_type == 'photo':
- try:
- bot.send_photo(
- chat_id=MAIN_PUBLIC,
- caption=call.message.caption,
- photo=call.message.photo[-1].file_id,
- )
- bot.delete_message(chat_id=GROUP_FOR_POST, message_id=call.message.message_id)
- except:
- if LOGS:
- bot.send_message(chat_id=IMPORTANT_LOGS, text=BotDB.get_error_message_from_db(2))
- elif call.data == 'decline':
- try:
- bot.delete_message(chat_id=GROUP_FOR_POST, message_id=call.message.message_id)
- except:
- if LOGS:
- bot.send_message(IMPORTANT_LOGS, BotDB.get_error_message_from_db(1))
-
-
-if __name__ == '__main__':
- telegram_bot()
- try:
- bot.polling(none_stop=True)
- bot.enable_save_next_step_handlers(delay=2)
- bot.load_next_step_handlers()
- except ConnectionError as e:
- if LOGS:
- bot.send_message(IMPORTANT_LOGS, "Ошибка соединения, потерял связь")
- except Exception as r:
- if LOGS:
- bot.send_message(IMPORTANT_LOGS, "Произошло что-то непредвиденное, хелп")
- finally:
- if LOGS:
- bot.send_message(IMPORTANT_LOGS, 'Я упал, помогите')
\ No newline at end of file
+import configparser
+import os
+import sys
+from pathlib import Path
+from time import sleep
+from db import BotDB
+import telebot
+import random
+from datetime import datetime
+import time
+from telebot import types
+from telebot.apihelper import ApiTelegramException
+
+#Настройки
+config_path = os.path.join(sys.path[0], 'settings.ini')
+config = configparser.ConfigParser()
+config.read(config_path)
+#TELEGRAM
+BOT_TOKEN = config.get('Telegram', 'BOT_TOKEN')
+GROUP_FOR_POST = config.get('Telegram', 'group_for_posts')
+GROUP_FOR_MESSAGE = config.get('Telegram', 'group_for_message')
+MAIN_PUBLIC = config.get('Telegram', 'main_public')
+GROUP_FOR_LOGS = config.get('Telegram', 'group_for_logs')
+IMPORTANT_LOGS = config.get('Telegram', 'important_logs')
+PREVIEW_LINK = config.getboolean('Telegram', 'PREVIEW_LINK')
+#SETTINGS
+LOGS = config.getboolean('Settings', 'logs')
+TEST = config.getboolean('Settings', 'test')
+
+
+#Инициализируем бота и базку
+bot = telebot.TeleBot(BOT_TOKEN, parse_mode=None)
+BotDB = BotDB('tg-bot-database')
+
+def telegram_bot():
+ @bot.message_handler(commands=['start'])
+ def send_welcome(message):
+ #TODO: Здесь переписать через randint
+ #TODO: Тексты приветствий вынести в отдельный файл
+ try:
+ name_stick_hello = list(Path('Stick').rglob('Hello_*'))
+ number_stick_hello = random.randint(1, len(name_stick_hello))
+ random_stick_hello = open(name_stick_hello[number_stick_hello], 'rb')
+ #logging
+ if LOGS:
+ bot.forward_message(chat_id=GROUP_FOR_LOGS,
+ from_chat_id=message.chat.id,
+ message_id=message.message_id)
+ bot.send_sticker(message.chat.id, random_stick_hello)
+ sleep(0.3)
+ except:
+ if LOGS:
+ bot.send_message(IMPORTANT_LOGS, BotDB.get_error_message_from_db(7))
+
+ try:
+ user_id = message.from_user.id
+ first_name = message.from_user.first_name
+ full_name = message.from_user.full_name
+ is_bot = message.from_user.is_bot
+ username = message.from_user.username
+ language_code = message.from_user.language_code
+ time_UTC = int(time.time())
+ date_added = datetime.fromtimestamp(time_UTC)
+ date_changed = datetime.fromtimestamp(time_UTC)
+
+ markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
+ item1 = types.KeyboardButton("📢Предложить свой пост")
+ item2 = types.KeyboardButton("📩Связаться с админами")
+ # TODO: Выпилил, удалить
+ #item3 = types.KeyboardButton("❌Удалить пост")
+ if BotDB.user_exists(user_id):
+ is_need_sticker = BotDB.get_info_about_stickers(user_id=message.from_user.id)
+ if is_need_sticker == 0:
+ item5 = types.KeyboardButton("🤪Хочу стикеры")
+ BotDB.update_info_about_stickers(user_id=message.from_user.id)
+ markup.add(item1, item2, item5)
+ else:
+ markup.add(item1, item2)
+ else:
+ BotDB.add_new_user_in_db(user_id, first_name, full_name, username, is_bot, language_code, date_added, date_changed)
+ is_need_sticker = BotDB.get_info_about_stickers(user_id=message.from_user.id)
+ if is_need_sticker == 0:
+ item5 = types.KeyboardButton("🤪Хочу стикеры")
+ BotDB.update_info_about_stickers(user_id=message.from_user.id)
+ markup.add(item1, item2, item5)
+ else:
+ markup.add(item1, item2)
+ hello_message = BotDB.get_message_from_db('start_message', first_name)
+ bot.send_message(message.chat.id, hello_message, parse_mode='html', reply_markup=markup, disable_web_page_preview=not PREVIEW_LINK)
+ except:
+ if LOGS:
+ bot.send_message(IMPORTANT_LOGS, BotDB.get_error_message_from_db(8))
+ bot.register_next_step_handler(message, go_send_messages)
+
+ @bot.message_handler(commands=['end_command'])
+ def after_post(message):
+ markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
+ item1 = types.KeyboardButton("📢Предложить свой пост")
+ item2 = types.KeyboardButton("📩Связаться с админами")
+ # TODO: Скрыл, удалить обработчик
+ #item3 = types.KeyboardButton("❌Удалить пост")
+ item5 = types.KeyboardButton("👋🏼Сказать пока!")
+ markup.add(item1, item2, item5)
+ bot.send_message(message.chat.id,
+ "Выбери нужную кнопку внизу экрана".format(
+ message.from_user, bot.get_me()),
+ parse_mode='html', reply_markup=markup, disable_web_page_preview=not PREVIEW_LINK)
+ bot.register_next_step_handler(message, go_send_messages)
+
+ def go_send_messages(message):
+ global msg
+ if message.text == '📢Предложить свой пост':
+ try:
+ markup = types.ReplyKeyboardRemove()
+ first_name = message.from_user.first_name
+ suggest_news = BotDB.get_message_from_db('suggest_news', first_name)
+ bot.send_message(message.chat.id, suggest_news, parse_mode='html')
+ sleep(0.3)
+ first_name = message.from_user.first_name
+ suggest_news_2 = BotDB.get_message_from_db('suggest_news_2', first_name)
+ msg = bot.send_message(message.chat.id, suggest_news_2,parse_mode='html', reply_markup=markup)
+ except:
+ if LOGS:
+ bot.send_message(IMPORTANT_LOGS, BotDB.get_error_message_from_db(10))
+ #logging
+ if LOGS:
+ bot.forward_message(chat_id=GROUP_FOR_LOGS,
+ from_chat_id=message.chat.id,
+ message_id=message.message_id)
+ bot.register_next_step_handler(msg, resend_message_in_group_for_post)
+
+ elif message.text == "📩Связаться с админами":
+ first_name = message.from_user.first_name
+ connect_with_admin = BotDB.get_message_from_db('connect_with_admin', first_name)
+ msg = bot.send_message(message.chat.id, connect_with_admin, parse_mode="html")
+ #logging
+ if LOGS:
+ bot.forward_message(chat_id=GROUP_FOR_LOGS,
+ from_chat_id=message.chat.id,
+ message_id=message.message_id)
+ bot.register_next_step_handler(msg, resend_message_in_group_for_message)
+
+
+ elif message.text == "❌Удалить пост":
+ #TODO: требует автоматизации. На входе говорим пришли мне пост, на выходе получаем идентификатор поста, удаляем из ТГ. Насчет удаления из ВК надо подумать
+ first_name = message.from_user.first_name
+ del_message = BotDB.get_message_from_db('del_message', first_name)
+ msg = bot.send_message(message.chat.id, del_message, parse_mode="html")
+ #logging
+ if LOGS:
+ bot.forward_message(chat_id=GROUP_FOR_LOGS,
+ from_chat_id=message.chat.id,
+ message_id=message.message_id)
+ bot.register_next_step_handler(msg, resend_message_in_group_for_message)
+
+ elif message.text == "👋🏼Сказать пока!":
+ try:
+ name_stick_bye = list(Path('Stick').rglob('Universal_*'))
+ number_stick_bye = random.randint(1, len(name_stick_bye))
+ random_stick_bye = open(name_stick_bye[number_stick_bye], 'rb')
+ bot.send_sticker(message.chat.id, random_stick_bye)
+ except ApiTelegramException:
+ if LOGS:
+ bot.send_message(chat_id=IMPORTANT_LOGS, text=BotDB.get_error_message_from_db(11))
+
+ markup = types.ReplyKeyboardRemove()
+ try:
+ first_name = message.from_user.first_name
+ bye_message = BotDB.get_message_from_db('bye_message', first_name)
+ bot.send_message(message.chat.id, bye_message,
+ parse_mode='html', reply_markup=markup, disable_web_page_preview=not PREVIEW_LINK)
+ except:
+ if LOGS:
+ bot.send_message(chat_id=IMPORTANT_LOGS, text=BotDB.get_error_message_from_db(6))
+
+ if LOGS:
+ #logging
+ bot.forward_message(chat_id=GROUP_FOR_LOGS,
+ from_chat_id=message.chat.id,
+ message_id=message.message_id)
+ elif message.text == "🤪Хочу стикеры":
+ markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
+ item1 = types.KeyboardButton("📢Предложить свой пост")
+ item2 = types.KeyboardButton("📩Связаться с админами")
+ # TODO: Скрыл кнопку, убрать обработчик позднее
+ #item3 = types.KeyboardButton("❌Удалить пост")
+ item5 = types.KeyboardButton("👋🏼Сказать пока!")
+ markup.add(item1, item2, item5)
+ try:
+ if LOGS:
+ bot.forward_message(chat_id=GROUP_FOR_LOGS,
+ from_chat_id=message.chat.id,
+ message_id=message.message_id)
+ bot.send_message(message.chat.id, text='Хорошо, лови, добавить можно отсюда: https://t.me/addstickers/love_biysk', reply_markup=markup)
+ bot.register_next_step_handler(message, callback=go_send_messages)
+ except ApiTelegramException:
+ if LOGS:
+ bot.send_message(chat_id=IMPORTANT_LOGS, text=BotDB.get_error_message_from_db(12))
+ else:
+ try:
+ first_name = message.from_user.first_name
+ user_error = BotDB.get_message_from_db('user_error', first_name)
+ bot.send_message(message.chat.id, user_error, parse_mode='html', disable_web_page_preview=not PREVIEW_LINK)
+ except:
+ if LOGS:
+ bot.send_message(chat_id=IMPORTANT_LOGS, text=BotDB.get_error_message_from_db(9))
+ #logging
+ if LOGS:
+ bot.forward_message(chat_id=GROUP_FOR_LOGS,
+ from_chat_id=message.chat.id,
+ message_id=message.message_id)
+ bot.register_next_step_handler(message, callback=go_send_messages)
+
+ def resend_message_in_group_for_post(message):
+ markup = types.InlineKeyboardMarkup(row_width=1)
+ item1 = types.InlineKeyboardButton("Опубликовать", callback_data='post_post_post')
+ item2 = types.InlineKeyboardButton("Отклонить", callback_data='decline')
+ markup.add(item1, item2)
+ try:
+ if message.content_type == 'text':
+ post_text = message.text.lower()
+ if post_text.find('неанон') != -1 or post_text.find('не анон') != -1:
+ bot.send_message(
+ #TODO: GROUP_FOR_POST
+ chat_id=GROUP_FOR_POST,
+ text=f'Пост из ТГ:\n{post_text}\n\nАвтор поста: {message.from_user.first_name} @{message.from_user.username}',
+ reply_markup=markup
+ )
+ elif post_text.find('анон') != -1:
+ bot.send_message(
+ # TODO: GROUP_FOR_POST
+ chat_id=GROUP_FOR_POST,
+ text=f'Пост из ТГ:\n{message.text}\n\nПост опубликован анонимно',
+ reply_markup=markup
+ )
+ else:
+ bot.send_message(
+ # TODO: GROUP_FOR_POST
+ chat_id=GROUP_FOR_POST,
+ text=f'Пост из ТГ:\n{post_text}\n\nАвтор поста: {message.from_user.first_name} @{message.from_user.username}',
+ reply_markup=markup
+ )
+ elif message.content_type == 'photo' and message.media_group_id == None:
+ post_text_for_photo = message.caption.lower()
+ if post_text_for_photo.find('неанон') != -1 or post_text_for_photo.find('не анон') != -1:
+ bot.send_photo(
+ # TODO: GROUP_FOR_POST
+ chat_id=GROUP_FOR_POST,
+ caption=f'Пост из ТГ:\n{post_text_for_photo}\n\nАвтор поста: {message.from_user.first_name} @{message.from_user.username}',
+ photo=message.photo[-1].file_id,
+ reply_markup=markup
+ )
+ elif post_text_for_photo.find('анон') != -1 or post_text_for_photo.find('анон') != -1:
+ bot.send_photo(
+ # TODO: GROUP_FOR_POST
+ chat_id=GROUP_FOR_POST,
+ caption=f'Пост из ТГ:\n{post_text_for_photo}\n\nПост опубликован анонимно',
+ photo=message.photo[-1].file_id,
+ reply_markup=markup
+ )
+ else:
+ bot.send_photo(
+ # TODO: GROUP_FOR_POST
+ chat_id=GROUP_FOR_POST,
+ caption=f'Пост из ТГ:\n{post_text_for_photo}\n\nАвтор поста: {message.from_user.first_name} @{message.from_user.username}',
+ photo=message.photo[-1].file_id,
+ reply_markup=markup
+ )
+ #TODO: Не понятна реализация с альбомами от слова совсем
+ #elif message.content_type == 'photo' and message.media_group_id != None:
+ # bot.forward_message(chat_id=IMPORTANT_LOGS, from_chat_id=message.chat.id, message_id=message.message_id )
+ else:
+ pass
+ except:
+ if LOGS:
+ username = message.from_user.first_name
+ error_message = str(BotDB.get_error_message_from_db(5)).replace('username', username)
+ bot.send_message(chat_id=IMPORTANT_LOGS, text=error_message)
+
+ username = message.from_user.first_name
+ success_send_message = BotDB.get_message_from_db('success_send_message', username)
+
+ bot.send_message(message.chat.id, success_send_message, parse_mode='html', disable_web_page_preview=not PREVIEW_LINK)
+ after_post(message=message)
+
+ def resend_message_in_group_for_message(message):
+ bot.forward_message(chat_id=GROUP_FOR_MESSAGE,
+ from_chat_id=message.chat.id,
+ message_id=message.message_id
+ )
+ username = message.from_user.first_name
+ question = BotDB.get_message_from_db('question', username)
+ bot.send_message(message.chat.id, question, parse_mode='html', disable_web_page_preview=not PREVIEW_LINK)
+ try:
+ pass
+ except:
+ if LOGS:
+ bot.send_message(chat_id=IMPORTANT_LOGS, text=BotDB.get_error_message_from_db(4))
+ after_post(message=message)
+
+
+ #Админка
+ @bot.callback_query_handler(func=lambda call: True)
+ def post_for_group(call):
+ if call.data == 'post_post_post' and call.message.content_type == 'text':
+ try:
+ bot.send_message(chat_id=MAIN_PUBLIC, text=call.message.text)
+ bot.delete_message(chat_id=GROUP_FOR_POST, message_id=call.message.message_id)
+ except:
+ if LOGS:
+ bot.send_message(chat_id=IMPORTANT_LOGS, text=BotDB.get_error_message_from_db(3))
+ elif call.data == 'post_post_post' and call.message.content_type == 'photo':
+ try:
+ bot.send_photo(
+ chat_id=MAIN_PUBLIC,
+ caption=call.message.caption,
+ photo=call.message.photo[-1].file_id,
+ )
+ bot.delete_message(chat_id=GROUP_FOR_POST, message_id=call.message.message_id)
+ except:
+ if LOGS:
+ bot.send_message(chat_id=IMPORTANT_LOGS, text=BotDB.get_error_message_from_db(2))
+ elif call.data == 'decline':
+ try:
+ bot.delete_message(chat_id=GROUP_FOR_POST, message_id=call.message.message_id)
+ except:
+ if LOGS:
+ bot.send_message(IMPORTANT_LOGS, BotDB.get_error_message_from_db(1))
+
+
+if __name__ == '__main__':
+ telegram_bot()
+ while True:
+ try:
+ bot.polling(none_stop=True)
+ bot.enable_save_next_step_handlers(delay=2)
+ bot.load_next_step_handlers()
+ except (ConnectionError, Exception):
+ print("Произошла ошибка, перезапуск бота")
\ No newline at end of file
diff --git a/settings_example.ini b/settings_example.ini
index 33efa8f..b088ac8 100644
--- a/settings_example.ini
+++ b/settings_example.ini
@@ -1,9 +1,9 @@
-[Telegram]
-bot_token = 5719450198:AAEI6hQgwiIcxMLGvVrPdopWqVlwHqR0QoU
-preview_link = false
-main_public = @love_biysk
-group_for_posts = -793789724
-group_for_message = -736077298
-group_for_logs = -721685792
-important_logs = -625900899
+[Telegram]
+bot_token = 5719450198:AAEI6hQgwiIcxMLGvVrPdopWqVlwHqR0QoU
+preview_link = false
+main_public = @love_biysk
+group_for_posts = -793789724
+group_for_message = -736077298
+group_for_logs = -721685792
+important_logs = -625900899
test_channel = -1001725605158
\ No newline at end of file
diff --git a/voice_bot.py b/voice_bot.py
index 1fa61ec..d441245 100644
--- a/voice_bot.py
+++ b/voice_bot.py
@@ -1,318 +1,318 @@
-import configparser
-import os
-import sys
-from pathlib import Path
-from time import sleep
-
-import db
-from db import BotDB
-import telebot
-import random
-from datetime import datetime
-import time
-from telebot import types
-
-#Настройки
-config_path = os.path.join(sys.path[0], 'settings.ini')
-config = configparser.ConfigParser()
-config.read(config_path)
-#TELEGRAM
-BOT_TOKEN = config.get('Telegram', 'listen_bot_token')
-GROUP_FOR_POST = config.get('Telegram', 'group_for_posts')
-GROUP_FOR_MESSAGE = config.get('Telegram', 'group_for_message')
-MAIN_PUBLIC = config.get('Telegram', 'main_public')
-GROUP_FOR_LOGS = config.get('Telegram', 'group_for_logs')
-IMPORTANT_LOGS = config.get('Telegram', 'important_logs')
-PREVIEW_LINK = config.getboolean('Telegram', 'PREVIEW_LINK')
-#SETTINGS
-LOGS = config.getboolean('Settings', 'logs')
-TEST = config.getboolean('Settings', 'test')
-
-
-#Инициализируем бота и базку
-bot = telebot.TeleBot(BOT_TOKEN, parse_mode=None)
-BotDB = BotDB('tg-bot-database')
-
-
-
-def telegram_bot():
- @bot.message_handler(commands=['start'])
- def send_welcome(message):
- try:
- name_stick_hello = list(Path('Stick').rglob('Hello_*'))
- number_stick_hello = random.randint(1, len(name_stick_hello))
- random_stick_hello = open(name_stick_hello[number_stick_hello], 'rb')
- #logging
- if LOGS:
- bot.forward_message(chat_id=GROUP_FOR_LOGS,
- from_chat_id=message.chat.id,
- message_id=message.message_id)
- bot.send_sticker(message.chat.id, random_stick_hello)
- sleep(0.3)
- except:
- if LOGS:
- bot.send_message(IMPORTANT_LOGS, BotDB.get_error_message_from_db(7))
- markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
- item1 = types.KeyboardButton("🎤Высказаться")
- item2 = types.KeyboardButton("🎧Послушать")
- markup.add(item1, item2)
- bot.send_message(message.chat.id, "Привет.", parse_mode='html', reply_markup=markup,
- disable_web_page_preview=not PREVIEW_LINK)
- time.sleep(0.3)
- bot.send_message(message.chat.id, "Здесь можно послушать голосовые сообщения от совершенно незнакомых людей из Бийска", parse_mode='html', reply_markup=markup,
- disable_web_page_preview=not PREVIEW_LINK)
- time.sleep(1)
- bot.send_message(message.chat.id, "Это почти как написать письмо, положить его в бутылку и швырнуть в океан. Никогда не узнаешь, послушал его кто-то или нет и ответить тоже не получится..", parse_mode='html', reply_markup=markup,
- disable_web_page_preview=not PREVIEW_LINK)
- time.sleep(0.8)
- bot.send_message(message.chat.id, "Записывать можно всё что угодно — никаких правил нет. Главное — твой голос, хотя бы на 5-10 секунд", parse_mode='html', reply_markup=markup,
- disable_web_page_preview=not PREVIEW_LINK)
- time.sleep(1.5)
- bot.send_message(message.chat.id, "Здесь всё анонимно: тот, кому я отправлю твое сообщение, не узнает ни твое имя, ни твой аккаунт (так что можно не стесняться говорить то, что не стал(а) бы выкладывать в собственные соцсети)", parse_mode='html', reply_markup=markup,
- disable_web_page_preview=not PREVIEW_LINK)
- time.sleep(1.3)
- bot.send_message(message.chat.id, "Если не знаешь, что сказать, можешь просто прочитать любое текстовое сообщение из недавно полученных или отправленных (или спеть, рассказать стихотворенье)", parse_mode='html', reply_markup=markup,
- disable_web_page_preview=not PREVIEW_LINK)
- time.sleep(0.8)
- bot.send_message(message.chat.id,
- "Так же можешь ознакомиться с инструкцией к боту по команде /help",
- parse_mode='html', reply_markup=markup,
- disable_web_page_preview=not PREVIEW_LINK)
- time.sleep(0.8)
- msg = bot.send_message(message.chat.id, "ну всё, достаточно инструкций. записывайся! Микрофон твой - 🎤", parse_mode='html', reply_markup=markup,
- disable_web_page_preview=not PREVIEW_LINK)
- bot.register_next_step_handler(msg, standup)
-
-
- def last_message():
- # функция с отображением сообщения "Последнее сообщение было записано"
- date_from_db = BotDB.last_date_audio()
- parse_date = datetime.strptime(date_from_db, "%Y-%m-%d %H:%M:%S")
- last_voice_time_timestamp = time.mktime(parse_date.timetuple())
- time_now_timestamp = time.time()
- date_difference = time_now_timestamp - last_voice_time_timestamp
- # считаем минуты, часы, дни
- much_minutes_ago = round(date_difference / 60, 0)
- much_hour_ago = round(date_difference / 3600, 0)
- much_days_ago = int(round(much_hour_ago / 24, 0))
- message_with_date = ''
- if much_minutes_ago <= 60:
- word_minute = plural_time(1, much_minutes_ago)
- message_with_date = f'Последнее сообщение было записано {word_minute} назад'
- elif much_minutes_ago > 60 and much_hour_ago <= 24:
- word_hour = plural_time(2, much_hour_ago)
- message_with_date = f'Последнее сообщение было записано {word_hour} назад'
- elif much_hour_ago > 24:
- word_day = plural_time(3, much_days_ago)
- message_with_date = f'Последнее сообщение было записано {word_day} назад'
- return message_with_date
-
- def standup(message):
- # Клавиатуру добавляем
- markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
- item1 = types.KeyboardButton("🎤Высказаться")
- item2 = types.KeyboardButton("🎧Послушать")
- markup.add(item1, item2)
- try:
- if message.text == '🎤Высказаться':
- markup = types.ReplyKeyboardRemove()
- if LOGS:
- # logging
- bot.forward_message(chat_id=GROUP_FOR_LOGS,
- from_chat_id=message.chat.id,
- message_id=message.message_id)
- if TEST:
- bot.forward_message(chat_id=GROUP_FOR_LOGS, from_chat_id=message.chat.id, message_id=message.id)
- bot.send_message(chat_id=message.chat.id, text='Хорошо, теперь пришли мне свое голосовое сообщение', reply_markup=markup)
- message_with_date = last_message()
- msg = bot.send_message(chat_id=message.chat.id, text=message_with_date, parse_mode="html")
- bot.register_next_step_handler(msg, save_voice_message)
- elif message.text == '🎧Послушать':
- check_audio = BotDB.check_listen_audio(user_id=message.from_user.id)
- list_audio = list(check_audio)
- if TEST:
- bot.forward_message(chat_id=GROUP_FOR_LOGS, from_chat_id=message.chat.id, message_id=message.id)
- if list_audio == []:
- bot.send_message(message.chat.id, 'Прости, ты прослушал все аудио😔. Возвращайся позже, возможно наша база пополнится', reply_markup=markup)
- message_with_date = last_message()
- msg = bot.send_message(chat_id=message.chat.id, text=message_with_date, parse_mode="html")
- bot.register_next_step_handler(msg, standup)
- else:
- number_element = random.randint(0, len(list_audio) - 1)
- audio_for_user = check_audio[number_element]
- path = Path(f'voice_users/{audio_for_user}.ogg')
- voice = open(path, 'rb')
- #Маркируем сообщение как прослушанное
- BotDB.mark_listened_audio(audio_for_user, user_id=message.from_user.id)
-
- msg = bot.send_voice(message.chat.id, voice=voice, reply_markup=markup)
- bot.register_next_step_handler(msg, standup)
-
- if LOGS:
- # logging
- bot.forward_message(chat_id=GROUP_FOR_LOGS,
- from_chat_id=message.chat.id,
- message_id=message.message_id)
- if TEST:
- bot.forward_message(chat_id=GROUP_FOR_LOGS, from_chat_id=message.chat.id, message_id=message.id)
- elif message.text == '/restart':
- msg = bot.send_message(message.chat.id, 'Я перезапущен, и готов к работе🥳', reply_markup=markup)
- bot.forward_message(chat_id=GROUP_FOR_LOGS,
- from_chat_id=message.chat.id,
- message_id=message.message_id)
- bot.register_next_step_handler(msg, standup)
- elif message.text == '/help':
- help_function(message)
- else:
- msg = bot.send_message(chat_id=message.chat.id, text='Я тебя не понял, воспользуйся меню', reply_markup=markup)
- bot.register_next_step_handler(msg, standup)
- except:
- if LOGS:
- bot.send_message(chat_id=IMPORTANT_LOGS, text=BotDB.get_error_message_from_db(4))
-
-
- def plural_time(type, n):
- word = []
- if type == 1:
- word = ['минуту', 'минуты', 'минут']
- elif type == 2:
- word = ['час', 'часа', 'часов']
- elif type == 3:
- word = ['день', 'дня', 'дней']
- else:
- pass
-
- if n % 10 == 1 and n % 100 != 11:
- p = 0
- elif 2 <= n % 10 <= 4 and (n % 100 < 10 or n % 100 >= 20):
- p = 1
- else:
- p = 2
- new_number = int(n)
- return str(new_number) + ' ' + word[p]
-
- def save_voice_message(message):
- if message.content_type == 'voice':
- if TEST:
- bot.forward_message(chat_id=GROUP_FOR_LOGS, from_chat_id=message.chat.id, message_id=message.id)
- file_name = ''
- file_id = 1
- #Проверяем что запись о файле есть в базе данных
- is_having_audio_from_user = BotDB.get_last_user_audio_record(user_id=message.from_user.id)
- if is_having_audio_from_user is False:
- #Если нет, то генерируем имя файла
- file_name = f'message_from_{message.from_user.id}_number_{file_id}'
- else:
- #Иначе берем последнюю запись из БД, добавляем к ней 1, и создаем новую запись
- file_name = BotDB.get_path_for_audio_record(user_id=message.from_user.id)
- file_id = BotDB.get_id_for_audio_record(message.from_user.id) + 1
- path = Path(f'voice_users/{file_name}.ogg')
- if path.exists():
- file_name = f'message_from_{message.from_user.id}_number_{file_id}'
- else:
- pass
- #Собираем инфо о сообщении
- author_id = message.from_user.id
- time_UTC = int(time.time())
- date_added = datetime.fromtimestamp(time_UTC)
- #Сохраняем в базку
- BotDB.add_audio_record(file_name, author_id, date_added, 0, file_id)
- #Сохраняем файл на сервер
- file_info = bot.get_file(message.voice.file_id)
- downloaded_file = bot.download_file(file_info.file_path)
- with open(f'voice_users/{file_name}.ogg', 'wb') as new_file:
- new_file.write(downloaded_file)
- #инициализируем кнопки
- markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
- item1 = types.KeyboardButton("🎤Высказаться")
- item2 = types.KeyboardButton("🎧Послушать")
- markup.add(item1, item2)
- bot.send_message(chat_id=message.chat.id, text='Окей, сохранил!👌', reply_markup=markup)
- #menu_standup(message=message)
- bot.register_next_step_handler(message, standup)
- else:
- #TODO: Если пришлют фото, он не работает
- if TEST:
- bot.forward_message(chat_id=GROUP_FOR_LOGS, from_chat_id=message.chat.id, message_id=message.id)
- markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
- item1 = types.KeyboardButton("🎤Высказаться")
- item2 = types.KeyboardButton("🎧Послушать")
- markup.add(item1, item2)
- msg = bot.send_message(chat_id=message.chat.id, text='Я тебя не понимаю🤷♀️ запиши голосовое', reply_markup=markup)
- bot.register_next_step_handler(msg, standup)
-
- @bot.message_handler(commands=['restart'])
- def restart_function(message):
- return standup(message)
-
- @bot.message_handler(commands=['help'])
- def help_function(message):
- msg = bot.send_message(chat_id=message.chat.id, text='Скорее всего ответы на твои вопросы есть здесь, ознакомься: https://telegra.ph/Instrukciya-k-botu-Golosa-Bijsk-10-11-2'
- '\nЕсли это не поможет, пиши в тг: @Kerrad1',disable_web_page_preview=not PREVIEW_LINK)
- bot.register_next_step_handler(msg, standup)
-
- @bot.message_handler(commands=['send'])
- def notify(message):
- """Функция для рассылки сообщений пользователям бота"""
- admins = [842766148]
- command_sender = message.from_user.id
- if command_sender in admins:
- markup = types.InlineKeyboardMarkup(row_width=1)
- button = types.InlineKeyboardButton(text='Я прочитал ', callback_data='from_user')
- success_send_message = 0
- error_send_message = 0
- markup.add(button)
- user_ids = BotDB.get_all_user_id()
- # Парсим список id юзеров для рассылки и рассылаем сообщения
- for i in user_ids:
- username = BotDB.get_username(i)
- try:
- bot.send_message(chat_id=i,
- text='Привет, на связи админ. Первая тестовая рассылка через этого бота, не суди строго, обещаю не злоупотреблять этим))\n'
- 'Собственно хотел сказать следующее, сегодня ночью обновил бота, добавил ему две функции /restart и /help. '
- 'Рекомендую ознакомиться со статьей в /help, там я подробно описал как сейчас все работает. '
- 'Если у тебя будут предложения по доработке бота или новому функционал, пиши не стесняйся @Kerrad1. '
- 'Так же прошу нажать на кнопку под сообщением, чтобы я понял что ты прочитал сообщение❤️\n\nНа этом у меня все, пока, до следующего релиза', reply_markup=markup)
- bot.send_message(chat_id=message.chat.id,
- text=f'Успешно отправлено - @{username}')
- success_send_message += 1
- except Exception as e:
- bot.send_message(chat_id=message.chat.id,
- text=f'Этому юзеру не отправилось - @{username}')
- error_send_message += 1
- bot.send_message(chat_id=message.chat.id,
- text=f'Количество успешных отправок - {success_send_message}', parse_mode='html')
- bot.send_message(chat_id=message.chat.id,
- text=f'Количество неуспешных отправок - {error_send_message}', parse_mode='html')
- standup(message)
- else:
- bot.send_message(command_sender, f'у вас нет прав для запуска команды')
- bot.forward_message(chat_id=GROUP_FOR_LOGS, from_chat_id=message.chat.id, message_id=message.id)
- standup(message)
-
- @bot.callback_query_handler(func=lambda call: True)
- def post_for_group(call):
- if call.data == 'from_user' and call.message.content_type == 'text':
- try:
- command_sender = call.message.from_user.id
- bot.answer_callback_query(call.id, text="Мне приятно, спасибо ❤")
- #Попробовать варианты если не сработает call.from_user.username
- bot.send_message(chat_id=842766148, text=f'Юзер с ником @{call.message.chat.username} по имени {call.message.chat.first_name} прочитал сообщение')
- except:
- print('что-то не так')
-
-if __name__ == '__main__':
- telegram_bot()
- try:
- bot.polling(none_stop=True)
- bot.enable_save_next_step_handlers(delay=2)
- bot.load_next_step_handlers()
- except ConnectionError as e:
- if LOGS:
- bot.send_message(IMPORTANT_LOGS, "Ошибка соединения, потерял войс бот связь")
- except Exception as r:
- if LOGS:
- bot.send_message(IMPORTANT_LOGS, "Произошло что-то непредвиденное, хелп. Войс бот болеет")
- finally:
- if LOGS:
+import configparser
+import os
+import sys
+from pathlib import Path
+from time import sleep
+
+import db
+from db import BotDB
+import telebot
+import random
+from datetime import datetime
+import time
+from telebot import types
+
+#Настройки
+config_path = os.path.join(sys.path[0], 'settings.ini')
+config = configparser.ConfigParser()
+config.read(config_path)
+#TELEGRAM
+BOT_TOKEN = config.get('Telegram', 'listen_bot_token')
+GROUP_FOR_POST = config.get('Telegram', 'group_for_posts')
+GROUP_FOR_MESSAGE = config.get('Telegram', 'group_for_message')
+MAIN_PUBLIC = config.get('Telegram', 'main_public')
+GROUP_FOR_LOGS = config.get('Telegram', 'group_for_logs')
+IMPORTANT_LOGS = config.get('Telegram', 'important_logs')
+PREVIEW_LINK = config.getboolean('Telegram', 'PREVIEW_LINK')
+#SETTINGS
+LOGS = config.getboolean('Settings', 'logs')
+TEST = config.getboolean('Settings', 'test')
+
+
+#Инициализируем бота и базку
+bot = telebot.TeleBot(BOT_TOKEN, parse_mode=None)
+BotDB = BotDB('tg-bot-database')
+
+
+
+def telegram_bot():
+ @bot.message_handler(commands=['start'])
+ def send_welcome(message):
+ try:
+ name_stick_hello = list(Path('Stick').rglob('Hello_*'))
+ number_stick_hello = random.randint(1, len(name_stick_hello))
+ random_stick_hello = open(name_stick_hello[number_stick_hello], 'rb')
+ #logging
+ if LOGS:
+ bot.forward_message(chat_id=GROUP_FOR_LOGS,
+ from_chat_id=message.chat.id,
+ message_id=message.message_id)
+ bot.send_sticker(message.chat.id, random_stick_hello)
+ sleep(0.3)
+ except:
+ if LOGS:
+ bot.send_message(IMPORTANT_LOGS, BotDB.get_error_message_from_db(7))
+ markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
+ item1 = types.KeyboardButton("🎤Высказаться")
+ item2 = types.KeyboardButton("🎧Послушать")
+ markup.add(item1, item2)
+ bot.send_message(message.chat.id, "Привет.", parse_mode='html', reply_markup=markup,
+ disable_web_page_preview=not PREVIEW_LINK)
+ time.sleep(0.3)
+ bot.send_message(message.chat.id, "Здесь можно послушать голосовые сообщения от совершенно незнакомых людей из Бийска", parse_mode='html', reply_markup=markup,
+ disable_web_page_preview=not PREVIEW_LINK)
+ time.sleep(1)
+ bot.send_message(message.chat.id, "Это почти как написать письмо, положить его в бутылку и швырнуть в океан. Никогда не узнаешь, послушал его кто-то или нет и ответить тоже не получится..", parse_mode='html', reply_markup=markup,
+ disable_web_page_preview=not PREVIEW_LINK)
+ time.sleep(0.8)
+ bot.send_message(message.chat.id, "Записывать можно всё что угодно — никаких правил нет. Главное — твой голос, хотя бы на 5-10 секунд", parse_mode='html', reply_markup=markup,
+ disable_web_page_preview=not PREVIEW_LINK)
+ time.sleep(1.5)
+ bot.send_message(message.chat.id, "Здесь всё анонимно: тот, кому я отправлю твое сообщение, не узнает ни твое имя, ни твой аккаунт (так что можно не стесняться говорить то, что не стал(а) бы выкладывать в собственные соцсети)", parse_mode='html', reply_markup=markup,
+ disable_web_page_preview=not PREVIEW_LINK)
+ time.sleep(1.3)
+ bot.send_message(message.chat.id, "Если не знаешь, что сказать, можешь просто прочитать любое текстовое сообщение из недавно полученных или отправленных (или спеть, рассказать стихотворенье)", parse_mode='html', reply_markup=markup,
+ disable_web_page_preview=not PREVIEW_LINK)
+ time.sleep(0.8)
+ bot.send_message(message.chat.id,
+ "Так же можешь ознакомиться с инструкцией к боту по команде /help",
+ parse_mode='html', reply_markup=markup,
+ disable_web_page_preview=not PREVIEW_LINK)
+ time.sleep(0.8)
+ msg = bot.send_message(message.chat.id, "ну всё, достаточно инструкций. записывайся! Микрофон твой - 🎤", parse_mode='html', reply_markup=markup,
+ disable_web_page_preview=not PREVIEW_LINK)
+ bot.register_next_step_handler(msg, standup)
+
+
+ def last_message():
+ # функция с отображением сообщения "Последнее сообщение было записано"
+ date_from_db = BotDB.last_date_audio()
+ parse_date = datetime.strptime(date_from_db, "%Y-%m-%d %H:%M:%S")
+ last_voice_time_timestamp = time.mktime(parse_date.timetuple())
+ time_now_timestamp = time.time()
+ date_difference = time_now_timestamp - last_voice_time_timestamp
+ # считаем минуты, часы, дни
+ much_minutes_ago = round(date_difference / 60, 0)
+ much_hour_ago = round(date_difference / 3600, 0)
+ much_days_ago = int(round(much_hour_ago / 24, 0))
+ message_with_date = ''
+ if much_minutes_ago <= 60:
+ word_minute = plural_time(1, much_minutes_ago)
+ message_with_date = f'Последнее сообщение было записано {word_minute} назад'
+ elif much_minutes_ago > 60 and much_hour_ago <= 24:
+ word_hour = plural_time(2, much_hour_ago)
+ message_with_date = f'Последнее сообщение было записано {word_hour} назад'
+ elif much_hour_ago > 24:
+ word_day = plural_time(3, much_days_ago)
+ message_with_date = f'Последнее сообщение было записано {word_day} назад'
+ return message_with_date
+
+ def standup(message):
+ # Клавиатуру добавляем
+ markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
+ item1 = types.KeyboardButton("🎤Высказаться")
+ item2 = types.KeyboardButton("🎧Послушать")
+ markup.add(item1, item2)
+ try:
+ if message.text == '🎤Высказаться':
+ markup = types.ReplyKeyboardRemove()
+ if LOGS:
+ # logging
+ bot.forward_message(chat_id=GROUP_FOR_LOGS,
+ from_chat_id=message.chat.id,
+ message_id=message.message_id)
+ if TEST:
+ bot.forward_message(chat_id=GROUP_FOR_LOGS, from_chat_id=message.chat.id, message_id=message.id)
+ bot.send_message(chat_id=message.chat.id, text='Хорошо, теперь пришли мне свое голосовое сообщение', reply_markup=markup)
+ message_with_date = last_message()
+ msg = bot.send_message(chat_id=message.chat.id, text=message_with_date, parse_mode="html")
+ bot.register_next_step_handler(msg, save_voice_message)
+ elif message.text == '🎧Послушать':
+ check_audio = BotDB.check_listen_audio(user_id=message.from_user.id)
+ list_audio = list(check_audio)
+ if TEST:
+ bot.forward_message(chat_id=GROUP_FOR_LOGS, from_chat_id=message.chat.id, message_id=message.id)
+ if list_audio == []:
+ bot.send_message(message.chat.id, 'Прости, ты прослушал все аудио😔. Возвращайся позже, возможно наша база пополнится', reply_markup=markup)
+ message_with_date = last_message()
+ msg = bot.send_message(chat_id=message.chat.id, text=message_with_date, parse_mode="html")
+ bot.register_next_step_handler(msg, standup)
+ else:
+ number_element = random.randint(0, len(list_audio) - 1)
+ audio_for_user = check_audio[number_element]
+ path = Path(f'voice_users/{audio_for_user}.ogg')
+ voice = open(path, 'rb')
+ #Маркируем сообщение как прослушанное
+ BotDB.mark_listened_audio(audio_for_user, user_id=message.from_user.id)
+
+ msg = bot.send_voice(message.chat.id, voice=voice, reply_markup=markup)
+ bot.register_next_step_handler(msg, standup)
+
+ if LOGS:
+ # logging
+ bot.forward_message(chat_id=GROUP_FOR_LOGS,
+ from_chat_id=message.chat.id,
+ message_id=message.message_id)
+ if TEST:
+ bot.forward_message(chat_id=GROUP_FOR_LOGS, from_chat_id=message.chat.id, message_id=message.id)
+ elif message.text == '/restart':
+ msg = bot.send_message(message.chat.id, 'Я перезапущен, и готов к работе🥳', reply_markup=markup)
+ bot.forward_message(chat_id=GROUP_FOR_LOGS,
+ from_chat_id=message.chat.id,
+ message_id=message.message_id)
+ bot.register_next_step_handler(msg, standup)
+ elif message.text == '/help':
+ help_function(message)
+ else:
+ msg = bot.send_message(chat_id=message.chat.id, text='Я тебя не понял, воспользуйся меню', reply_markup=markup)
+ bot.register_next_step_handler(msg, standup)
+ except:
+ if LOGS:
+ bot.send_message(chat_id=IMPORTANT_LOGS, text=BotDB.get_error_message_from_db(4))
+
+
+ def plural_time(type, n):
+ word = []
+ if type == 1:
+ word = ['минуту', 'минуты', 'минут']
+ elif type == 2:
+ word = ['час', 'часа', 'часов']
+ elif type == 3:
+ word = ['день', 'дня', 'дней']
+ else:
+ pass
+
+ if n % 10 == 1 and n % 100 != 11:
+ p = 0
+ elif 2 <= n % 10 <= 4 and (n % 100 < 10 or n % 100 >= 20):
+ p = 1
+ else:
+ p = 2
+ new_number = int(n)
+ return str(new_number) + ' ' + word[p]
+
+ def save_voice_message(message):
+ if message.content_type == 'voice':
+ if TEST:
+ bot.forward_message(chat_id=GROUP_FOR_LOGS, from_chat_id=message.chat.id, message_id=message.id)
+ file_name = ''
+ file_id = 1
+ #Проверяем что запись о файле есть в базе данных
+ is_having_audio_from_user = BotDB.get_last_user_audio_record(user_id=message.from_user.id)
+ if is_having_audio_from_user is False:
+ #Если нет, то генерируем имя файла
+ file_name = f'message_from_{message.from_user.id}_number_{file_id}'
+ else:
+ #Иначе берем последнюю запись из БД, добавляем к ней 1, и создаем новую запись
+ file_name = BotDB.get_path_for_audio_record(user_id=message.from_user.id)
+ file_id = BotDB.get_id_for_audio_record(message.from_user.id) + 1
+ path = Path(f'voice_users/{file_name}.ogg')
+ if path.exists():
+ file_name = f'message_from_{message.from_user.id}_number_{file_id}'
+ else:
+ pass
+ #Собираем инфо о сообщении
+ author_id = message.from_user.id
+ time_UTC = int(time.time())
+ date_added = datetime.fromtimestamp(time_UTC)
+ #Сохраняем в базку
+ BotDB.add_audio_record(file_name, author_id, date_added, 0, file_id)
+ #Сохраняем файл на сервер
+ file_info = bot.get_file(message.voice.file_id)
+ downloaded_file = bot.download_file(file_info.file_path)
+ with open(f'voice_users/{file_name}.ogg', 'wb') as new_file:
+ new_file.write(downloaded_file)
+ #инициализируем кнопки
+ markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
+ item1 = types.KeyboardButton("🎤Высказаться")
+ item2 = types.KeyboardButton("🎧Послушать")
+ markup.add(item1, item2)
+ bot.send_message(chat_id=message.chat.id, text='Окей, сохранил!👌', reply_markup=markup)
+ #menu_standup(message=message)
+ bot.register_next_step_handler(message, standup)
+ else:
+ #TODO: Если пришлют фото, он не работает
+ if TEST:
+ bot.forward_message(chat_id=GROUP_FOR_LOGS, from_chat_id=message.chat.id, message_id=message.id)
+ markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
+ item1 = types.KeyboardButton("🎤Высказаться")
+ item2 = types.KeyboardButton("🎧Послушать")
+ markup.add(item1, item2)
+ msg = bot.send_message(chat_id=message.chat.id, text='Я тебя не понимаю🤷♀️ запиши голосовое', reply_markup=markup)
+ bot.register_next_step_handler(msg, standup)
+
+ @bot.message_handler(commands=['restart'])
+ def restart_function(message):
+ return standup(message)
+
+ @bot.message_handler(commands=['help'])
+ def help_function(message):
+ msg = bot.send_message(chat_id=message.chat.id, text='Скорее всего ответы на твои вопросы есть здесь, ознакомься: https://telegra.ph/Instrukciya-k-botu-Golosa-Bijsk-10-11-2'
+ '\nЕсли это не поможет, пиши в тг: @Kerrad1',disable_web_page_preview=not PREVIEW_LINK)
+ bot.register_next_step_handler(msg, standup)
+
+ @bot.message_handler(commands=['send'])
+ def notify(message):
+ """Функция для рассылки сообщений пользователям бота"""
+ admins = [842766148]
+ command_sender = message.from_user.id
+ if command_sender in admins:
+ markup = types.InlineKeyboardMarkup(row_width=1)
+ button = types.InlineKeyboardButton(text='Я прочитал ', callback_data='from_user')
+ success_send_message = 0
+ error_send_message = 0
+ markup.add(button)
+ user_ids = BotDB.get_all_user_id()
+ # Парсим список id юзеров для рассылки и рассылаем сообщения
+ for i in user_ids:
+ username = BotDB.get_username(i)
+ try:
+ bot.send_message(chat_id=i,
+ text='Привет, на связи админ. Первая тестовая рассылка через этого бота, не суди строго, обещаю не злоупотреблять этим))\n'
+ 'Собственно хотел сказать следующее, сегодня ночью обновил бота, добавил ему две функции /restart и /help. '
+ 'Рекомендую ознакомиться со статьей в /help, там я подробно описал как сейчас все работает. '
+ 'Если у тебя будут предложения по доработке бота или новому функционал, пиши не стесняйся @Kerrad1. '
+ 'Так же прошу нажать на кнопку под сообщением, чтобы я понял что ты прочитал сообщение❤️\n\nНа этом у меня все, пока, до следующего релиза', reply_markup=markup)
+ bot.send_message(chat_id=message.chat.id,
+ text=f'Успешно отправлено - @{username}')
+ success_send_message += 1
+ except Exception as e:
+ bot.send_message(chat_id=message.chat.id,
+ text=f'Этому юзеру не отправилось - @{username}')
+ error_send_message += 1
+ bot.send_message(chat_id=message.chat.id,
+ text=f'Количество успешных отправок - {success_send_message}', parse_mode='html')
+ bot.send_message(chat_id=message.chat.id,
+ text=f'Количество неуспешных отправок - {error_send_message}', parse_mode='html')
+ standup(message)
+ else:
+ bot.send_message(command_sender, f'у вас нет прав для запуска команды')
+ bot.forward_message(chat_id=GROUP_FOR_LOGS, from_chat_id=message.chat.id, message_id=message.id)
+ standup(message)
+
+ @bot.callback_query_handler(func=lambda call: True)
+ def post_for_group(call):
+ if call.data == 'from_user' and call.message.content_type == 'text':
+ try:
+ command_sender = call.message.from_user.id
+ bot.answer_callback_query(call.id, text="Мне приятно, спасибо ❤")
+ #Попробовать варианты если не сработает call.from_user.username
+ bot.send_message(chat_id=842766148, text=f'Юзер с ником @{call.message.chat.username} по имени {call.message.chat.first_name} прочитал сообщение')
+ except:
+ print('что-то не так')
+
+if __name__ == '__main__':
+ telegram_bot()
+ try:
+ bot.polling(none_stop=True)
+ bot.enable_save_next_step_handlers(delay=2)
+ bot.load_next_step_handlers()
+ except ConnectionError as e:
+ if LOGS:
+ bot.send_message(IMPORTANT_LOGS, "Ошибка соединения, потерял войс бот связь")
+ except Exception as r:
+ if LOGS:
+ bot.send_message(IMPORTANT_LOGS, "Произошло что-то непредвиденное, хелп. Войс бот болеет")
+ finally:
+ if LOGS:
bot.send_message(IMPORTANT_LOGS, 'Я войс бот упал, помогите')
\ No newline at end of file