From c70219b4813efcd40b6e69fd2a39f4a7c8c520b5 Mon Sep 17 00:00:00 2001 From: KerradKerridi Date: Thu, 13 Oct 2022 00:03:47 +0300 Subject: [PATCH] help func, restart func, notify --- db.py | 20 ++++++++++++++++ voice_bot.py | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+) diff --git a/db.py b/db.py index e2ea45b..4f7e3ee 100644 --- a/db.py +++ b/db.py @@ -78,6 +78,26 @@ class BotDB: 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,)) diff --git a/voice_bot.py b/voice_bot.py index 197b1be..1fa61ec 100644 --- a/voice_bot.py +++ b/voice_bot.py @@ -3,6 +3,8 @@ import os import sys from pathlib import Path from time import sleep + +import db from db import BotDB import telebot import random @@ -72,6 +74,11 @@ def telegram_bot(): 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) @@ -154,6 +161,8 @@ def telegram_bot(): 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) @@ -236,6 +245,61 @@ def telegram_bot(): 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()