diff --git a/db.py b/db.py
index ac4194e..e2ea45b 100644
--- a/db.py
+++ b/db.py
@@ -2,7 +2,6 @@ import sqlite3
import configparser
import os
import sys
-import random
config_path = os.path.join(sys.path[0], 'settings.ini')
config = configparser.ConfigParser()
@@ -100,6 +99,16 @@ class BotDB:
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:
@@ -153,6 +162,22 @@ class BotDB:
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 aa2721e..05b71b0 100644
--- a/main.py
+++ b/main.py
@@ -25,6 +25,8 @@ 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)
@@ -51,12 +53,17 @@ def telegram_bot():
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("Связаться с админами")
- item3 = types.KeyboardButton("Удалить пост")
- item4 = types.KeyboardButton("Войти в режим стендапа")
-
- markup.add(item1, item2, item3, item4)
+ item1 = types.KeyboardButton("📢Предложить свой пост")
+ item2 = types.KeyboardButton("📩Связаться с админами")
+ item3 = types.KeyboardButton("❌Удалить пост")
+ item4 = types.KeyboardButton("🎧Войти в режим стендапа")
+ 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, item4, item5)
+ else:
+ markup.add(item1, item2, item3, item4)
try:
user_id = message.from_user.id
first_name = message.from_user.first_name
@@ -81,11 +88,11 @@ def telegram_bot():
@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("Удалить пост")
- item4 = types.KeyboardButton("Войти в режим стендапа")
- item5 = types.KeyboardButton("Сказать пока!")
+ item1 = types.KeyboardButton("📢Предложить свой пост")
+ item2 = types.KeyboardButton("📩Связаться с админами")
+ item3 = types.KeyboardButton("❌Удалить пост")
+ item4 = types.KeyboardButton("🎧Войти в режим стендапа")
+ item5 = types.KeyboardButton("👋🏼Сказать пока!")
markup.add(item1, item2, item3, item4, item5)
bot.send_message(message.chat.id,
"Выбери нужную кнопку внизу экрана".format(
@@ -95,7 +102,7 @@ def telegram_bot():
def go_send_messages(message):
global msg
- if message.text == 'Предложить свой пост':
+ if message.text == '📢Предложить свой пост':
try:
markup = types.ReplyKeyboardRemove()
first_name = message.from_user.first_name
@@ -115,7 +122,7 @@ def telegram_bot():
message_id=message.message_id)
bot.register_next_step_handler(msg, resend_message_in_group_for_post)
- elif message.text == "Связаться с админами":
+ 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")
@@ -126,24 +133,47 @@ def telegram_bot():
message_id=message.message_id)
bot.register_next_step_handler(msg, resend_message_in_group_for_message)
- elif message.text == "Войти в режим стендапа":
+ elif message.text == "🎧Войти в режим стендапа":
markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
- item1 = types.KeyboardButton("Высказаться")
- item2 = types.KeyboardButton("Послушать")
- item3 = types.KeyboardButton("Вернуться в меню")
+ item1 = types.KeyboardButton("🎤Высказаться")
+ item2 = types.KeyboardButton("🎧Послушать")
+ item3 = types.KeyboardButton("🔙Вернуться в меню")
markup.add(item1, item2, item3)
first_name = message.from_user.first_name
message_for_standup = BotDB.get_message_from_db('message_for_standup', first_name)
- msg = bot.send_message(message.chat.id, message_for_standup, parse_mode='html', reply_markup=markup, disable_web_page_preview=not PREVIEW_LINK)
#logging
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, message_for_standup, parse_mode='html', reply_markup=markup,
+ disable_web_page_preview=not PREVIEW_LINK)
+ #функция с отображением сообщения "Последнее сообщение было записано"
+ 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} назад'
+ msg = bot.send_message(chat_id=message.chat.id, text=message_with_date, parse_mode="html")
+
bot.register_next_step_handler(msg, standup)
- elif message.text == "Удалить пост":
+ elif message.text == "❌Удалить пост":
#TODO: требует автоматизации. На входе говорим пришли мне пост, на выходе получаем идентификатор поста, удаляем из ТГ. Насчет удаления из ВК надо подумать
first_name = message.from_user.first_name
del_message = BotDB.get_message_from_db('del_message', first_name)
@@ -155,7 +185,7 @@ def telegram_bot():
message_id=message.message_id)
bot.register_next_step_handler(msg, resend_message_in_group_for_message)
- elif message.text == "Сказать пока!":
+ elif message.text == "👋🏼Сказать пока!":
try:
name_stick_bye = list(Path('Stick').rglob('Universal_*'))
number_stick_bye = random.randint(1, len(name_stick_bye))
@@ -180,6 +210,24 @@ def telegram_bot():
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("❌Удалить пост")
+ item4 = types.KeyboardButton("🎧Войти в режим стендапа")
+ item5 = types.KeyboardButton("👋🏼Сказать пока!")
+ markup.add(item1, item2, item3, item4, 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
@@ -198,20 +246,24 @@ def telegram_bot():
def standup(message):
# Клавиатуру добавляем
markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
- item1 = types.KeyboardButton("Высказаться")
- item2 = types.KeyboardButton("Послушать")
- item3 = types.KeyboardButton("Вернуться в меню")
+ item1 = types.KeyboardButton("🎤Высказаться")
+ item2 = types.KeyboardButton("🎧Послушать")
+ item3 = types.KeyboardButton("🔙Вернуться в меню")
markup.add(item1, item2, item3)
try:
- if message.text == 'Высказаться' or message.text == 'Высказаться еще':
+ if message.text == '🎤Высказаться' or message.text == '🎤Высказаться еще':
markup = types.ReplyKeyboardRemove()
- msg = bot.send_message(chat_id=message.chat.id, text='Пришли мне свое голосовое сообщение', reply_markup=markup)
+ if TEST:
+ bot.forward_message(chat_id=GROUP_FOR_LOGS, from_chat_id=message.chat.id, message_id=message.id)
+ msg = bot.send_message(chat_id=message.chat.id, text='Хорошо, теперь пришли мне свое голосовое сообщение', reply_markup=markup)
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)
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 == []:
- msg = bot.send_message(message.chat.id, 'Прости, ты прослушал все аудио. Возвращайся позже', reply_markup=markup)
+ msg = bot.send_message(message.chat.id, 'Прости, ты прослушал все аудио😔. Возвращайся позже, возможно наша база пополнится', reply_markup=markup)
bot.register_next_step_handler(msg, standup)
else:
number_element = random.randint(0, len(list_audio) - 1)
@@ -223,14 +275,41 @@ def telegram_bot():
msg = bot.send_voice(message.chat.id, voice=voice, reply_markup=markup)
bot.register_next_step_handler(msg, standup)
- elif message.text == 'Вернуться в меню':
+ elif message.text == '🔙Вернуться в меню':
+ if TEST:
+ bot.forward_message(chat_id=GROUP_FOR_LOGS, from_chat_id=message.chat.id, message_id=message.id)
after_post(message=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
+ return str(n) + ' ' + 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
#Проверяем что запись о файле есть в базе данных
@@ -260,17 +339,19 @@ def telegram_bot():
new_file.write(downloaded_file)
#инициализируем кнопки
markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
- item1 = types.KeyboardButton("Вернуться в меню")
+ item1 = types.KeyboardButton("🔙Вернуться в меню")
markup.add(item1)
- 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)
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("Вернуться в меню")
+ item1 = types.KeyboardButton("🔙Вернуться в меню")
markup.add(item1)
- 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)
def resend_message_in_group_for_post(message):
@@ -329,14 +410,15 @@ def telegram_bot():
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:
- 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)
+ pass
except:
if LOGS:
bot.send_message(chat_id=IMPORTANT_LOGS, text=BotDB.get_error_message_from_db(4))