def cmd_save_text(message): if len(message.text) > 1000: bot.send_message(message.chat.id, config.lang.s_error_note_too_long) return None global offset_storage # Check, if message starts with bot mention. If yes -> remove it if message.text.startswith(r'@'): message.text = ' '.join(message.text.split()[1:]) # Convert user's time to server's local time to set "at" command taking offset into account time_to_set = utils.convert_user_time_to_at_command(utils.get_time_storage().get(str(message.chat.id)), offset_storage.get(key=str(message.chat.id))) logger.debug('User {0!s} is going to set time: {1!s}'.format( str(message.from_user.username) + ' (' + str(message.chat.id) + ')', time_to_set)) # Get Unixtime to set to SQLite DB unixtime_to_save_to_db = utils.convert_user_time_to_local_timestamp(utils.get_time_storage().get(str(message.chat.id)), offset_storage.get(str(message.chat.id))) # Set "at" command and recieve Job ID from it job_id = systemtools.set_new_at_job(message.chat.id, time_to_set, message.text.replace('"', r'\"')) # Probably this is not the best choice, because some errors can have "job" word in them # If not job id provided (error happened or something else) if not job_id: bot.send_message(message.chat.id, config.lang.s_error_could_not_save_note) return None logger.info('Successfully set reminder #{0!s} at {1!s}'.format(job_id, time_to_set)) # Insert new row in table mydb = SQLighter(config.database_schedules_file) mydb.insert(message.chat.id, unixtime_to_save_to_db, job_id) mydb.close() bot.send_message(message.chat.id, config.lang.s_common_note_added.format( utils.get_time_storage().get(str(message.chat.id)))) # After setting note, reset to START set_new_state(message.chat.id, StateMachine.States.STATE_START)
def add_page_to_type(message): UID = message.chat.id UTXT = message.text if UTXT == u'/cancel': bot.send_message(UID, 'Хорошо, возвращаю тебя на главную.', reply_markup=key_default) elif UTXT == u'В диалог с ботом 👤': with open(str(UID) + '.UID', 'r') as file: # Открываем временный .UID для чтения data = json.load(file) data['to'] = 0 data['channel'] = UID db = SQLighter() # Выполняем запрос в БД, если пользователь выбрал 'В чат с ботом' db.insert(data['uid'], data['vk'], data['vk_original'], data['vk_type'], int(data['last_id']), 0, 0, 0, 1) db.close() msg = bot.send_message(UID, 'Я буду присылать новые записи с указанной страницы в этот диалог ' \ '(с ботом *VK Poster*).\n\nЧтобы включить отправку репостов из других групп, а также настроить ' \ 'отправку вложений (фотографий, аудио и т. д.) перейди в *Настройки моих страниц*.' \ '\n\nЧто будем делать дальше?', parse_mode='Markdown', reply_markup=key_default) botan.track(BOTAN_TOKEN, message.chat.id, message, 'Добавление страницы (в чат с ботом)') elif UTXT == u'В публичный канал 👥': msg = bot.send_message(UID, 'Чтобы бот смог отправлять записи в публичный канал, нужно сделать бота ' \ '*VK Poster* администратором канала.\n\nКогда администратор добавлен, отправь мне логин ' \ 'канала (например: *@durov*):', parse_mode='Markdown', reply_markup=key_hide) bot.register_next_step_handler(msg, add_page_channel) else: msg = bot.reply_to( message, 'Похоже, ты не ответил на вопрос. Куда присылать новые записи?') bot.register_next_step_handler(msg, add_page_to_type)
def add_page_channel(message): UID = message.chat.id UTXT = message.text accept = True if UTXT == u'/cancel': bot.send_message(UID, 'Хорошо, возвращаю тебя на главную.', reply_markup=key_default) elif bool(re.search('^@\S+\Z', UTXT)): db = SQLighter() check = db.select_by_chn(UTXT) db.close() if len(check) > 0: if int(check[0][1]) != int(UID): # Проверяем, есть ли уже такой канал в базе, и если есть, # то сверяем ID текущего пользователя и ID пользователя из базы # во избежание получения доступа к чужому каналу Telegram, в # котором бот уже является администратором msg = bot.reply_to(message, 'Хмм, похоже, что кто-то другой уже использует данный канал.\n' \ 'Чтобы добавить страницу VK для данного канала, используй аккаунт Telegram, с которого ' \ 'добавлял первую страницу.\n\nПопробуй прислать другой логин канала (начинается с ' \ '*@*) или нажми /cancel для отмены.', reply_markup=key_hide, parse_mode='Markdown') accept = False bot.register_next_step_handler(msg, add_page_channel) if accept: try: if len(check) < 1: bot.send_message(UTXT, 'Бот *VK Poster* (@VKPstBot) теперь будет отправлять ' \ 'записи в этот канал.', parse_mode='Markdown') with open(str(UID) + '.UID', 'r') as file: # Открываем временный .UID для чтения data = json.load(file) data['to'] = 1 data['channel'] = UTXT db = SQLighter() # Выполняем запрос в БД, если пользователь выбрал 'В публичный канал' db.insert(data['uid'], data['vk'], data['vk_original'], data['vk_type'], int(data['last_id']), int(data['to']), data['channel'], 0, 1) db.close() UTXT = re.sub('_', '\_', UTXT) msg = bot.send_message(UID, 'Я буду присылать новые записи с указанной страницы в канал ' \ '%s.\n\nЧтобы включить отправку репостов из других групп, а также настроить ' \ 'отправку вложений (фотографий, аудио и т. д.) перейди в *Настройки моих страниц*.' \ '\n\nЧто будем делать дальше?' % (UTXT.encode('utf-8')), parse_mode='Markdown', reply_markup=key_default) botan.track(BOTAN_TOKEN, message.chat.id, message, 'Добавление страницы (в публичный канал)') except Exception as ex: UTXT = re.sub('_', '\_', UTXT) msg = bot.reply_to(message, 'Необходимо сделать бота *VK Poster* администратором канала %s.\n' \ 'Отправь мне логин канала (начинается с *@*), в котором *VK Poster* является ' \ 'администратором и может отправлять сообщения.' % (UTXT.encode('utf-8')), parse_mode='Markdown') bot.register_next_step_handler(msg, add_page_channel) elif accept: msg = bot.reply_to(message, 'Похоже, ты не прислал логин канала (начинается с *@*). ' \ 'Попробуй ещё раз.', parse_mode='Markdown') bot.register_next_step_handler(msg, add_page_channel)