Телепот телеграмма бот. InlineKeyboardButton не работает для некоторых текстов - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть два экземпляра телеграмм-ботов, работающих локально и на производственном сервере. Я дважды проверил, что все окружение одинаково, и установил с помощью virtualenv.

Локальная версия работает нормально, а prod - нет. Когда я нажимаю кнопки, ничего не происходит. Я обнаружил, что не работают только кнопки для одного конкретного текста.

Я поэкспериментировал дальше и обнаружил, что если я обрежу этот текст, вот так [0:386] или меньше кнопок сработают, но в случае [0:387] или больше, он остановится. Забавно, что если я отрежу голову [380:976] (общая длина 976), это тоже сработает. Вот почему я предположил, что речь идет не о каком-то особом символе, потому что эти диапазоны перекрываются, и в этом месте нет ничего особенного (это середина слова), а не о переполнении буфера отправки, потому что большая часть строки работает просто отлично.

И, наконец, функция sendMessage возвращает экземпляр объекта Message без ошибок, как говорит документация .

Вот часть кода:

def send_hello(self, chat_id):
    text = BotText.objects.get(name=self.name).welcome
    if text is None or text == '':
        text = BotText.objects.get(name='common').welcome

    reply_markup = InlineKeyboardMarkup(
        inline_keyboard=[
            [
                InlineKeyboardButton(
                    text='text_1',
                    callback_data="callback_data_1"
                ),
                InlineKeyboardButton(
                    text='text_2',
                    callback_data='callback_data_2'
                ),
            ],
            [
                InlineKeyboardButton(
                    text='О проекте',
                    callback_data='about'
                ),
                InlineKeyboardButton(
                    text='Контакты',
                    callback_data='contacts'
                ),
            ]
        ]
    )

    self.send_message(chat_id, text, parse_mode='Markdown', reply_markup=reply_markup)

def send_message(self, chat_id, text, parse_mode=None, reply_markup=None):
    self.bot.sendMessage(
        chat_id,
        text,
        parse_mode=parse_mode,
        reply_markup=reply_markup,
    )

Что еще можно проверить?

UPD: Текст не включал, сри

Привет!

Это бот проекта *Роскомсвобода*.

Тут можно:
- поискать по реестру запрещенных сайтов и реестру организаторов распространения информации (ОРИ);
- выбрать себе VPN-сервис, с помощью которых можно восстановить доступ к неправомерно заблокированной информации;
- подключить наш прокси для Telegram;
- связаться с Роскомсвободой.

*1) Поиск*
Чтобы осуществить поиск введите ip-адрес или имя домена.

*2) Выбрать VPN*
В этом чате вы можете выбрать VPN-сервис из *VPNlove.me* - маркетплейса проверенных  VPN.
Мы тщательно отбираем VPN-сервисы, которые размещаем в своем маркетплейсе.
Главные требования - это *уважение к частной жизни пользователей* и *запрет какой-либо цензуры*.

*3) Telegram-прокси*
Чтобы подключиться к Telegram через наш прокси - нажмите на ссылку

*4) Связаться с Роскомсвободой*

По общим вопросам: roskomsvoboda@rublacklist.net
Для СМИ: +7-903-003-89-52
По вопросам функционирования сервиса VPNlove.me: contact@vpnlove.me
...