Найти - Пользователи
Полная версия: Здравствуйте! Подскажите пожалуйста, почему при вызове кнопки функции не работают
Начало » Python для новичков » Здравствуйте! Подскажите пожалуйста, почему при вызове кнопки функции не работают
1 2
Anastasia_ushhkva
Когда заходишь в Телеграм и нажимаешь именно на кнопку “Новое напоминание” ничего не происходит, хотя вроде связь между функциями 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)
py.user.next
Оформи код правильно.

[code python]
тут пиши код
[/code]
Anastasia_ushhkva
 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)
ZerG
Код выложи сюда
https://pastebin.com/
и нам покажи ссылку
Код копируй с отступами и так далее
Читать вашу простыню нет не желания ни настроения
Тем более угадывать где и сколько у вас отступов и почему не срабатывает условие
Anastasia_ushhkva
https://pastebin.com/NExw27wz
ZerG
Ну так кнопка “Новое напоминание” запускает функцию
 create_new(call)
дабы убедится что это так - добавьте после функции принт
print(“create_new runned”)
а дальше

 @bot.message_handler(commands=['new'])
def create_new(update):
    bot.send_message(update.chat.id, 'Нажми /remindme для добавления задачи')
Для чего тут хендлер?
py.user.next
Anastasia_ushhkva
  
import 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
Спасибо большое за ответ, но ничего не изменилось - по прежнему при нажатии стопорится процесс
ZerG
 #@bot.message_handler(commands=['new'])
def create_new(update):
    print("I am here")
    #bot.send_message(update.chat.id, 'Нажми /remindme для добавления задачи')

Если так сделать - выводится сообщение при нажатии?
py.user.next
Anastasia_ushhkva
Спасибо большое за ответ, но ничего не изменилось
При нажатии на кнопку должно выводиться сообщение только
Нажми /remindme для добавления задачи
Там просто больше ничего нет в этом обработчике нажатия на кнопку.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB