- Saved searches
- Use saved searches to filter your results more quickly
- Can’t Use Line Break on Telegram API #286
- Can’t Use Line Break on Telegram API #286
- Comments
- Bug description
- To reproduce
- Expected behavior
- Environment
- Screenshots
- ПЕРЕНОС СТРОКИ PYTHON TELEBOT
- Как сделать перевод строки в телеграм боте на python?
- Python-сообщество
- #1 Май 14, 2022 19:36:32
- Перенос строк TeleBot
- #2 Май 15, 2022 02:50:31
- Перенос строк TeleBot
- #3 Май 15, 2022 06:22:33
- Перенос строк TeleBot
- #4 Май 15, 2022 12:05:05
- Перенос строк TeleBot
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Can’t Use Line Break on Telegram API #286
Can’t Use Line Break on Telegram API #286
Comments
Bug description
I can’t create line break when using webhook on Telegram Bot API
To reproduce
Steps to reproduce the behavior:
- Setup the webhook
- Use HTTP POST to https://api.telegram.org/bot_token/sendMessage
- Add JSON payload with line break ( \n or %0A ) on the text parameter
- The line break ( \n or %0A ) will be printed as character on the Telegram, it doesn’t create new line.
Expected behavior
New line created when i used the line break character.
Environment
Screenshots
The line break doesn’t works:
The text was updated successfully, but these errors were encountered:
@Kubitomakita I changed the implementation. Now I send the raw data to my own coded webhook handler, then the webhook handler process it and send a notification to Telegram.
I see, thanks for the update!
Let me reopen this ticket anyway as the underlying issue is still not resolved. I’d like to check and fix the newline characters
Sure. I think I know why it happened. To create a line break in Telegram, is to use \n , but when I write \n and save it, it will turn into \\n . So in the previous webhok handler implementation, I write %0A on the payload, and then the webhook handler replace it with \n and send it to Telegram.
Makes sense as we have an issue with escaping \ due to JSON storage.
Thanks. It works for me. I’m using the %0A. I’ve searching everywhere for this solution. Thank you so much.
Try urlencode($text). It works for me.
I’ve figured out that only using the json unicode code point escape form: \u000a (neither \n \\n \\\\n %0A %25%0A ) will preserve the real line break char, and you have to manually insert or replace all \\\\n (the double escaped \n after you write some \n in notification content) with the raw \u000a into the notification post content in your wp_posts table, for replacing it would be like:
UPDATE wp_posts SET post_content = REPLACE(post_content, «\\\\\\\\n», «\\u000a») WHERE post_type = «notification»
note that \\\\\\\\n is a quadruple escaped \n for represeting the double escaped \n , what a leaning toothpick it is!
ПЕРЕНОС СТРОКИ PYTHON TELEBOT
Telebot — это фреймворк для создания ботов Telegram на языке Python. При написании бота часто возникает потребность в переносе строки в сообщениях, поскольку длинные сообщения могут быть трудночитаемыми. Для этого используется символ переноса строки \n . Например:
bot.send_message(chat_id, «Привет, мир!\nЯ бот.»)
В данном примере после слова «мир!» будет сделан перенос строки, и слова «Я бот.» будут выведены на новой строке.
Учим Python за 1 час! #ОтПрофессионала — HD Remake
Telegram Bot PYTHON [ 2 ] — Команды и кнопки (Inline, Reply)
9 Cтроки и операции над ними Python
Рассылка через телеграм бот на python. Разработка телеграм ботов на aiogram для начинающих
Создание телеграм-ботов на python (telebot) #16 / Получение ввода, метод register_next_step_handler
Телеграм бот для твоей шараги. Часть 4 (система расписания)
- Ханойские башни python
- Python gcd функция
- Django методы queryset
- Python expected an indented block ошибка
- Python и css
- Python установка keras
- Почему библиотека numpy работает с массивами быстрее чем обычный интерпретатор python
- Посмотреть методы объекта python
- Python сохранение массива в файл
- Python метод get
- Python openpyxl количество строк
- Не удается инициализировать устройство prn python
- Напишите программу которая выводит на экран текст здравствуй мир без кавычек python 3
- Pyodbc примеры python
Как сделать перевод строки в телеграм боте на python?
Layerqa, ну если в каждой итерации цикла for player in. вызывать send_message, то сколько раз будет вызван send_message? Надо в цикле набирать сообщение, а потом вывести его одним вызовом send_message.
messages = [] for player in todos['data']['data']: name = player['name'] kills = player['kills'] deaths = player['deaths'] messages.append("Name: " + name + "\n" +"Kills: " + kills + "\n" + "Deaths: "+ deaths) bot.send_message(message.chat.id, "\n\n".join(messages))
Хотя стойте он не выдаёт ошибку но все равно выводит нового игрока в старом сообщении
Layerqa, я сдвинул весь код влево, потому что у первой строки хабр упорно убирал отступ.
Что касается переносов, у меня с ними никогда проблем не было. Правда, я telebot не использовал, только python-telegram-bot.
p = os.popen('%s %s' % (cmd, " ".join(req)), 'r') out = p.read() bot.send_message(chat_id=update.message.chat_id, text=out)
shurshur, нечего не понел, может как нибудь можно сохранять name, kills и deaths в отдельный txt файл и потом оттуда брать и отправлять?
Layerqa, зачем в файл. Если скрипт и так по переносам строк генерит отдельные сообщения, то записать в файл бессмысленно.
Попробую-ка я сейчас своего тестового бота на telebot переделать.
Layerqa, вот такой код с использованием telebot прекрасно выводит сообщение с переносами строк:
def listener(messages): for m in messages: if m.from_user.id not in allowed: bot.send_message(m.chat.id, 'Ты кто такой. Давай, до свидания!') return if m.content_type == 'text': req = m.text req = req.split(' ') cmd = req[0][1:] # cut / try: cmd = commands[cmd] except KeyError: bot.send_message(m.chat.id, 'Ничё не понял. ') return req = req[1:] p = os.popen('%s %s' % (cmd, " ".join(req)), 'r') out = p.read() bot.send_message(m.chat.id, out)
Layerqa, мы не можем за тебя написать твою программу. Если ты в функции 30 раз вызовешь send_message — то неудивительно, что твой бот отправит 30 сообщений. Ты должен все сообщения объединить в одну строку и отправить одним вызовом send_message.
Layerqa, кстати, судя по последнему скриншоту, ты видимо send_message включил в цикл, который добавляет в новый элемент messages и сразу же выводит накопленные messages, поэтому в 1 сообщении данные по одному игроку, далее по 2, по 3 итд.
shurshur, осознал свою ошибку прошу прощения, нужно было просто вытащить send message из цикла for player.
Layerqa, ну, я тоже на скриншот сначала внимательно не посмотрел, а как глянул — так там же всё очевидно.
Layerqa, можно, например, если массив игроков todos[‘data’][‘data’], то todos[‘data’][‘data’][0:10] — это массив первых 10 игроков.
Если я правильно понял, то вам нужно отправить все одним сообщением. В таком случае можно воспользоваться методом .append
В цикле for мы записываем строки в players, после чего отправляем его единым сообщением.
players = [] def start_message(message): response = requests.get("ссылка на json файл") #json todos = json.loads(response.text) for player in todos['data']['data']: name = player['name'] kills = player['kills'] deaths = player['deaths'] players.append("Name: " + name + "\n" +"Kills: " + kills + "\n" + "Deaths: "+ deaths) bot.send_message(message.chat.id, players)
Python-сообщество
- Начало
- » Python для новичков
- » Перенос строк TeleBot
#1 Май 14, 2022 19:36:32
Перенос строк TeleBot
Пробую писать бота TeleBot и задача следующая:
Есть база данных в SQLite с таблицей Songs. Там хранятся тексты песен. Как сделать так, чтобы при обращении к боту для получения песни, он брал её из базы данных и выводил в нужном формате (С переносом строк, а не сплошным текстом).
Как составить запрос и вывести нужные данные я знаю, вопрос именно в том, как сделать нужный формат?
Раньше писал на PHP и там достаточно было в таблице поставить тег
для переноса строки. Как это работает на Python?
#2 Май 15, 2022 02:50:31
Перенос строк TeleBot
Со stakoverflow краткая шпаргалка для Telegram
**bold**
__italic__
--underline--
~~strikethrough~~
[hyperlink](https://google.com)
[user mention](tg://user?id=12345)
`inline monospaced text`
```block monospaced text```
||spoiler||
#3 Май 15, 2022 06:22:33
Перенос строк TeleBot
Вопрос именно в формате хранения текста в БД.
То есть есть SQL запрос, который возвращает песню и мне нужно чтобы эта песня была в нужном формате.
song = get_song(text_song=text_song)
Где get_song возвращает текст песни из бд.
Пробовал прямо в записи песни в таблице расставлять \n — не работает. Пробовал parse_mode= “HTML” и ставить теги
— не помогло.
#4 Май 15, 2022 12:05:05
Перенос строк TeleBot
Храниться в БД он должен без форматирования. А форматирование делается после того, как текст взят из БД. Чтобы делать форматирование текста, нужно немножко программировать уметь.