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