Форум сайта python.su
Когда заходишь в Телеграм и нажимаешь именно на кнопку “Новое напоминание” ничего не происходит, хотя вроде связь между функциями new_reminder, get_name есть… Может связь выстроена неверно?
import sqlite3
import threading
import time
from telegram.ext import (Updater, ConversationHandler, CommandHandler, MessageHandler, Filters)
import telebot
from telebot import types
TOKEN = ‘ ’
bot = telebot.TeleBot(TOKEN)
bd = sqlite3.connect('remindnotes.db', check_same_thread=False)
cursor = bd.cursor()
with open('remind.sql', ‘r’) as f:
sql = f.read()
bd.commit()
updater = Updater(TOKEN, use_context=True)
disp = updater.dispatcher
current_name = None
current_date = None
@bot.message_handler(commands
def send_keyboard(message, text='Привет, чем я могу тебе помочь?'):
keyboard = types.ReplyKeyboardMarkup(row_width=2)
itembtn1 = types.KeyboardButton('Добавить новую заметку')
itembtn2 = types.KeyboardButton('Новое напоминание')
itembtn3 = types.KeyboardButton('Все заметки')
itembtn4 = types.KeyboardButton('Удалить заметку')
itembtn5 = types.KeyboardButton('Удалить все заметки')
itembtn6 = types.KeyboardButton('Другое')
itembtn7 = types.KeyboardButton('Пока все!')
keyboard.add(itembtn1, itembtn2, itembtn3)
keyboard.add(itembtn4, itembtn5, itembtn6, itembtn7)
msg = bot.send_message(message.from_user.id, text=text, reply_markup=keyboard)
bot.register_next_step_handler(msg, callback_worker)
def callback_worker(call):
if call.text == ‘Добавить новую заметку’:
msg = bot.send_message(call.chat.id, ‘Давайте добавим дело! Пришлите его в наш чат..’)
bot.register_next_step_handler(msg, add_plan)
elif call.text == ‘Все заметки’:
try:
show_plans(call)
except:
bot.send_message(call.chat.id, ‘Здесь пусто.. Можно отдыхать)’)
send_keyboard(call, ‘Чем еще могу помочь?’)
elif call.text == ‘Новое напоминание’:
msg = bot.send_message(call.chat.id, ‘Давайте добавим напоминание! Напишите в чат /new, чтобы добавить новую задачу’)
bot.register_next_step_handler(msg, conv_handler)
elif call.text == ‘Удалить заметку’:
try:
delete_one_plan(call)
except:
bot.send_message(call.chat.id, ‘Здесь пусто.. Можно отдыхать)’)
send_keyboard(call, ‘Чем еще могу помочь?’)
elif call.text == ‘Удалить все заметки’:
try:
delete_all_plans(call)
except:
bot.send_message(call.chat.id, ‘Здесь пусто.. Можно отдыхать)’)
send_keyboard(call, ‘Чем еще могу помочь?’)
elif call.text == ‘Другое’:
bot.send_message(call.chat.id, ‘Пока я больше ничего не умею(’)
send_keyboard(call, ‘Чем еще могу помочь?’)
elif call.text == ‘Пока все!’:
bot.send_message(call.chat.id, ‘Хорошего дня! Когда захотите продолжить - нажмите /start ’)
def add_plan(msg):
with sqlite3.connect('remindnotes.db') as con:
cursor = con.cursor()
cursor.execute('INSERT INTO planner (user_id, plan) VALUES (?, ?)', (msg.from_user.id, msg.text))
con.commit()
bot.send_message(msg.chat.id, ‘Запомню!’)
send_keyboard(msg, ‘Чем еще могу помочь?’)
def delete_one_plan(msg):
markup = types.ReplyKeyboardMarkup(row_width=2)
with sqlite3.connect('remindnotes.db') as con:
cursor = con.cursor()
cursor.execute('SELECT plan FROM planner WHERE user_id=={}'.format(msg.from_user.id))
tasks = cursor.fetchall()
for value in tasks:
markup.add(types.KeyboardButton(value))
msg = bot.send_message(msg.from_user.id, text = ‘Выберите одно дело из списка’, reply_markup=markup)
bot.register_next_step_handler(msg, delete_one_plan_1)
def delete_one_plan_1(msg):
with sqlite3.connect('remindnotes.db') as con:
cursor = con.cursor()
cursor.execute('DELETE FROM planner WHERE user_id==? AND plan==?', (msg.from_user.id, msg.text))
bot.send_message(msg.chat.id, ‘Ура, минус одна задача!’)
send_keyboard(msg, ‘Чем еще могу помочь?’)
def delete_all_plans(msg):
with sqlite3.connect('remindnotes.db') as con:
cursor = con.cursor()
cursor.execute('DELETE FROM planner WHERE user_id=={}'.format(msg.from_user.id))
con.commit()
bot.send_message(msg.chat.id, ‘Все дела удалены, хорошего отдыха!’)
send_keyboard(msg, ‘Могу ли я еще чем то помочь?’)
def get_plans_string(tasks):
tasks_str =
for val in list(enumerate(tasks)):
tasks_str.append(str(val + 1) + ‘) ’ +val + ‘\n’ )
return ‘'.join(tasks_str)
def show_plans(msg):
with sqlite3.connect(’remindnotes.db') as con:
cursor = con.cursor()
cursor.execute('SELECT plan FROM planner WHERE user_id=={}'.format(msg.from_user.id))
tasks = get_plans_string(cursor.fetchall())
bot.send_message(msg.chat.id, tasks)
send_keyboard(msg, ‘Чем еще могу помочь?’)
def new_reminder(msg):
msg.message.reply_text('О чем напоминить?')
return 1
def get_name(msg):
global current_name
msg.message.reply_text('Напиши дату в формате ГОД-МЕСЯЦ-ДЕНЬ')
return 2
def get_date(msg):
global current_date
global cursor
current_date = update.message.text
user_id = update.message.chat_id
cursor.execute('SELECT * FROM user WHERE id=?', (user_id,))
if not cursor.fetchone():
cursor.execute('INSERT INTO user (id) VALUES (?)', (user_id,))
cursor.execute('INSERT INTO remind_me (user_id, note, date, reminded) VALUES (?, ?, ?, ?)',
(user_id, current_name, current_date, 0))
bd.commit()
msg.message.reply_text('Я напомню тебе!')
return ConversationHandler.END
def cancel():
pass
def do_reminders():
while True:
# today = dt.date.today().strftime('%Y-%m-%d')
cursor.execute('SELECT * FROM remind_me WHERE strftime(“%d”, date) = strftime(“%d”, “now”)'
‘AND strftime(“%m”, “now”) AND reminded = 0’)
rows = cursor.fetchall()
for row in rows:
row_id = row
note = row
user_id = row
updater.bot.send_message(chat_id=user_id, text =f'Время для выполнения задачи {note}!')
cursor.execute('UPDATE remind_me SET reminded = 1 WHERE id = ?', (row_id,))
bd.commit()
time.sleep(10)
conv_handler = ConversationHandler(
entry_points=,
states = {
1: ,
2:
},
fallbacks=
)
threading.Thread(target=do_reminders).start()
bot.polling(none_stop=True)
Отредактировано Anastasia_ushhkva (Дек. 1, 2023 15:21:59)
Офлайн
Оформи код правильно.
[code python]
тут пиши код
[/code]
Офлайн
import sqlite3 import threading import time from telegram.ext import (Updater, ConversationHandler, CommandHandler, MessageHandler, Filters) import telebot from telebot import types TOKEN = ‘ ’ bot = telebot.TeleBot(TOKEN) bd = sqlite3.connect('remindnotes.db', check_same_thread=False) cursor = bd.cursor() with open('remind.sql', ‘r’) as f: sql = f.read() bd.commit() updater = Updater(TOKEN, use_context=True) disp = updater.dispatcher current_name = None current_date = None @bot.message_handler(commands def send_keyboard(message, text='Привет, чем я могу тебе помочь?'): keyboard = types.ReplyKeyboardMarkup(row_width=2) itembtn1 = types.KeyboardButton('Добавить новую заметку') itembtn2 = types.KeyboardButton('Новое напоминание') itembtn3 = types.KeyboardButton('Все заметки') itembtn4 = types.KeyboardButton('Удалить заметку') itembtn5 = types.KeyboardButton('Удалить все заметки') itembtn6 = types.KeyboardButton('Другое') itembtn7 = types.KeyboardButton('Пока все!') keyboard.add(itembtn1, itembtn2, itembtn3) keyboard.add(itembtn4, itembtn5, itembtn6, itembtn7) msg = bot.send_message(message.from_user.id, text=text, reply_markup=keyboard) bot.register_next_step_handler(msg, callback_worker) def callback_worker(call): if call.text == ‘Добавить новую заметку’: msg = bot.send_message(call.chat.id, ‘Давайте добавим дело! Пришлите его в наш чат..’) bot.register_next_step_handler(msg, add_plan) elif call.text == ‘Все заметки’: try: show_plans(call) except: bot.send_message(call.chat.id, ‘Здесь пусто.. Можно отдыхать)’) send_keyboard(call, ‘Чем еще могу помочь?’) elif call.text == ‘Новое напоминание’: msg = bot.send_message(call.chat.id, ‘Давайте добавим напоминание! Напишите в чат /new, чтобы добавить новую задачу’) bot.register_next_step_handler(msg, conv_handler) elif call.text == ‘Удалить заметку’: try: delete_one_plan(call) except: bot.send_message(call.chat.id, ‘Здесь пусто.. Можно отдыхать)’) send_keyboard(call, ‘Чем еще могу помочь?’) elif call.text == ‘Удалить все заметки’: try: delete_all_plans(call) except: bot.send_message(call.chat.id, ‘Здесь пусто.. Можно отдыхать)’) send_keyboard(call, ‘Чем еще могу помочь?’) elif call.text == ‘Другое’: bot.send_message(call.chat.id, ‘Пока я больше ничего не умею(’) send_keyboard(call, ‘Чем еще могу помочь?’) elif call.text == ‘Пока все!’: bot.send_message(call.chat.id, ‘Хорошего дня! Когда захотите продолжить - нажмите /start ’) def add_plan(msg): with sqlite3.connect('remindnotes.db') as con: cursor = con.cursor() cursor.execute('INSERT INTO planner (user_id, plan) VALUES (?, ?)', (msg.from_user.id, msg.text)) con.commit() bot.send_message(msg.chat.id, ‘Запомню!’) send_keyboard(msg, ‘Чем еще могу помочь?’) def delete_one_plan(msg): markup = types.ReplyKeyboardMarkup(row_width=2) with sqlite3.connect('remindnotes.db') as con: cursor = con.cursor() cursor.execute('SELECT plan FROM planner WHERE user_id=={}'.format(msg.from_user.id)) tasks = cursor.fetchall() for value in tasks: markup.add(types.KeyboardButton(value)) msg = bot.send_message(msg.from_user.id, text = ‘Выберите одно дело из списка’, reply_markup=markup) bot.register_next_step_handler(msg, delete_one_plan_1) def delete_one_plan_1(msg): with sqlite3.connect('remindnotes.db') as con: cursor = con.cursor() cursor.execute('DELETE FROM planner WHERE user_id==? AND plan==?', (msg.from_user.id, msg.text)) bot.send_message(msg.chat.id, ‘Ура, минус одна задача!’) send_keyboard(msg, ‘Чем еще могу помочь?’) def delete_all_plans(msg): with sqlite3.connect('remindnotes.db') as con: cursor = con.cursor() cursor.execute('DELETE FROM planner WHERE user_id=={}'.format(msg.from_user.id)) con.commit() bot.send_message(msg.chat.id, ‘Все дела удалены, хорошего отдыха!’) send_keyboard(msg, ‘Могу ли я еще чем то помочь?’) def get_plans_string(tasks): tasks_str = for val in list(enumerate(tasks)): tasks_str.append(str(val + 1) + ‘) ’ +val + ‘\n’ ) return ‘'.join(tasks_str) def show_plans(msg): with sqlite3.connect(’remindnotes.db') as con: cursor = con.cursor() cursor.execute('SELECT plan FROM planner WHERE user_id=={}'.format(msg.from_user.id)) tasks = get_plans_string(cursor.fetchall()) bot.send_message(msg.chat.id, tasks) send_keyboard(msg, ‘Чем еще могу помочь?’) def new_reminder(msg): msg.message.reply_text('О чем напоминить?') return 1 def get_name(msg): global current_name msg.message.reply_text('Напиши дату в формате ГОД-МЕСЯЦ-ДЕНЬ') return 2 def get_date(msg): global current_date global cursor current_date = update.message.text user_id = update.message.chat_id cursor.execute('SELECT * FROM user WHERE id=?', (user_id,)) if not cursor.fetchone(): cursor.execute('INSERT INTO user (id) VALUES (?)', (user_id,)) cursor.execute('INSERT INTO remind_me (user_id, note, date, reminded) VALUES (?, ?, ?, ?)', (user_id, current_name, current_date, 0)) bd.commit() msg.message.reply_text('Я напомню тебе!') return ConversationHandler.END def cancel(): pass def do_reminders(): while True: # today = dt.date.today().strftime('%Y-%m-%d') cursor.execute('SELECT * FROM remind_me WHERE strftime(“%d”, date) = strftime(“%d”, “now”)' ‘AND strftime(“%m”, “now”) AND reminded = 0’) rows = cursor.fetchall() for row in rows: row_id = row note = row user_id = row updater.bot.send_message(chat_id=user_id, text =f'Время для выполнения задачи {note}!') cursor.execute('UPDATE remind_me SET reminded = 1 WHERE id = ?', (row_id,)) bd.commit() time.sleep(10) conv_handler = ConversationHandler( entry_points=, states = { 1: , 2: }, fallbacks= ) threading.Thread(target=do_reminders).start() bot.polling(none_stop=True)
Отредактировано Anastasia_ushhkva (Дек. 2, 2023 16:41:10)
Офлайн
Код выложи сюда
https://pastebin.com/
и нам покажи ссылку
Код копируй с отступами и так далее
Читать вашу простыню нет не желания ни настроения
Тем более угадывать где и сколько у вас отступов и почему не срабатывает условие
Офлайн
Офлайн
Ну так кнопка “Новое напоминание” запускает функцию
create_new(call)
@bot.message_handler(commands=['new']) def create_new(update): bot.send_message(update.chat.id, 'Нажми /remindme для добавления задачи')
Офлайн
Anastasia_ushhkvaimport sqlite3 ...
@bot.message_handler(commands=['new']) def create_new(update): bot.send_message(update.chat.id, 'Нажми /remindme для добавления задачи')
#@bot.message_handler(commands=['new']) def create_new(update): bot.send_message(update.chat.id, 'Нажми /remindme для добавления задачи')
Офлайн
Спасибо большое за ответ, но ничего не изменилось - по прежнему при нажатии стопорится процесс
Отредактировано Anastasia_ushhkva (Дек. 4, 2023 19:34:41)
Офлайн
#@bot.message_handler(commands=['new']) def create_new(update): print("I am here") #bot.send_message(update.chat.id, 'Нажми /remindme для добавления задачи')
Офлайн
Anastasia_ushhkvaПри нажатии на кнопку должно выводиться сообщение только
Спасибо большое за ответ, но ничего не изменилось
Нажми /remindme для добавления задачи
Отредактировано py.user.next (Дек. 6, 2023 00:25:38)
Офлайн