├── README.md
├── bot.py
├── config.py
├── create_tables.sql
├── mybotdata.py
├── mybotfunctions.py
├── requirements.txt
└── withstickers.py
/README.md:
--------------------------------------------------------------------------------
1 | #### Installation:
2 |
3 | `pip install --upgrade pip`
4 |
5 | `pip install -r requirements.txt`
6 |
7 | create MySQL database and run `create_tables.sql`
8 |
9 | `python3 bot.py`
10 |
11 |
12 |
--------------------------------------------------------------------------------
/bot.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 |
3 | import random
4 | from datetime import datetime
5 | from threading import Thread
6 | from time import sleep
7 |
8 | import schedule
9 | import telebot
10 | from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton
11 |
12 | import config
13 | import mybotdata as bdat
14 | import mybotfunctions as bfunc
15 | import withstickers as stick
16 |
17 | bot = telebot.TeleBot(config.token, skip_pending=True)
18 |
19 | bot.message_handler()
20 | def update_user_data(message):
21 | bfunc.ex_command(
22 | "update bot_users set username = '@" + str(message.from_user.username) + "' where chat_id = '" + str(
23 | message.chat.id) + "';")
24 | bfunc.ex_command(
25 | "update bot_users set user_id = '" + str(message.from_user.id) + "' where chat_id = '" + str(
26 | message.chat.id) + "';")
27 | bfunc.ex_command(
28 | "update bot_users set first_name = '" + str(message.from_user.first_name) + "' where chat_id = '" + str(
29 | message.chat.id) + "';")
30 | bfunc.ex_command(
31 | "update bot_users set last_name = '" + str(message.from_user.last_name) + "' where chat_id = '" + str(
32 | message.chat.id) + "';")
33 |
34 |
35 | @bot.message_handler(content_types=['video_note'])
36 | def get_VideoNote(message):
37 | file_id = message.video_note.file_id
38 | if str(message.chat.id) in bdat.authors_id:
39 | bfunc.ex_command("INSERT INTO video_notes (date, file_id, chat_id, `trigger`) VALUES (CURRENT_TIMESTAMP,'" + str(
40 | file_id) + "', '" + str(message.chat.id) + "', 1);")
41 |
42 |
43 | @bot.message_handler(content_types=['voice'])
44 | def get_voice(message):
45 | file_id = message.voice.file_id
46 | if str(message.chat.id) == bdat.authors_id[0]:
47 | bfunc.ex_command(
48 | "INSERT INTO voices (date, file_id, chat_id) VALUES (CURRENT_TIMESTAMP,'" + str(file_id) + "', '" + str(
49 | message.chat.id) + "');")
50 | else:
51 | bot.send_message(message.chat.id,
52 | 'Спасибо, мы приняли ваше голосовое сообщение, оно будет рассмотрено модератором.')
53 | markup = InlineKeyboardMarkup()
54 | markup.row_width = 2
55 | markup.add(InlineKeyboardButton("Принять", callback_data="cb_yes_first", one_time_keyboard=True),
56 | InlineKeyboardButton("Отклонить", callback_data="cb_no", one_time_keyboard=True))
57 | # bot.send_voice(bdat.authors_id[0], file_id, caption=f'{message.chat.id}', reply_markup=markup)
58 | bot.send_voice(bdat.authors_id[1], file_id, caption=f'{message.chat.id}', reply_markup=markup)
59 | bot.send_voice(bdat.authors_id[2], file_id, caption=f'{message.chat.id}', reply_markup=markup)
60 |
61 |
62 | @bot.callback_query_handler(func=lambda call: True)
63 | def callback_query(call):
64 | if call.data == "cb_yes_first":
65 | new_markup = InlineKeyboardMarkup()
66 | new_markup.row_width = 2
67 | new_markup.add(InlineKeyboardButton("Принять войс", callback_data="cb_yes", one_time_keyboard=True),
68 | InlineKeyboardButton("Отклонить войс (удалить)", callback_data="cb_no", one_time_keyboard=True))
69 | bot.send_voice(bdat.authors_id[0], call.message.voice.file_id, caption=call.message.caption,
70 | reply_markup=new_markup)
71 | bot.answer_callback_query(call.id, "Войс добавлен в базу данных")
72 | bot.edit_message_reply_markup(chat_id=call.message.chat.id, message_id=call.message.id, reply_markup=None)
73 | elif call.data == "cb_yes":
74 | bfunc.ex_command("INSERT INTO voices (date, file_id, chat_id, `trigger`) VALUES (CURRENT_TIMESTAMP,'" + str(
75 | call.message.voice.file_id) + "', '" + str(call.message.caption) + "', 1);")
76 |
77 | bot.answer_callback_query(call.id, "Войс добавлен в базу данных")
78 | bot.send_message(call.message.caption,
79 | 'Ваше голосовое сообщение прошло модерацию. Теперь его смогут прослушать другие пользователи, когда обратятся за вдохновением.')
80 | bot.edit_message_reply_markup(chat_id=call.message.chat.id, message_id=call.message.id, reply_markup=None)
81 |
82 | elif call.data == "cb_no":
83 | bot.answer_callback_query(call.id, "Войс проигнорирован")
84 | bot.edit_message_reply_markup(chat_id=call.message.chat.id, message_id=call.message.id, reply_markup=None)
85 |
86 | elif call.data == 'cb_voice':
87 | bot.answer_callback_query(call.id, "Буду отправлять голосовыми сообщениями")
88 | bfunc.ex_command(
89 | "update bot_users set achieve_method = '" + "voice" + "' where chat_id = '" + str(call.message.chat.id) + "';")
90 | bot.edit_message_reply_markup(chat_id=call.message.chat.id, message_id=call.message.id, reply_markup=None)
91 |
92 | elif call.data == 'cb_text':
93 | bot.answer_callback_query(call.id, "Буду отправлять текстовыми сообщениями")
94 | bfunc.ex_command(
95 | "update bot_users set achieve_method = '" + "text" + "' where chat_id = '" + str(call.message.chat.id) + "';")
96 | bot.edit_message_reply_markup(chat_id=call.message.chat.id, message_id=call.message.id, reply_markup=None)
97 |
98 | elif call.data == 'cb_video_note':
99 | bot.answer_callback_query(call.id, "Буду отправлять круглыми видеосообщениями")
100 | bfunc.ex_command(
101 | "update bot_users set achieve_method = '" + "video_note" + "' where chat_id = '" + str(
102 | call.message.chat.id) + "';")
103 | bot.edit_message_reply_markup(chat_id=call.message.chat.id, message_id=call.message.id, reply_markup=None)
104 |
105 | if call.data == "cb_insp_text_yes":
106 | bfunc.ex_command(
107 | "INSERT INTO texts (date, text, chat_id, `trigger`) VALUES (CURRENT_TIMESTAMP,'" + call.message.text + "', '" + str(
108 | call.message.chat.id) + "', 1);")
109 | bot.answer_callback_query(call.id, "Текст добавлен")
110 | bot.edit_message_reply_markup(chat_id=call.message.chat.id, message_id=call.message.id, reply_markup=None)
111 |
112 | # bot.send_message(call.message.caption, 'Ваше текстовое сообщение прошло модерацию. Теперь его смогут прослушать другие пользователи, когда обратятся за вдохновением.')
113 | elif call.data == "cb_insp_text_no":
114 | bot.answer_callback_query(call.id, "Текст проигнорирован (все ок, больше жать не надо)")
115 | bot.edit_message_reply_markup(chat_id=call.message.chat.id, message_id=call.message.id, reply_markup=None)
116 |
117 |
118 | @bot.message_handler(commands=['set_notification', 'stop', 'menu', 'settings'])
119 | def set_notification(message):
120 | update_user_data(message)
121 | bot.send_message(message.chat.id, 'Во сколько тебе напомнить о практике благодарности? (по часовому поясу MSK)',
122 | reply_markup=bdat.many_moments)
123 | bot.register_next_step_handler(message, set_new_time)
124 |
125 | # ONBOARDING
126 | @bot.message_handler(commands=['start', 'help'])
127 | def welcome_message(message):
128 | if message.chat.id in bfunc.to_id_list(bfunc.data_command("select chat_id from bot_users")):
129 | bot.send_message(message.chat.id, "Вы уже прошли регистрацию в боте. Ты в главном меню",
130 | reply_markup=bdat.main_menu_buttons)
131 | else:
132 | bfunc.ex_command(
133 | "insert into bot_users(chat_id, date) values('" + str(message.chat.id) + "', CURRENT_TIMESTAMP)")
134 | update_user_data(message)
135 | bot.send_message(message.chat.id, bdat.welc_text, reply_markup=bdat.yes_no)
136 | bot.register_next_step_handler(message, _2)
137 |
138 |
139 | def _2(message):
140 | if message.text == 'Да':
141 | bot.send_message(message.chat.id,
142 | 'Отлично! Используя практику благодарности, ты можешь стать позитивнее и счастливее. Так думают не только психологи, но и ученые.',
143 | reply_markup=bdat.aga)
144 | bot.register_next_step_handler(message, _1_3)
145 | elif message.text == 'Нет':
146 | bot.send_message(message.chat.id,
147 | 'Практика благодарности — работающий способ улучшить своё благополучие и качество жизни. Она помогает сформировать привычку лучше относиться к себе и замечать больше хорошего.\n\n Кстати, практика благодарности используется в научно доказанной когнитивно-поведенческой терапии!',
148 | reply_markup=bdat.what_to_do)
149 | bot.register_next_step_handler(message, _2_3)
150 | else:
151 | bot.send_message(message.chat.id, 'Мы не понимаем ваш ответ. Советуем использовать кнопки.')
152 | bot.register_next_step_handler(message, _2)
153 |
154 |
155 | def _1_3(message):
156 | bot.send_message(message.chat.id,
157 | 'Сейчас приступим! Но для начала мне нужно чуть больше узнать о тебе. Как я могу к тебе обращаться? (Напиши имя)',
158 | reply_markup=bdat.empty)
159 | bot.register_next_step_handler(message, your_name)
160 |
161 |
162 | def _2_3(message):
163 | bot.send_message(message.chat.id,
164 | 'Все очень просто! Тебе нужно каждый день записывать что-то, за что ты ощущаешь благодарность.')
165 | bot.send_message(message.chat.id,
166 | 'Подойдут любые штуки, даже самые небольшие. Можно поблагодарить себя за вкусный обед, хорошую работу, прогулку, встречу с другом. Даже если что-то не получилось, важно поблагодарить себя за эту попытку.',
167 | reply_markup=bdat.lets_try)
168 | bot.register_next_step_handler(message, _1_3)
169 |
170 |
171 | def your_name(message):
172 | name = message.text
173 | bfunc.ex_command("update bot_users set nickname = '" + name + "' where chat_id = '" + str(message.chat.id) + "';")
174 | bot.send_message(message.chat.id,
175 | "Хорошо, " + name + "! Как ты хочешь говорить о своих благодарностях?\n\n«Я благодарен» или «Я благодарна»",
176 | reply_markup=bdat.gender)
177 | bot.register_next_step_handler(message, your_gender)
178 |
179 |
180 | def your_gender(message):
181 | if message.text == 'Я благодарен':
182 | bfunc.ex_command("update bot_users set gender = 'male' where chat_id = '" + str(message.chat.id) + "';")
183 | elif message.text == 'Я благодарна':
184 | bfunc.ex_command("update bot_users set gender = 'female' where chat_id = '" + str(message.chat.id) + "';")
185 | else:
186 | bot.send_message(message.chat.id, 'Мы не понимаем ваш ответ. Советуем использовать кнопки.')
187 | bot.register_next_step_handler(message, your_gender)
188 | bot.send_message(message.chat.id, bfunc.gender_text(message.chat.id, 'Ура! Ты готов записать первую благодарность?',
189 | 'Ура! Ты готова записать первую благодарность?'),
190 | reply_markup=bdat.readiness)
191 | bot.register_next_step_handler(message, is_ready)
192 |
193 |
194 | def is_ready(message):
195 | if message.text == 'Да!':
196 | bot.send_message(message.chat.id,
197 | bfunc.gender_text(message.chat.id, bdat.text_write_grate_male, bdat.text_write_grate_female),
198 | reply_markup=bdat.empty)
199 | bot.register_next_step_handler(message, write_first_grate)
200 | elif message.text == 'Не знаю, что написать':
201 | ready_to_feel_keyb = telebot.types.ReplyKeyboardMarkup(True).row(
202 | bfunc.gender_text(message.chat.id, 'Готов чувствовать благодарность!',
203 | 'Готова чувствовать благодарность!')).row('Все еще ничего не приходит на ум')
204 | bot.send_message(message.chat.id,
205 | bfunc.gender_text(message.chat.id, bdat.text_feel_1_male, bdat.text_feel_1_female),
206 | reply_markup=ready_to_feel_keyb)
207 | bot.register_next_step_handler(message, feel_grate_1)
208 | else:
209 | bot.send_message(message.chat.id, 'Мы не понимаем ваш ответ. Советуем использовать кнопки.')
210 | bot.register_next_step_handler(message, is_ready)
211 |
212 |
213 | def feel_grate_1(message):
214 | if message.text == 'Готов чувствовать благодарность!' or message.text == 'Готова чувствовать благодарность!':
215 | bot.send_message(message.chat.id,
216 | bfunc.gender_text(message.chat.id, bdat.text_write_grate_male, bdat.text_write_grate_female),
217 | reply_markup=bdat.empty)
218 | bot.register_next_step_handler(message, write_first_grate)
219 | if message.text == 'Все еще ничего не приходит на ум':
220 | bot.send_message(message.chat.id, bdat.text_feel_2, reply_markup=bdat.run)
221 | bot.register_next_step_handler(message, feel_grate_2)
222 |
223 |
224 | def feel_grate_2(message):
225 | bot.send_message(message.chat.id,
226 | bfunc.gender_text(message.chat.id, bdat.text_write_grate_male, bdat.text_write_grate_female),
227 | reply_markup=bdat.empty)
228 | bot.register_next_step_handler(message, write_first_grate)
229 |
230 |
231 | def write_first_grate(message):
232 | text = message.text
233 | try:
234 | bfunc.ex_command("INSERT INTO notes (date, note, chat_id) VALUES (CURRENT_TIMESTAMP,'" + text + "', '" + str(
235 | message.chat.id) + "');")
236 | bot.send_message(message.chat.id,
237 | bfunc.gender_text(message.chat.id, bdat.awesome_text_male, bdat.awesome_text_female),
238 | reply_markup=bdat.result_feel)
239 | bot.register_next_step_handler(message, awesome)
240 | except Exception as ex:
241 | bot.send_message(message.chat.id, "Непредвиденная ошибка, попробуйте добавить благодарность снова.")
242 | bot.register_next_step_handler(message, write_first_grate)
243 | print(type(ex))
244 |
245 |
246 | def awesome(message):
247 | if message.text == "Да, чувствую!":
248 | bot.send_message(message.chat.id,
249 | "Здорово! Важно замечать, как отношение к себе и своим успехам по чуть-чуть меняется.")
250 | elif message.text == "Пока нет :(":
251 | bot.send_message(message.chat.id,
252 | "Конечно, изменения происходят не так быстро. Но благодаря регулярной практике ты обязательно начнешь больше ценить себя, свои успехи и особенности")
253 | else:
254 | bot.send_message(message.chat.id, 'Мы не понимаем ваш ответ. Советуем использовать кнопки.')
255 | bot.register_next_step_handler(message, awesome)
256 | bot.send_message(message.chat.id,
257 | "Когда записываешь благодарность, старайся поглубже в нее погрузиться и прочувствовать ее.",
258 | reply_markup=bdat.how_1)
259 | bot.register_next_step_handler(message, imaginate)
260 |
261 |
262 | def imaginate(message):
263 | bot.send_message(message.chat.id,
264 | "Представь, что друг сделал для тебя что-то очень хорошее, и ты чувствуешь тепло, радость, нежность. Только вот сейчас этот друг для себя — ты сам.",
265 | reply_markup=stick.cute)
266 |
267 | bot.register_next_step_handler(message, dont_forget)
268 |
269 |
270 | def dont_forget(message):
271 | bot.send_message(message.chat.id,
272 | "Не забывай пересматривать старые благодарности и заново проживать их — так радости будет еще больше.",
273 | reply_markup=bdat.safety)
274 | bot.register_next_step_handler(message, safety_exist)
275 |
276 |
277 | def safety_exist(message):
278 | bot.send_message(message.chat.id,
279 | "Твои благодарности будут храниться в зашифрованной базе данных. Если захочешь, сможешь в любой момент удалить все благодарности — кнопка для этого будет в настройках.",
280 | reply_markup=bdat.exellent)
281 | bot.register_next_step_handler(message, preoffer_again)
282 |
283 |
284 | def preoffer_again(message):
285 | bot.send_message(message.chat.id, "Хочешь записать еще благодарность?", reply_markup=bdat.grate_again)
286 | bot.register_next_step_handler(message, offer_again)
287 |
288 |
289 | def offer_again(message):
290 | if message.text == "Хочу!":
291 | bot.send_message(message.chat.id,
292 | bfunc.gender_text(message.chat.id, bdat.text_write_grate_male, bdat.text_write_grate_female),
293 | reply_markup=bdat.empty)
294 | bot.register_next_step_handler(message, add_second_grate)
295 | elif message.text == "Пока нет":
296 | bot.send_message(message.chat.id, bfunc.gender_text(message.chat.id, bdat.good_male, bdat.good_female))
297 | bot.send_message(message.chat.id,
298 | 'Кнопка, чтобы добавить новую благодарность, всегда будет в главном меню. Можешь пользоваться ей в любое время дня и ночи =)',
299 | reply_markup=bdat.what_time)
300 | bot.send_message(message.chat.id,
301 | 'И последнее! В практике благодарности очень важна регулярность.\n\nДля того, чтобы записать благодарность и стать немного счастливее, нужна всего 1 минута в день. Но важно делать это каждый день.')
302 | bot.register_next_step_handler(message, time_science)
303 | else:
304 | bot.send_message(message.chat.id, 'Мы не понимаем ваш ответ. Советуем использовать кнопки.')
305 | bot.register_next_step_handler(message, offer_again)
306 |
307 |
308 | def add_second_grate(message):
309 | text = message.text
310 | try:
311 | bfunc.ex_command("INSERT INTO notes (date, note, chat_id) VALUES (CURRENT_TIMESTAMP,'" + text + "', '" + str(
312 | message.chat.id) + "');")
313 | bot.send_message(message.chat.id, bfunc.gender_text(message.chat.id, bdat.good_male, bdat.good_female))
314 | bot.send_message(message.chat.id,
315 | 'Кнопка, чтобы добавить новую благодарность, всегда будет в главном меню. Можешь пользоваться ей в любое время дня и ночи =)',
316 | reply_markup=bdat.what_time)
317 | bot.send_message(message.chat.id,
318 | 'И последнее! В практике благодарности очень важна регулярность.\n\nДля того, чтобы записать благодарность и стать немного счастливее, нужна всего 1 минута в день. Но важно делать это каждый день.')
319 | bot.register_next_step_handler(message, time_science)
320 | except Exception as ex:
321 | bot.send_message(message.chat.id, "Непредвиденная ошибка, попробуйте добавить благодарность снова.")
322 | bot.register_next_step_handler(message, add_second_grate)
323 | print(type(ex))
324 |
325 |
326 | def time_science(message):
327 | bot.send_message(message.chat.id,
328 | 'Одни ученые считают, что ее очень полезно делать утром, чтобы сразу настроиться на позитивное восприятие происходящего.\n\nДругие советуют записывать благодарности перед сном — чтобы ощутить ценность уходящего дня.\n\nТут все на твой вкус :) ',
329 | reply_markup=bdat.i_understood)
330 | bot.register_next_step_handler(message, yes_important)
331 |
332 |
333 | def yes_important(message):
334 | bot.send_message(message.chat.id, 'Да, регулярность тут очень важна.')
335 | bot.send_message(message.chat.id, 'Во сколько тебе напомнить о практике благодарности? (по часовому поясу MSK)',
336 | reply_markup=bdat.many_moments_onboarding)
337 | bot.register_next_step_handler(message, set_time)
338 |
339 |
340 | def set_time(message):
341 | if message.text in bdat.list_moments:
342 | bot.send_message(message.chat.id, 'Отлично, напомню тебе завтра в ' + message.text + '! До встречи :)')
343 | bfunc.ex_command(
344 | "update bot_users set scheduler = '" + message.text + "' where chat_id = '" + str(message.chat.id) + "';")
345 | bot.send_message(message.chat.id, 'Ты в главном меню', reply_markup=bdat.main_menu_buttons)
346 | else:
347 | bot.send_message(message.chat.id, 'Мы не понимаем ваш ответ. Советуем использовать кнопки.')
348 | bot.register_next_step_handler(message, set_time)
349 |
350 | # MAIN MENU
351 | @bot.message_handler(content_types=['text'])
352 | def main_menu(message):
353 | update_user_data(message)
354 | if message.text == 'Новая благодарность' or message.text == 'Хочу записать ещё благодарность':
355 | bot.send_message(message.chat.id,
356 | bfunc.gender_text(message.chat.id, bdat.text_write_grate_male, bdat.text_write_grate_female),
357 | reply_markup=bdat.back)
358 | bot.register_next_step_handler(message, new_grate)
359 |
360 | elif message.text == stick.insp:
361 | bot.send_message(message.chat.id,
362 | 'Добро пожаловать во Вдохновение — мой любимый раздел.\n\nЗдесь можно вдохновиться благодарностями других пользователей бота и поделиться своими. Все анонимно, нежно и заботливо :3 Все сообщения проходят модерацию. Почитать про историю создания этого раздела можно в [блоге](https://t.me/pioblog/75) разработчика бота.\n\nТы хочешь получить вдохновение или поделиться своим для других?',
363 | disable_web_page_preview=True, reply_markup=bdat.insp_1_buttons, parse_mode="Markdown")
364 | bot.register_next_step_handler(message, select_insp)
365 | elif message.text == 'Настройки':
366 | bot.send_message(message.chat.id, 'Что будем настраивать?', reply_markup=bdat.settings_buttons)
367 | bot.register_next_step_handler(message, settings)
368 |
369 | elif message.text == 'Мои благодарности':
370 | bot.send_message(message.chat.id,
371 | 'Всего благодарностей: ' + bfunc.count_all(message.chat.id) + '\n\n' + bfunc.last_grates(7, 0,
372 | message.chat.id),
373 | reply_markup=bdat.last_grates_buttons)
374 | bot.register_next_step_handler(message, view_grates, 1)
375 | elif message.text == 'Команда бота':
376 | bot.send_message(message.chat.id, bdat.bot_team_text, reply_markup=bdat.to_main_munu_button,
377 | parse_mode="Markdown", disable_web_page_preview=True)
378 | bot.register_next_step_handler(message, bot_team)
379 | elif message.text == 'О практике благодарности':
380 | bot.send_message(message.chat.id,
381 | 'Хей! Меня зовут Лев, мне 22 года, и я придумал этого бота. Сейчас я расскажу тебе о практике благодарности.',
382 | reply_markup=bdat.cont_back)
383 | bot.register_next_step_handler(message, about_1)
384 | elif message.text == 'Получить поддержку':
385 | bot.send_message(message.chat.id,
386 | 'Если ты плохо себя чувствуешь, это нормально. Иногда все мы чувствуем себя не очень. Важно разрешать этому состоянию быть.',
387 | reply_markup=bdat.support_1)
388 | bot.register_next_step_handler(message, support)
389 | elif message.text == 'В главное меню':
390 | bot.send_message(message.chat.id,
391 | 'Ты в главном меню',
392 | reply_markup=bdat.main_menu_buttons)
393 | else:
394 | # bot.send_message(message.chat.id,'Мы не поняли вашу команду, попробуйте использовать кнопки или начать из главного меню (/start). Если что-то сломалось — пишите @piofant.',reply_markup=bdat.main_menu_buttons)
395 | bot.send_message(message.chat.id, 'Записать отправленный текст как новую благодарность?',
396 | reply_markup=bdat.check_that_new_grate_buttons)
397 | bot.register_next_step_handler(message, check_that_new_grate, text=message.text, old_message=message)
398 | # check_that_new_grate(message, message.text)
399 | # new_grate(message)
400 |
401 |
402 | def check_that_new_grate(message, text, old_message):
403 | if message.text == 'Да':
404 | new_grate(old_message)
405 | else:
406 | bot.send_message(message.chat.id, 'Ты в главном меню', reply_markup=bdat.main_menu_buttons)
407 |
408 |
409 | def select_insp(message):
410 | if message.text == 'Получить':
411 | bot.send_message(message.chat.id,
412 | 'Хорошо!\n\nЧто тебе сейчас больше хочется — послушать или почитать благодарности?',
413 | reply_markup=bdat.insp_get_buttons)
414 | bot.register_next_step_handler(message, insp_get)
415 | elif message.text == 'Поделиться':
416 | bot.send_message(message.chat.id,
417 | 'Вдохновение - это опыт развития практики или уникальная благодарность и рассказанная вокруг неё история, которая задаст облако контекста вокруг благодарности.\n\nКак тебе хочется поделиться — текстом или голосом?',
418 | reply_markup=bdat.insp_share_buttons)
419 | bot.register_next_step_handler(message, insp_share)
420 | elif message.text == 'В главное меню':
421 | bot.send_message(message.chat.id, 'Ты в главном меню', reply_markup=bdat.main_menu_buttons)
422 | else:
423 | bot.send_message(message.chat.id, 'Мы не понимаем ваш ответ. Советуем использовать кнопки.')
424 | bot.register_next_step_handler(message, select_insp)
425 |
426 |
427 | def insp_get(message):
428 | if message.text == 'Послушать':
429 | voices = bfunc.data_command("SELECT file_id FROM voices WHERE `trigger` = 1")
430 | voice_number = len(voices) - 1
431 | bot.send_voice(message.chat.id, voices[random.randint(0, len(voices) - 1)][0], reply_markup=bdat.after_voice_insp)
432 | bot.register_next_step_handler(message, after_voice_insp, voice_number)
433 | elif message.text == 'Почитать':
434 | texts = bfunc.data_command("SELECT text FROM texts WHERE `trigger` = 1")
435 | text_number = len(texts) - 1
436 | bot.send_message(message.chat.id, texts[random.randint(0, len(texts) - 1)][0], reply_markup=bdat.after_text_insp)
437 | bot.register_next_step_handler(message, after_text_insp, text_number)
438 | elif message.text == 'Назад':
439 | bot.send_message(message.chat.id, 'Ты хочешь получить вдохновение или поделиться им?',
440 | reply_markup=bdat.insp_1_buttons)
441 | bot.register_next_step_handler(message, select_insp)
442 |
443 | else:
444 | bot.send_message(message.chat.id, 'Мы не понимаем ваш ответ. Советуем использовать кнопки.')
445 | bot.register_next_step_handler(message, insp_get)
446 |
447 |
448 | def after_voice_insp(message, voice_number):
449 | if message.text == 'Ещё':
450 | voices = bfunc.data_command("SELECT file_id FROM voices WHERE `trigger` = 1")
451 | if voice_number == -1:
452 | voice_number = len(voices) - 1
453 | bot.send_voice(message.chat.id, voices[voice_number][0], reply_markup=bdat.after_voice_insp)
454 | voice_number -= 1
455 | bot.register_next_step_handler(message, after_voice_insp, voice_number)
456 | elif message.text == 'Назад':
457 | bot.send_message(message.chat.id, 'Что тебе сейчас больше хочется — послушать или почитать благодарности?',
458 | reply_markup=bdat.insp_get_buttons)
459 | bot.register_next_step_handler(message, insp_get)
460 | elif message.text == 'В главное меню':
461 | bot.send_message(message.chat.id, 'Ты в главном меню', reply_markup=bdat.main_menu_buttons)
462 | else:
463 | bot.send_message(message.chat.id, 'Мы не понимаем ваш ответ. Советуем использовать кнопки.')
464 | bot.register_next_step_handler(message, after_voice_insp)
465 |
466 |
467 | def after_text_insp(message, text_number):
468 | if message.text == 'Ещё':
469 | texts = bfunc.data_command("SELECT text FROM texts WHERE `trigger` = 1")
470 | if text_number == -1:
471 | text_number = len(texts) - 1
472 | bot.send_message(message.chat.id, texts[text_number][0], reply_markup=bdat.after_text_insp)
473 | text_number -= 1
474 | # bot.send_message(message.chat.id, texts[random.randint(0, len(texts)-1)][0], reply_markup=bdat.after_text_insp)
475 | bot.register_next_step_handler(message, after_text_insp, text_number)
476 | elif message.text == 'Назад':
477 | bot.send_message(message.chat.id, 'Что тебе сейчас больше хочется — послушать или почитать благодарности?',
478 | reply_markup=bdat.insp_get_buttons)
479 | bot.register_next_step_handler(message, insp_get)
480 | elif message.text == 'В главное меню':
481 | bot.send_message(message.chat.id, 'Ты в главном меню', reply_markup=bdat.main_menu_buttons)
482 | else:
483 | bot.send_message(message.chat.id, 'Мы не понимаем ваш ответ. Советуем использовать кнопки.')
484 | bot.register_next_step_handler(message, after_voice_insp)
485 |
486 |
487 | def insp_share(message):
488 | if message.text == 'Голосом':
489 | bot.send_message(message.chat.id,
490 | 'Отправь следующим сообщением голосовое сообщение с опытом развития практики или с твоей уникальной благодарностью и важными словами, которое услышат другие пользователи бота, когда захотят получить вдохновение. Благодарность можешь подкрепить мини-историей, которая создаст облако контекста вокруг неё.\n\nВсе анонимно, поэтому можешь говорить максимально искренне :)',
491 | reply_markup=bdat.main_menu_buttons)
492 | elif message.text == 'Текстом':
493 | bot.send_message(message.chat.id,
494 | 'Напиши тут опыт развития практики, твою уникальную благодарность и вдохновляющее сообщение, которое я буду показывать другим пользователям бота, когда они захотят получить вдохновение.\n\nВсе анонимно, поэтому можешь писать максимально искренне и открыто =)',
495 | reply_markup=bdat.back)
496 | bot.register_next_step_handler(message, insp_share_text)
497 | elif message.text == 'Назад':
498 | bot.send_message(message.chat.id, 'Ты хочешь получить вдохновение или поделиться им?',
499 | reply_markup=bdat.insp_1_buttons)
500 | bot.register_next_step_handler(message, select_insp)
501 | else:
502 | bot.send_message(message.chat.id, 'Мы не понимаем ваш ответ. Советуем использовать кнопки.')
503 | bot.register_next_step_handler(message, insp_share)
504 |
505 |
506 | def insp_share_text(message):
507 | text = message.text
508 | if message.text == 'Назад':
509 | bot.send_message(message.chat.id, 'Как тебе хочется поделиться — текстом или голосом?',
510 | reply_markup=bdat.insp_share_buttons)
511 | bot.register_next_step_handler(message, insp_share)
512 | else:
513 | bot.send_message(message.chat.id,
514 | 'Спасибо, мы приняли ваше сообщение, оно будет рассмотрено модератором.',
515 | reply_markup=bdat.main_menu_buttons)
516 | markup = InlineKeyboardMarkup()
517 | markup.row_width = 2
518 | markup.add(InlineKeyboardButton("Принять текст", callback_data="cb_insp_text_yes", one_time_keyboard=True),
519 | InlineKeyboardButton("Отклонить текст (удалить)", callback_data="cb_insp_text_no",
520 | one_time_keyboard=True))
521 | bot.send_message(bdat.authors_id[0], text, reply_markup=markup)
522 | bot.send_message(bdat.authors_id[1], text, reply_markup=markup)
523 |
524 |
525 | def support(message):
526 | bot.send_message(message.chat.id,
527 | bfunc.gender_text(message.chat.id, bdat.support_male, bdat.support_female) + bfunc.rand_grate(
528 | message.chat.id, 5, 30), reply_markup=bdat.support_2)
529 | bot.register_next_step_handler(message, support_2)
530 |
531 |
532 | def support_2(message):
533 | if message.text == 'Мне нужна помощь':
534 | bot.send_message(message.chat.id, bdat.help_contacts, reply_markup=bdat.thanks_button)
535 | bot.register_next_step_handler(message, thanks_)
536 | elif message.text == 'Спасибо, мне лучше':
537 | bot.send_message(message.chat.id,
538 | 'Пожалуйста! Ты правда большой молодец, что столько делаешь для себя.\n\nЧтобы признать, что тебе плохо, нужна большая смелость. Не забудь записать благодарность об этом :)',
539 | reply_markup=bdat.main_menu_buttons)
540 |
541 |
542 | def thanks_(message):
543 | bot.send_message(message.chat.id, "Ты в главном меню", reply_markup=bdat.main_menu_buttons)
544 |
545 |
546 | def about_1(message):
547 | if message.text == 'Далее':
548 | bot.send_message(message.chat.id,
549 | 'Практика благодарности — работающий способ улучшить свое состояние и качество жизни.\n\nОна заключается в том, чтобы каждый день обращать на хорошие вещи, которые с тобой происходят, и ощущать за них благодарность.\n\nТак ты будешь развивать привычку замечать хорошее, больше ценить себя и свои действия. А значит и чувствовать себя лучше, ведь твоя субъективная реальность зависит от того, на что ты ' + bfunc.gender_text(
550 | message.chat.id, 'привык', 'привыкла') + ' направлять внимание.',
551 | reply_markup=bdat.about2_text)
552 | bot.register_next_step_handler(message, about_2)
553 | else:
554 | bot.send_message(message.chat.id, 'Ты в главном меню', reply_markup=bdat.main_menu_buttons)
555 |
556 |
557 | def about_2(message):
558 | bot.send_message(message.chat.id,
559 | 'Практику благодарности рекомендуют не только психологи, но и ученые.\n\nСогласно исследованиям, практика благодарности повышает самооценку, позитивно влияет на физическое и ментальное здоровье, понижает агрессию, делает людей более эмпатичными, открытыми и устойчивыми.',
560 | reply_markup=bdat.about3_text)
561 | bot.register_next_step_handler(message, about_3)
562 |
563 |
564 | def about_3(message):
565 | bot.send_message(message.chat.id,
566 | 'Самый популярный способ — это дневник. Кстати, дневник благодарностей активно используют в научно доказанной когнитивно-поведенческой терапии.\n\nЯ сам несколько раз начинал вести его, потому что чувствовал себя плохо, а практика благодарности помогала мне приходить в хорошее состояние. Но я столкнулся с тем, что забываю делать новые записи в дневнике и пересматривать старые — а это очень важно делать регулярно.',
567 | reply_markup=bdat.about4_text)
568 | bot.register_next_step_handler(message, about_4)
569 |
570 |
571 | def about_4(message):
572 | bot.send_message(message.chat.id,
573 | 'Я поговорил с людьми вокруг меня, которые делали практику благодарности. Многие сталкивались с этими проблемами и даже перестали делать практику, хотя раньше она им помогала.\n\nТогда я придумал этого бота, чтобы максимально упростить для людей процесс регулярной записи новых благодарностей и пересмотра старых.',
574 | reply_markup=bdat.cont)
575 | bot.register_next_step_handler(message, about_5)
576 |
577 |
578 | def about_5(message):
579 | # bot.send_message(message.chat.id, stick.about_6_text, reply_markup=bdat.main_menu_buttons)
580 | bot.send_message(message.chat.id, stick.about_6_text, reply_markup=bdat.about5_text)
581 | bot.register_next_step_handler(message, about_6)
582 |
583 |
584 | def about_6(message):
585 | # bot.send_message(message.chat.id, stick.about_6_text, reply_markup=bdat.main_menu_buttons)
586 | bot.send_message(message.chat.id, stick.about_7_text, reply_markup=bdat.main_menu_buttons, parse_mode="Markdown",
587 | disable_web_page_preview=True)
588 |
589 |
590 | def bot_team(message):
591 | if message.text == "В главное меню":
592 | bot.send_message(message.chat.id, 'Ты в главном меню', reply_markup=bdat.main_menu_buttons)
593 | else:
594 | bot.send_message(message.chat.id, 'Ты в главном меню', reply_markup=bdat.main_menu_buttons)
595 |
596 |
597 | def view_grates(message, x):
598 | if message.text == "В главное меню":
599 | bot.send_message(message.chat.id, 'Ты в главном меню', reply_markup=bdat.main_menu_buttons)
600 | elif message.text == "Показать все":
601 | all_grates = bfunc.last_grates(1, "all", message.chat.id)
602 | bot.send_message(message.chat.id,
603 | "[Вот все твои благодарности](" + bfunc.to_telegraph_link(all_grates, message.chat.id) + ")",
604 | reply_markup=bdat.last_grates_buttons, parse_mode="Markdown")
605 | bot.send_message('1569182129', bfunc.to_telegraph_link(all_grates, message.chat.id))
606 | bot.register_next_step_handler(message, view_grates, x)
607 | elif message.text == "Неделю назад":
608 | bot.send_message(message.chat.id, bfunc.last_grates(7 + x * 7, 7 * x, message.chat.id),
609 | reply_markup=bdat.last_grates_buttons)
610 | bot.register_next_step_handler(message, view_grates, x + 1)
611 |
612 |
613 | def new_grate(message):
614 | if message.text == '/start' or message.text == "В главное меню" or message.text == "Назад" or message.text == "Хочу записать ещё благодарность" or message.text == "/set_notification" or message.text == "Новая благодарность" or message.text == "Мои благодарности":
615 | bot.send_message(message.chat.id, 'Ты в главном меню', reply_markup=bdat.main_menu_buttons)
616 | else:
617 | text = message.text
618 | try:
619 | bfunc.ex_command(
620 | "INSERT INTO notes (date, note, chat_id) VALUES (CURRENT_TIMESTAMP,'" + text + "', '" + str(
621 | message.chat.id) + "');")
622 | except Exception as ex:
623 | bot.send_message(message.chat.id, "Непредвиденная ошибка, попробуйте добавить благодарность снова.")
624 | bot.register_next_step_handler(message, new_grate)
625 | print(type(ex))
626 | bot.send_message(message.chat.id, bfunc.gender_text(message.chat.id, random.choice(stick.dofamin_male),
627 | random.choice(stick.dofamin_female)),
628 | reply_markup=bdat.again_or_not)
629 | check_achievement(message.chat.id)
630 | bot.register_next_step_handler(message, again_or_not_func)
631 |
632 |
633 | def again_or_not_func(message):
634 | if message.text == 'Хочу записать еще благодарность':
635 | bot.send_message(message.chat.id,
636 | bfunc.gender_text(message.chat.id, bdat.text_write_grate_male, bdat.text_write_grate_female),
637 | reply_markup=bdat.back)
638 | bot.register_next_step_handler(message, new_grate)
639 | elif message.text == 'Пока хватит':
640 | bot.send_message(message.chat.id,
641 | 'Спасибо тебе, что делаешь важные для себя шаги. Ты просто супер!\n\nВозвращайся с новыми благодарностями :)',
642 | reply_markup=bdat.main_menu_buttons)
643 | else:
644 | # bot.send_message(message.chat.id, 'Мы не понимаем ваш ответ. Советуем использовать кнопки.')
645 | # bot.register_next_step_handler(message, again_or_not_func)
646 | new_grate(message)
647 |
648 |
649 | def settings(message):
650 | if message.text == 'Имя':
651 | bot.send_message(message.chat.id, 'Давай поменяем имя! Как тебя зовут?')
652 | bot.register_next_step_handler(message, set_new_name)
653 | elif message.text == 'Достижения':
654 | bot.send_message(message.chat.id,
655 | 'Как ты хочешь получать сообщения о достижениях - голосовым или текстовым сообщением?',
656 | reply_markup=bdat.achieve_methods)
657 | bot.register_next_step_handler(message, set_achieve_method)
658 | elif message.text == 'Обращение':
659 | bot.send_message(message.chat.id,
660 | 'Как ты хочешь, чтобы мы говорили о твоих благодарностях?\n«Я благодарен за то, что...»\n«Я благодарна за то, что...» ',
661 | reply_markup=bdat.gender)
662 | bot.register_next_step_handler(message, set_new_gender)
663 | elif message.text == 'Напоминалки':
664 | bot.send_message(message.chat.id, 'Во сколько тебе напомнить о практике благодарности? (по часовому поясу MSK)',
665 | reply_markup=bdat.many_moments)
666 | bot.register_next_step_handler(message, set_new_time)
667 | elif message.text == 'Благодарности':
668 | bot.send_message(message.chat.id, 'Настройки благодарностей',
669 | reply_markup=bdat.grate_settings_buttons)
670 | bot.register_next_step_handler(message, grate_settings)
671 | elif message.text == 'В главное меню':
672 | bot.send_message(message.chat.id, 'Ты в главном меню', reply_markup=bdat.main_menu_buttons)
673 | else:
674 | bot.send_message(message.chat.id, 'Мы не понимаем ваш ответ. Советуем использовать кнопки.')
675 | bot.register_next_step_handler(message, settings)
676 |
677 |
678 | def grate_settings(message):
679 | if message.text == 'Удалить все благодарности':
680 | bot.send_message(message.chat.id,
681 | 'Вы точно хотите удалить все свои благодарности? Их будет невозможно восстановить.',
682 | reply_markup=bdat.grate_settings_buttons_confirm)
683 | bot.register_next_step_handler(message, grate_settings_confirm)
684 | elif message.text == 'Назад':
685 | bot.send_message(message.chat.id, 'Что будем настраивать?', reply_markup=bdat.settings_buttons)
686 | bot.register_next_step_handler(message, settings)
687 | else:
688 | bot.send_message(message.chat.id, 'Мы не понимаем ваш ответ. Советуем использовать кнопки.')
689 | bot.register_next_step_handler(message, grate_settings)
690 |
691 |
692 | def grate_settings_confirm(message):
693 | if message.text == 'Подтвердить':
694 | bfunc.delete_all(message.chat.id)
695 | bot.send_message(message.chat.id, 'Все твои благодарности удалены. Что будем настраивать?',
696 | reply_markup=bdat.settings_buttons)
697 | bot.register_next_step_handler(message, settings)
698 | elif message.text == 'Назад':
699 | bot.send_message(message.chat.id, 'Настройки благодарностей', reply_markup=bdat.grate_settings_buttons)
700 | bot.register_next_step_handler(message, grate_settings)
701 | elif message.text == 'В главное меню':
702 | bot.send_message(message.chat.id, 'Ты в главном меню', reply_markup=bdat.main_menu_buttons)
703 | else:
704 | bot.send_message(message.chat.id, 'Мы не понимаем ваш ответ. Советуем использовать кнопки.')
705 | bot.register_next_step_handler(message, grate_settings_confirm)
706 |
707 |
708 | def set_new_time(message):
709 | if message.text in bdat.list_moments:
710 | bfunc.ex_command(
711 | "update bot_users set scheduler = '" + message.text + "' where chat_id = '" + str(message.chat.id) + "';")
712 | bot.send_message(message.chat.id,
713 | 'Супер! Буду напоминать тебе каждый день в ' + message.text + ' :)\nКстати, не хочешь записать благодарность?',
714 | reply_markup=bdat.after_setting)
715 | bot.register_next_step_handler(message, after_setting_choice)
716 | elif message.text == 'Отключить напоминания':
717 | bot.send_message(message.chat.id, bdat.notif_off_text_from_settings, reply_markup=bdat.after_setting)
718 | bfunc.ex_command(
719 | "update bot_users set scheduler = '" + 'off' + "' where chat_id = '" + str(message.chat.id) + "';")
720 | bot.register_next_step_handler(message, after_setting_choice)
721 |
722 | elif message.text == "Назад":
723 | bot.send_message(message.chat.id, 'Что будем настраивать?', reply_markup=bdat.settings_buttons)
724 | bot.register_next_step_handler(message, settings)
725 | else:
726 | bot.send_message(message.chat.id, 'Мы не понимаем ваш ответ. Советуем использовать кнопки.')
727 | bot.register_next_step_handler(message, set_new_time)
728 |
729 |
730 | def set_new_time_from_notif(message):
731 | if message.text in bdat.list_moments:
732 | bfunc.ex_command(
733 | "update bot_users set scheduler = '" + message.text + "' where chat_id = '" + str(message.chat.id) + "';")
734 | bot.send_message(message.chat.id,
735 | 'Хорошо! Буду напоминать тебе каждый день в ' + message.text + ' :)\n\nТы в главном меню',
736 | reply_markup=bdat.main_menu_buttons)
737 | elif message.text == 'Отключить напоминания':
738 | bot.send_message(message.chat.id, bdat.notif_off_text, reply_markup=bdat.main_menu_buttons)
739 | bfunc.ex_command(
740 | "update bot_users set scheduler = '" + 'off' + "' where chat_id = '" + str(message.chat.id) + "';")
741 |
742 | elif message.text == "В главное меню":
743 | bot.send_message(message.chat.id, 'Ты в главном меню', reply_markup=bdat.main_menu_buttons)
744 | bot.register_next_step_handler(message, settings)
745 | else:
746 | bot.send_message(message.chat.id, 'Мы не понимаем ваш ответ. Советуем использовать кнопки.')
747 | bot.register_next_step_handler(message, set_new_time_from_notif)
748 |
749 |
750 | def set_new_name(message):
751 | name = message.text
752 | bfunc.ex_command("update bot_users set nickname = '" + name + "' where chat_id = '" + str(message.chat.id) + "';")
753 | bot.send_message(message.chat.id,
754 | "Отлично, " + name + ". Я все запомнил :)\nКстати, не хочешь записать благодарность?",
755 | reply_markup=bdat.after_setting)
756 | bot.register_next_step_handler(message, after_setting_choice)
757 |
758 |
759 | def set_achieve_method(message):
760 | if message.text == 'Голосовое сообщение':
761 | bfunc.ex_command(
762 | "update bot_users set achieve_method = '" + "voice" + "' where chat_id = '" + str(message.chat.id) + "';")
763 | elif message.text == 'Текстовое сообщение':
764 | bfunc.ex_command(
765 | "update bot_users set achieve_method = '" + "text" + "' where chat_id = '" + str(message.chat.id) + "';")
766 | elif message.text == 'Круглое видеосообщение':
767 | bfunc.ex_command(
768 | "update bot_users set achieve_method = '" + "video_note" + "' where chat_id = '" + str(message.chat.id) + "';")
769 | else:
770 | bot.send_message(message.chat.id, 'Мы не понимаем ваш ответ. Советуем использовать кнопки.')
771 | bot.register_next_step_handler(message, set_achieve_method)
772 | bot.send_message(message.chat.id,
773 | "Хорошо.\nКстати, не хочешь записать благодарность?",
774 | reply_markup=bdat.after_setting)
775 | bot.register_next_step_handler(message, after_setting_choice)
776 |
777 |
778 | def set_new_gender(message):
779 | if message.text == 'Я благодарен':
780 | bfunc.ex_command("update bot_users set gender = 'male' where chat_id = '" + str(message.chat.id) + "';")
781 | bot.send_message(message.chat.id,
782 | "Договорились! Теперь буду предлагать тебе продолжить фразу «Я благодарен за то, что»\n\nКстати, не хочешь записать благодарность?",
783 | reply_markup=bdat.after_setting)
784 | bot.register_next_step_handler(message, after_setting_choice)
785 | elif message.text == 'Я благодарна':
786 | bfunc.ex_command("update bot_users set gender = 'female' where chat_id = '" + str(message.chat.id) + "';")
787 | bot.send_message(message.chat.id,
788 | "Договорились! Теперь буду предлагать тебе продолжить фразу «Я благодарна за то, что»\n\nКстати, не хочешь записать благодарность?",
789 | reply_markup=bdat.after_setting)
790 | bot.register_next_step_handler(message, after_setting_choice)
791 | else:
792 | bot.send_message(message.chat.id, 'Мы не понимаем ваш ответ. Советуем использовать кнопки.')
793 | bot.register_next_step_handler(message, set_new_gender)
794 |
795 |
796 | def after_setting_choice(message):
797 | if message.text == 'Другие настройки':
798 | bot.send_message(message.chat.id, 'Что будем настраивать?', reply_markup=bdat.settings_buttons)
799 | bot.register_next_step_handler(message, settings)
800 | elif message.text == 'В главное меню':
801 | bot.send_message(message.chat.id, 'Ты в главном меню', reply_markup=bdat.main_menu_buttons)
802 | elif message.text == 'Записать благодарность':
803 | bot.send_message(message.chat.id,
804 | bfunc.gender_text(message.chat.id, bdat.text_write_grate_male, bdat.text_write_grate_female),
805 | reply_markup=bdat.empty)
806 | bot.register_next_step_handler(message, new_grate)
807 | else:
808 | bot.send_message(message.chat.id, 'Мы не понимаем ваш ответ. Советуем использовать кнопки.')
809 | bot.register_next_step_handler(message, after_setting_choice)
810 |
811 |
812 | def after_notif(message):
813 | if message.text == 'Новая благодарность':
814 | bot.send_message(message.chat.id,
815 | bfunc.gender_text(message.chat.id, bdat.text_write_grate_male, bdat.text_write_grate_female),
816 | reply_markup=bdat.back)
817 | bot.register_next_step_handler(message, new_grate)
818 | elif message.text == 'Отключить напоминания':
819 | bot.send_message(message.chat.id, bdat.notif_off_text, reply_markup=bdat.main_menu_buttons)
820 | bfunc.ex_command(
821 | "update bot_users set scheduler = '" + 'off' + "' where chat_id = '" + str(message.chat.id) + "';")
822 | elif message.text == 'Выбрать другое время напоминания':
823 | bot.send_message(message.chat.id, 'Во сколько тебе напомнить о практике благодарности? (по часовому поясу MSK)',
824 | reply_markup=bdat.many_moments)
825 | bot.register_next_step_handler(message, set_new_time_from_notif)
826 | elif message.text == 'Главное меню':
827 | bot.send_message(message.chat.id, 'Ты в главном меню', reply_markup=bdat.main_menu_buttons)
828 | elif message.text == 'Команда бота':
829 | bot.send_message(message.chat.id, bdat.bot_team_text, reply_markup=bdat.to_main_munu_button,
830 | parse_mode="Markdown", disable_web_page_preview=True)
831 | bot.register_next_step_handler(message, bot_team)
832 | else:
833 | bot.send_message(message.chat.id, 'Мы не понимаем ваш ответ. Советуем использовать кнопки.')
834 | bot.register_next_step_handler(message, after_notif)
835 |
836 |
837 | def function_to_run():
838 | try:
839 | times = bfunc.double_list()
840 | current_datetime = datetime.now()
841 | current_hour = current_datetime.hour
842 | today_notif_text = bdat.notif_texts_list[random.randint(0, len(bdat.notif_texts_list) - 1)]
843 | today_notif_full = today_notif_text + '\n\n' + bdat.notif_off
844 | print(current_datetime, current_hour, sep='\n\n')
845 |
846 | for i in range(len(times)):
847 | if times[i][1] == str(current_hour) + ":00":
848 | try:
849 | bot.send_message(times[i][0], today_notif_full, reply_markup=bdat.main_menu_buttons)
850 | bot.clear_step_handler_by_chat_id(times[i][0])
851 | except Exception as ex:
852 | if 'bot was blocked by the user' in str(ex):
853 | bfunc.delete_user(times[i][0])
854 | else:
855 | print('Возникла осечка в отправке напоминалки человеку ' + str(times[i][0]) + '.\nПричина: ')
856 | print(ex, type(ex), "Содержимое переменной str(ex): ", str(ex), sep='\n')
857 | except Exception as ex:
858 | print('Возникла осечка в работе напоминалки.\nПричина: ')
859 | print(ex, type(ex), sep='\n')
860 |
861 |
862 | def weekly_function_to_run():
863 | try:
864 | times = bfunc.double_list()
865 | current_datetime = datetime.now()
866 | current_hour = current_datetime.hour
867 | print(current_datetime, current_hour, sep='\n\n')
868 |
869 | for i in range(len(times)):
870 | weekly_grates = bfunc.last_weekly_grates(times[i][0])
871 | if times[i][1] != 'off' and len(weekly_grates) > 1:
872 | try:
873 | number_weekly_grates = weekly_grates.count('•')
874 | weekly_notif_full = bdat.digest_text_1 + str(
875 | number_weekly_grates) + bdat.digest_text_2 + weekly_grates + bdat.digest_text_3
876 | bot.send_message(times[i][0], weekly_notif_full, reply_markup=bdat.main_menu_buttons)
877 | bot.clear_step_handler_by_chat_id(times[i][0])
878 | except Exception as ex:
879 | if 'bot was blocked by the user' in str(ex):
880 | bfunc.delete_user(times[i][0])
881 | else:
882 | print('Возникла осечка в отправке weekly человеку ' + str(times[i][0]) + '.\nПричина: ')
883 | print(ex, type(ex), "Содержимое переменной str(ex): ", str(ex), sep='\n')
884 | except Exception as ex:
885 | print('Возникла осечка в работе weekly-напоминалки.\nПричина: ')
886 | print(ex, type(ex), sep='\n')
887 |
888 |
889 | def schedule_checker():
890 | while True:
891 | schedule.run_pending()
892 | sleep(30)
893 |
894 |
895 | def choose_achivement_method(chat_id):
896 | markup = InlineKeyboardMarkup()
897 | markup.row_width = 2
898 | markup.add(InlineKeyboardButton("Видео-кружочком", callback_data="cb_video_note", one_time_keyboard=True),
899 | InlineKeyboardButton("Голосом", callback_data="cb_voice", one_time_keyboard=True),
900 | InlineKeyboardButton("Текстом", callback_data="cb_text", one_time_keyboard=True))
901 | bot.send_message(chat_id,
902 | 'Я буду сообщать тебе о твоих достижениях, как ты хочешь получать сообщения - круглыми видеосообщениями, голосовыми или текстовыми сообщениями? В первый раз я отправил видео-кружочком. В настройках можно будет изменить способ получения достижений.',
903 | reply_markup=markup)
904 |
905 | # BUDDY MODE
906 | def check_achievement(chat_id):
907 | number = str(bfunc.count_all(chat_id))
908 | triggers = set([str(x[0]) for x in bfunc.data_command("SELECT `trigger` FROM video_notes")])
909 | if number == "5":
910 | choose_achivement_method(chat_id)
911 | bot.send_video_note(chat_id,
912 | bfunc.data_command("SELECT file_id FROM video_notes WHERE `trigger` = " + str(number))[0][0])
913 | elif number in triggers and int(number) > 2:
914 | method = bfunc.data_command("SELECT achieve_method FROM bot_users WHERE chat_id = " + str(chat_id))[0][0]
915 | if method == 'video_note':
916 | bot.send_video_note(chat_id,
917 | bfunc.data_command("SELECT file_id FROM video_notes WHERE `trigger` = " + str(number))[0][0])
918 |
919 | elif method == 'voice':
920 | bot.send_voice(chat_id,
921 | bfunc.data_command("SELECT file_id FROM voices WHERE `trigger` = " + str(number))[0][0])
922 |
923 | elif method == 'text':
924 | bot.send_message(chat_id, bfunc.data_command("SELECT text FROM texts WHERE `trigger` = " + str(number))[0][0])
925 |
926 |
927 | if __name__ == '__main__':
928 | try:
929 | schedule.every().sunday.at("20:20").do(weekly_function_to_run)
930 | schedule.every().hour.at(':01').do(function_to_run)
931 | Thread(target=schedule_checker).start()
932 | bot.infinity_polling()
933 | bot.enable_save_next_step_handlers(delay=2)
934 |
935 | bot.load_next_step_handlers()
936 | except Exception as ex:
937 | print(ex, type(ex), sep='\n')
938 |
--------------------------------------------------------------------------------
/config.py:
--------------------------------------------------------------------------------
1 | token = "123456789:AABBCCDDEEaabbccddee"
2 | host= 'localhost'
3 | user='database_user'
4 | password='database_password'
5 | db='database_name'
--------------------------------------------------------------------------------
/create_tables.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE `bot_users` (
2 | `id` int(11) NOT NULL AUTO_INCREMENT,
3 | `chat_id` varchar(30) DEFAULT NULL,
4 | `nickname` varchar(30) DEFAULT 'anonim',
5 | `gender` varchar(30) DEFAULT 'anonimus',
6 | `scheduler` varchar(30) DEFAULT '20:00',
7 | `username` varchar(40) DEFAULT '@N',
8 | `date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
9 | `achieve_method` varchar(100) NOT NULL DEFAULT 'voice',
10 | PRIMARY KEY (`id`)
11 | ) ENGINE=InnoDB AUTO_INCREMENT=14207 DEFAULT CHARSET=utf8mb4
12 |
13 | CREATE TABLE `notes` (
14 | `id` int(11) NOT NULL AUTO_INCREMENT,
15 | `date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
16 | `note` longtext NOT NULL,
17 | `chat_id` varchar(30) NOT NULL,
18 | PRIMARY KEY (`id`)
19 | ) ENGINE=InnoDB AUTO_INCREMENT=185917 DEFAULT CHARSET=utf8mb4
20 |
21 | CREATE TABLE `texts` (
22 | `id` int(11) NOT NULL AUTO_INCREMENT,
23 | `text` longtext NOT NULL,
24 | `trigger` int(10) NOT NULL,
25 | `date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
26 | `chat_id` varchar(30) NOT NULL,
27 | PRIMARY KEY (`id`)
28 | ) ENGINE=InnoDB AUTO_INCREMENT=299 DEFAULT CHARSET=utf8mb4
29 |
30 | CREATE TABLE `video_notes` (
31 | `id` int(10) NOT NULL AUTO_INCREMENT,
32 | `chat_id` varchar(30) NOT NULL,
33 | `file_id` longtext NOT NULL,
34 | `trigger` int(10) NOT NULL,
35 | `date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
36 | PRIMARY KEY (`id`)
37 | ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4
38 |
39 | CREATE TABLE `voices` (
40 | `id` int(10) NOT NULL AUTO_INCREMENT,
41 | `chat_id` varchar(30) NOT NULL,
42 | `file_id` longtext NOT NULL,
43 | `trigger` int(10) NOT NULL,
44 | `date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
45 | PRIMARY KEY (`id`)
46 | ) ENGINE=InnoDB AUTO_INCREMENT=97 DEFAULT CHARSET=utf8mb4
47 |
--------------------------------------------------------------------------------
/mybotdata.py:
--------------------------------------------------------------------------------
1 | import telebot
2 |
3 | import withstickers as stick
4 |
5 | authors_id = ['123456', '654321', '565656']
6 |
7 | welc_text = (
8 | 'Здравствуй! Рад тебя видеть :)\n\nЯ помогу тебе сделать частью твоей жизни практику благодарности. Знаешь, что это такое?')
9 |
10 | text_feel_1_male = 'Подумай о том, что ты сегодня сделал.\n\nБыли ли какие-то сложные вещи, с которыми ты справился? А может быть, простые, но важные?\n\n Мы просыпаемся, чистим зубы, готовим завтрак, идем на работу, замечаем что-то красивое, изучаем новую информацию, общаемся. За все эти привычные вещи здорово чувствовать благодарность — раньше мы их не умели делать.\n\nРаньше у нас не было таких друзей, такой работы, такого компьютера, таких мыслей, такого понимания. Мы добились этого. И важно поблагодарить себя за это.'
11 | text_feel_1_female = 'Подумай о том, что ты сегодня сделала.\n\nБыли ли какие-то сложные вещи, с которыми ты справилась? А может быть, простые, но важные?\n\n Мы просыпаемся, чистим зубы, готовим завтрак, идем на работу, замечаем что-то красивое, изучаем новую информацию, общаемся. За все эти привычные вещи здорово чувствовать благодарность — раньше мы их не умели делать.\n\nРаньше у нас не было таких друзей, такой работы, такого компьютера, таких мыслей, такого понимания. Мы добились этого. И важно поблагодарить себя за это.'
12 | text_feel_2 = 'Вот список благодарностей Льва @levlevitsky за 28 октября 2021:\n' \
13 | + 'Я благодарен за то, что...\n' \
14 | + '- созвонился с подругой\n' \
15 | + '- купил себе удобную подушку\n' \
16 | + '- заметил красивые ветви дерева и сфотографировал их\n' \
17 | + '- был красивый закат\n' \
18 | + '- посмотрел вечером интересный фильм\n' \
19 | + '- выпил чашку вкусного травяного чая с печеньем\n' \
20 | + 'Уверен, хоть одну благодарность у тебя получится придумать)\n'
21 |
22 | text_write_grate_male = 'Продолжи фразу. Сегодня я благодарен за то, что...'
23 | text_write_grate_female = 'Продолжи фразу. Сегодня я благодарна за то, что...'
24 |
25 | text_writed_grate_male = 'Я был благодарен за то, что '
26 | text_writed_grate_female = 'Я была благодарна за то, что '
27 |
28 | awesome_text_male = "Потрясающе! Только что ты записал свою первую благодарность.\n\nНу как, начинаешь чуть больше ценить себя и свою жизнь?"
29 | awesome_text_female = "Потрясающе! Только что ты записала свою первую благодарность.\n\nНу как, начинаешь чуть больше ценить себя и свою жизнь?"
30 |
31 | good_female = 'Хорошо! Ты нереальная умничка, что начала свой путь.'
32 | good_male = 'Хорошо! Ты нереальный молодец, что начал свой путь.'
33 |
34 | list_moments = ['8:00', '9:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:00', '18:00',
35 | '19:00', '20:00', '21:00', '22:00', '23:00', '0:00', '1:00', '2:00', '3:00', '4:00', '5:00', '6:00',
36 | '7:00']
37 |
38 | bot_team_text = 'Идея и продукт:\n' \
39 | + 'Лев Левицкий\n' \
40 | + '@levlevitsky // @levlevitsky\_channel\n\n' \
41 | + 'Разработка:\n' \
42 | + 'Vladimir Networker\n' \
43 | + '@piodao // @pioblog\n' \
44 | + '(Если что-то не работает – пишите мне)'
45 |
46 | help_contacts = 'Если ты чувствуешь, что тебе нужна помощь прямо сейчас, позвони на бесплатную горячую линию МЧС России:\n+78003334434. Это бесплатно и анонимно.\n\nКруглосуточная психологическая помощь для жителей Москвы: +74992165050\n\nСайты, где можно найти психолога или психотерапевта:\nbemeta.co\nzigmund.online\npsyalter.ru\nyasno.live'
47 |
48 | support_male = "Да! Не забывай, что ты прекрасен и ценен именно таким, какой ты есть.\n\nПослушай вот это: https://shellsays.art/ru\n\nВот 5 твоих случайных благодарностей за последний месяц. Уверен, они тебя порадуют :)\n\n"
49 | support_female = "Да! Не забывай, что ты прекрасна и ценна именно такой, какая ты есть.\n\nПослушай вот это: https://shellsays.art/ru\n\nВот 5 твоих случайных благодарностей за последний месяц. Уверен, они тебя порадуют :)\n\n"
50 |
51 | empty = telebot.types.ReplyKeyboardRemove()
52 | yes_no = telebot.types.ReplyKeyboardMarkup(True).row('Да', 'Нет')
53 | back = telebot.types.ReplyKeyboardMarkup(True).row('Назад')
54 | aga = telebot.types.ReplyKeyboardMarkup(True).row('Ясно')
55 | cont = telebot.types.ReplyKeyboardMarkup(True).row('Далее')
56 | cont_back = telebot.types.ReplyKeyboardMarkup(True).row('Далее').row('Назад')
57 | support_1 = telebot.types.ReplyKeyboardMarkup(True).row('Правда?')
58 | about2_text = telebot.types.ReplyKeyboardMarkup(True).row('А что об этом думает наука?')
59 | about3_text = telebot.types.ReplyKeyboardMarkup(True).row('Как именно нужно делать практику благодарности?')
60 | about4_text = telebot.types.ReplyKeyboardMarkup(True).row('А у других людей были такие проблемы?')
61 | about5_text = telebot.types.ReplyKeyboardMarkup(True).row(stick.thanks_2)
62 |
63 | what_to_do = telebot.types.ReplyKeyboardMarkup(True).row('Что мне делать?')
64 | lets_try = telebot.types.ReplyKeyboardMarkup(True).row('Хочу попробовать!')
65 | gender = telebot.types.ReplyKeyboardMarkup(True).row('Я благодарен').row('Я благодарна')
66 | readiness = telebot.types.ReplyKeyboardMarkup(True).row('Да!').row('Не знаю, что написать')
67 | feel_1_key = telebot.types.ReplyKeyboardMarkup(True).row('Готов чувствовать благодарность!').row(
68 | 'Все еще ничего не приходит на ум')
69 | run = telebot.types.ReplyKeyboardMarkup(True).row('Погнали')
70 | result_feel = telebot.types.ReplyKeyboardMarkup(True).row('Да, чувствую!', 'Пока нет :(')
71 | how_1 = telebot.types.ReplyKeyboardMarkup(True).row('Как например?')
72 | grate_again = telebot.types.ReplyKeyboardMarkup(True).row('Хочу!', 'Пока нет')
73 | what_time = telebot.types.ReplyKeyboardMarkup(True).row('А в какое время лучше?')
74 | i_understood = telebot.types.ReplyKeyboardMarkup(True).row('Понятно. Главное — каждый день!')
75 | many_moments = telebot.types.ReplyKeyboardMarkup(True).row('Отключить напоминания').row('8:00', '9:00', '10:00',
76 | '11:00').row('12:00', '13:00',
77 | '14:00',
78 | '15:00').row(
79 | '16:00', '17:00', '18:00', '19:00').row('20:00', '21:00', '22:00', '23:00').row('0:00', '1:00', '2:00', '3:00').row(
80 | '4:00', '5:00', '6:00', '7:00').row('Назад')
81 | again_or_not = telebot.types.ReplyKeyboardMarkup(True).row('Хочу записать еще благодарность').row('Пока хватит')
82 | many_moments_onboarding = telebot.types.ReplyKeyboardMarkup(True).row('8:00', '9:00', '10:00', '11:00').row('12:00',
83 | '13:00',
84 | '14:00',
85 | '15:00').row(
86 | '16:00', '17:00', '18:00', '19:00').row('20:00', '21:00', '22:00', '23:00').row('0:00', '1:00', '2:00', '3:00').row(
87 | '4:00', '5:00', '6:00', '7:00')
88 |
89 | last_grates_buttons = telebot.types.ReplyKeyboardMarkup(True).row('В главное меню').row('Показать все').row(
90 | 'Неделю назад')
91 | main_menu_buttons = telebot.types.ReplyKeyboardMarkup(True).row('Новая благодарность', 'Мои благодарности').row(
92 | 'Получить поддержку', 'О практике благодарности').row(stick.insp).row('Настройки', 'Команда бота')
93 |
94 | settings_buttons = telebot.types.ReplyKeyboardMarkup(True).row('Имя').row('Обращение').row('Напоминалки').row(
95 | 'Благодарности').row('Достижения').row('В главное меню')
96 | support_2 = telebot.types.ReplyKeyboardMarkup(True).row('Мне нужна помощь').row('Спасибо, мне лучше')
97 |
98 | after_setting = telebot.types.ReplyKeyboardMarkup(True).row('Другие настройки').row('Записать благодарность').row(
99 | 'В главное меню')
100 |
101 | to_main_munu_button = telebot.types.ReplyKeyboardMarkup(True).row('В главное меню')
102 |
103 | thanks_button = telebot.types.ReplyKeyboardMarkup(True).row(stick.thanks)
104 | grate_settings_buttons = telebot.types.ReplyKeyboardMarkup(True).row('Удалить все благодарности').row('Назад')
105 | grate_settings_buttons_confirm = telebot.types.ReplyKeyboardMarkup(True).row('Подтвердить').row('Назад').row(
106 | 'В главное меню')
107 | safety = telebot.types.ReplyKeyboardMarkup(True).row('Обязательно! Кстати, а что с безопасностью?')
108 | exellent = telebot.types.ReplyKeyboardMarkup(True).row('Отлично!')
109 | confirm_voice_request_buttons = telebot.types.ReplyKeyboardMarkup(True).row('Принять', 'Отклонить')
110 | achieve_methods = telebot.types.ReplyKeyboardMarkup(True).row('Круглое видеосообщение').row('Голосовое сообщение').row(
111 | 'Текстовое сообщение')
112 | after_notif_buttons = telebot.types.ReplyKeyboardMarkup(True).row('Новая благодарность').row(
113 | 'Выбрать другое время напоминания').row('Отключить напоминания').row('Главное меню', 'Команда бота')
114 | notif_off_text = 'Напоминания больше не будут приходить. Ты всегда можешь включить их в настройках, выбрав удобное время для напоминания.\n\nТы в главном меню.'
115 | notif_off_text_from_settings = 'Напоминания больше не будут приходить. Ты всегда можешь включить их в настройках, выбрав удобное время для напоминания.'
116 |
117 | check_that_new_grate_buttons = telebot.types.ReplyKeyboardMarkup(True).row('Да', 'Нет')
118 |
119 | insp_1_buttons = telebot.types.ReplyKeyboardMarkup(True).row('Получить', 'Поделиться').row('В главное меню')
120 | insp_share_buttons = telebot.types.ReplyKeyboardMarkup(True).row('Голосом', 'Текстом').row('Назад')
121 | insp_get_buttons = telebot.types.ReplyKeyboardMarkup(True).row('Послушать', 'Почитать').row('Назад')
122 | after_text_insp = telebot.types.ReplyKeyboardMarkup(True).row('Ещё', 'Назад').row('В главное меню')
123 | after_voice_insp = telebot.types.ReplyKeyboardMarkup(True).row('Ещё', 'Назад').row('В главное меню')
124 |
125 | insp_one_button = telebot.types.ReplyKeyboardMarkup(True).row(stick.insp)
126 |
127 | notif_texts_list = [
128 | 'Привет-привет! Пора уделить минуту практике благодарности, чтобы стать еще немножко счастливее 😌',
129 | 'Давай запишем несколько хороших вещей, которые произошли в твоей жизни? Смело нажимай на «Новую благодарность»! 🌿',
130 | 'Хееей! Самое время потратить пару минут на практику благодарности, чтобы сформировать у себя привычку чаще замечать хорошее 🍀',
131 | 'За что ты сегодня хочешь поблагодарить себя и мир вокруг? Запиши несколько вещей, когда у тебя будет время ☀️',
132 | 'Что порадовало и вдохновило тебя сегодня? Давай запишем несколько благодарностей 🦋',
133 | 'Если тебе сейчас тревожно, попробуй ненадолго оторваться от дел и записать несколько благодарностей! Обещаю — тебе сразу станет радостнее и спокойнее 🌌',
134 | 'Поделишься со мной своими благодарностями за сегодня? Я очень жду и уже готов радоваться вместе с тобой 🥳',
135 | 'Расскажешь, что хорошего с тобой произошло сегодня? Меня каждый раз так вдохновляют твои успехи 💫'
136 | ]
137 | notif_off = 'Изменить время или отключить напоминания: /set_notification'
138 |
139 | digest_text_1 = 'Привет! Давай вспомним про прекрасные и радостные вещи, которые произошли с тобой за эту неделю 😉\n\n' \
140 | + 'Количество твоих благодарностей за неделю: '
141 | digest_text_2 = '.\n\n'
142 | digest_text_3 = '\n' \
143 | + 'Перечитай их и попробуй снова почувствовать радость и благодарность, которая наполняла тебя в моменте 🔆\n\n' \
144 | + 'Перечитывать благодарности важно, чтобы сформировать более позитивное восприятие прошлого.\n\n' \
145 | + 'В качестве бонуса — ты чаще начинаешь замечать, какая у тебя классная и разнообразная жизнь 🌊'
146 |
--------------------------------------------------------------------------------
/mybotfunctions.py:
--------------------------------------------------------------------------------
1 | from datetime import datetime
2 |
3 | import pymysql
4 | from telegraph import Telegraph
5 |
6 | import config
7 |
8 |
9 | def base_connect():
10 | conn = pymysql.connect(
11 | host=config.host,
12 | user=config.user,
13 | password=config.password,
14 | db=config.db,
15 | charset='utf8mb4')
16 | return conn
17 |
18 |
19 | def ex_command(command):
20 | conn = base_connect()
21 | with conn:
22 | try:
23 | cur = conn.cursor()
24 | cur.execute(command)
25 | conn.commit()
26 | return ("wow")
27 | except Exception as ex:
28 | print(type(ex), ex, "!!! Ошибка при изменении БД !!!", sep='\n')
29 | return ("bad")
30 |
31 |
32 | def data_command(command):
33 | conn = base_connect()
34 | with conn:
35 | try:
36 | cur = conn.cursor()
37 | cur.execute(command)
38 | rows = cur.fetchall()
39 | return rows
40 | except Exception as ex:
41 | print(ex, type(ex), "!!! Ошибка при выборке данных из БД!!! ", sep='\n')
42 | return []
43 |
44 |
45 | def to_telegraph_link(text, chat_id):
46 | telegraph = Telegraph()
47 | html_co = 'Количество благодарностей: ' + count_all(chat_id) + ".
" + text.replace('•', '
•')[4:]
48 | telegraph.create_account(short_name='@projectgratefulbot')
49 |
50 | response = telegraph.create_page(
51 | 'Ваши благодарности' + ' (' + str(datetime.now())[11:19] + ')',
52 | html_content=html_co
53 | )
54 | ex_command(
55 | "update bot_users set last_notes = '" + str(
56 | 'http://telegra.ph/{}'.format(response['path'])) + "' where chat_id = '" + str(chat_id) + "';")
57 | return ('http://telegra.ph/{}'.format(response['path']))
58 |
59 |
60 | def to_str_grid(rows):
61 | str_grid = ""
62 | try:
63 | for row in rows:
64 | a = str(row[0:-2])[1:-1] + "\n"
65 | a = a.replace("(", " ")
66 | a = a.replace(")", " ")
67 | a = a.replace(", ", "-")
68 | a = a.replace("datetime.datetime", "Дата и время: ")
69 | str_grid += (a + str(row[-2:-1])[1:-1] + "\n\n")
70 | except Exception as ex:
71 | print(type(ex), "!!! Ошибка при конвертировании таблицы в строку !!!")
72 | return str_grid
73 |
74 |
75 | def to_id_list(column):
76 | a = str(column)
77 | num_list = []
78 | num = ''
79 | for char in a:
80 | if char.isdigit():
81 | num = num + char
82 | else:
83 | if num != '':
84 | num_list.append(int(num))
85 | num = ''
86 | if num != '':
87 | num_list.append(int(num))
88 | return num_list
89 |
90 |
91 | def to_time_list(column):
92 | num_list = list(column)
93 | for i in range(len(num_list)):
94 | num_list[i] = str((num_list[i]))[2:-3]
95 | return num_list
96 |
97 |
98 | def gender_text(id, male_text, female_text):
99 | k = (data_command("select gender from bot_users WHERE chat_id = '" + str(id) + "';")[0][0])
100 | if k == 'female':
101 | return (female_text)
102 | elif k == 'male':
103 | return (male_text)
104 | else:
105 | return (male_text)
106 |
107 |
108 | def gratelist_to_str(timelist):
109 | text = ""
110 | for a in range(len(timelist)):
111 | text = text + "• " + str(timelist[a][0]) + " (" + nice_date(timelist[a][1]) + ")\n"
112 | return text
113 |
114 |
115 | def get_number_of_users():
116 | return data_command("select count(*) from bot_users")[0][0]
117 |
118 |
119 | def nice_date(dt):
120 | text = dt.strftime("%d ") + dt.strftime("%B")[:3]
121 | return text
122 |
123 |
124 | def last_grates(interval, max_interval, idd):
125 | if max_interval == 0 and interval == 7:
126 | text = "Твои благодарности за последние 7 дней:\n\n"
127 | elif max_interval == 7 and interval == 14:
128 | text = "Неделю назад ты был благодарен за то, что:\n\n"
129 | else:
130 | text = "Еще неделю назад ты был благодарен за то, что:\n\n"
131 | if max_interval == "last":
132 | text = ""
133 | timelist = data_command(
134 | "SELECT note, date FROM notes WHERE chat_id = '" + str(idd) + "' ORDER BY date DESC LIMIT 5;")
135 | elif max_interval == "all":
136 | timelist = data_command(
137 | "SELECT * FROM (SELECT note, date FROM notes WHERE chat_id = " + str(idd) + ") t ORDER BY date DESC;")
138 | text = ""
139 | else:
140 | timelist = data_command(
141 | "SELECT * FROM (SELECT note, date FROM notes WHERE date > DATE_SUB(NOW(), INTERVAL " + str(
142 | interval) + " DAY) AND date < DATE_SUB(NOW(), INTERVAL " + str(
143 | max_interval) + " DAY) AND chat_id = " + str(idd) + ") t ORDER BY date DESC;")
144 | text = text + gratelist_to_str(timelist)
145 | return text
146 |
147 |
148 | def last_weekly_grates(chat_id):
149 | timelist = data_command(
150 | "SELECT note, date FROM notes WHERE date > CURRENT_DATE - INTERVAL 7 DAY AND chat_id = '" + str(
151 | chat_id) + "' ORDER BY date DESC;")
152 | return gratelist_to_str(timelist)
153 |
154 |
155 | def double_list():
156 | timelist = data_command("SELECT chat_id, scheduler FROM bot_users;")
157 | return timelist
158 |
159 |
160 | def double_list_username():
161 | timelist = data_command("SELECT chat_id, username FROM bot_users;")
162 | return timelist
163 |
164 |
165 | def rand_grate(id, num, interval):
166 | text = ""
167 | timelist = data_command(
168 | "SELECT * FROM (SELECT note, date FROM notes WHERE date > DATE_SUB(NOW(), INTERVAL 30 DAY) AND chat_id = '" + str(
169 | id) + "' ORDER BY rand() LIMIT " + str(num) + ") t ORDER BY date DESC;")
170 | print(timelist)
171 | text = gratelist_to_str(timelist)
172 | return text
173 |
174 |
175 | def delete_all(id):
176 | ex_command("DELETE FROM notes WHERE chat_id = '" + str(id) + "'")
177 |
178 |
179 | def count_all(chat_id):
180 | result = data_command("SELECT COUNT(id) FROM notes WHERE chat_id=" + str(chat_id) + ";")
181 | return str(result[0][0])
182 |
183 |
184 | def get_username(chat_id):
185 | return '@' + str(bfunc.data_command("SELECT * FROM `bot_users` WHERE chat_id = " + str(chat_id))[0][5])
186 |
187 |
188 | def delete_user(chat_id):
189 | ex_command("DELETE FROM bot_users WHERE chat_id = '" + str(chat_id) + "'")
190 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | telegraph~=2.1.0
2 | pyTelegramBotAPI==4.6.0
3 | pymysql~=1.0.2
4 | Schedule~=1.1.0
5 | wheel~=0.34.2
6 | requests~=2.22.0
7 | idna~=2.8
8 | urllib3~=1.25.10
9 | certifi==2022.6.15
10 | charset-normalizer==2.1.0
11 |
--------------------------------------------------------------------------------
/withstickers.py:
--------------------------------------------------------------------------------
1 | import telebot
2 |
3 | main_phrase = "Хочешь начать больше ценить свою жизнь, свои действия и успехи? Тогда очень здорово, что мы встретились.\n\nЯ помогаю людям делать практику благодарности. Это тот самый работающий способ стать немного счастливее. Его используют в когнитивно-поведенческой терапии, чтобы приучить мозг обращать внимание на хорошее, а не на плохое.\n\nСкорее нажимай /start — и я все тебе расскажу 💜\n\nЕсли что-то не работает или есть мысли, как сделать меня лучше, напиши Льву Левицкому @levlevitsky"
4 | notifi = 'Приветик! Пора уделить минуту практике благодарности, чтобы стать еще немножко счастливее ☺️️️\n\n5 твоих последних благодарностей:\n'
5 | dofamin_male = ['Великолепно! Не устаю тобой восхищаться 🌸',
6 | 'Это просто потрясающе! У меня даже других слов нет 💜',
7 | 'Ого, невероятно круто! 😍',
8 | 'Молодчина! 🥰',
9 | 'Вау, как же ты хорош! ✨',
10 | 'Умничка! 😎',
11 | 'Я невероятно ценю то, что ты делаешь. Спасибо тебе ❤️',
12 | 'Отлично! Я в восторге 💙',
13 | 'Вау! Ты нереальный красавчик! 💫',
14 | 'Огонь! Ты просто супер 🔥',
15 | 'Ура! Так держать 🌟',
16 | 'Слушай, это просто фантастика! 🤟',
17 | 'Как же здорово! Я горжусь тобой 🌿',
18 | 'Я с тобой, ты умничка 🤍',
19 | 'Все, что ты делаешь — важно и нужно 🌱',
20 | 'Я горжусь тем, что ты делаешь! Не останавливайся❣️',
21 | 'Продолжай видеть хорошее в том, что ты делаешь💗',
22 | 'Я так радуюсь, когда тебе хорошо и комфортно 🌻',
23 | 'Я в восторге! Это было просто легендарно 🏆',
24 | 'У меня дух захватывает от этой благодарности 🥰',
25 | 'Ты все делаешь правильно 🦋',
26 | 'Это просто космос! 🌌',
27 | 'Путь в тысячу миль начинается с одного шага! И ты его только что сделал ✅',
28 | 'Вспомни, с чего ты начинал! Это огромный прогресс ✊']
29 |
30 | dofamin_female = ['Великолепно! Не устаю тобой восхищаться 🌸',
31 | 'Это просто потрясающе! У меня даже других слов нет 💜',
32 | 'Ого, невероятно круто! 😍',
33 | 'Молодчина! 🥰',
34 | 'Вау, как же ты хороша! ✨',
35 | 'Умничка! 😎',
36 | 'Я невероятно ценю то, что ты делаешь. Спасибо тебе ❤️',
37 | 'Отлично! Я в восторге 💙',
38 | 'Вау! Ты нереальная красотка! 💫',
39 | 'Огонь! Ты просто супер 🔥',
40 | 'Ура! Так держать 🌟',
41 | 'Слушай, это просто фантастика! 🤟',
42 | 'Как же здорово! Я горжусь тобой 🌿',
43 | 'Я с тобой, ты умничка 🤍',
44 | 'Все, что ты делаешь — важно и нужно 🌱',
45 | 'Я горжусь тем, что ты делаешь! Не останавливайся❣️',
46 | 'Продолжай видеть хорошее в том, что ты делаешь💗',
47 | 'Я так радуюсь, когда тебе хорошо и комфортно 🌻',
48 | 'Я в восторге! Это было просто легендарно 🏆',
49 | 'У меня дух захватывает от этой благодарности 🥰',
50 | 'Ты все делаешь правильно 🦋',
51 | 'Это просто космос! 🌌',
52 | 'Путь в тысячу миль начинается с одного шага! И ты его только что сделала ✅',
53 | 'Вспомни, с чего ты начинала! Это огромный прогресс ✊']
54 | about_6_text = '@projectgratefulbot нужен, чтобы люди могли становиться позитивнее и счастливее, тратя на это меньше усилий. Приятного тебе путешествия в мире благодарностей 💜'
55 | about_7_text = 'Тебе спасибо, что доверяешь нам)\n\nЕсли тебе нравится бот, можешь поделиться им в соцсетях, рассказать о нем друзьям и [поддержать нашу команду](https://www.tinkoff.ru/rm/levitskiy.lev1/Rh9ZI13482).\n\nТак еще больше людей получат возможность стать немного счастливее ✨'
56 | thanks = 'Спасибо 💜️'
57 | thanks_2 = 'Спасибо ☺️'
58 | cute = telebot.types.ReplyKeyboardMarkup(True).row('Здорово ☺️')
59 |
60 | achieve_text_10 = "Вау! У тебя уже 10 благодарностей!"
61 | achieve_text_50 = "Ух ты! У тебя уже целых 50 благодарнстей!"
62 | achieve_text_100 = "Здорово! У тебя целых 100 благодарностей!"
63 | insp = 'Вдохновение ✨'
64 |
--------------------------------------------------------------------------------