Skip to content

Commit

Permalink
fix(changes): use HTML parse_mode and escape correctly
Browse files Browse the repository at this point in the history
events with _ in the name are not nice with Markdown…
  • Loading branch information
EdJoPaTo committed Oct 2, 2021
1 parent ec250f9 commit 740f29b
Show file tree
Hide file tree
Showing 6 changed files with 37 additions and 19 deletions.
13 changes: 13 additions & 0 deletions locales/de.yaml
Original file line number Diff line number Diff line change
@@ -1,3 +1,16 @@
changes:
help: >
Wenn sich eine Änderung an einer Veranstaltung ergibt, die nicht in den offiziellen Veranstaltungsplan eingetragen wird, kannst du diese hier nachtragen.
Dein Kalender wird dann automatisch aktualisiert und du hast die Änderung in deinem Kalender.
Außerdem lassen sich die Änderungen teilen, sodass du auch anderen Leuten diese Änderung bereitstellen kannst.
⚠️ Du bist in der Lage, unlogische Veranstaltungstermine zu kreieren.
Beispielsweise kannst du einen Termin so verändern, dass er aufhört bevor er beginnt.
Den Bot interessiert das nicht, der tut genau das, was du ihm sagst.
Dein Kalenderprogramm ist damit dann allerdings häufig nicht so glücklich…
subscribe:
overview: >
*Kalender abonnieren*
Expand Down
10 changes: 7 additions & 3 deletions source/lib/change-helper.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import {promises as fsPromises} from 'node:fs'

import {html as format} from 'telegram-format'

import {Change, EventEntryInternal, EventEntryFileContent} from './types.js'
import {formatDateToHumanReadable, parseDateTimeToDate} from './calendar-helper.js'

Expand Down Expand Up @@ -33,15 +35,17 @@ export function generateChangeText(change: Change): string {

if (Object.keys(change).length > 2) {
text += '\nÄnderungen:\n'
text += generateChangeDescription(change)
text += format.escape(generateChangeDescription(change))
}

return text
}

export function generateChangeTextHeader(change: Change): string {
let text = '*Veranstaltungsänderung*\n'
text += `*${change.name}*`
let text = ''
text += format.bold('Veranstaltungsänderung')
text += '\n'
text += format.bold(format.escape(change.name))
if (change.date) {
text += ` ${formatDateToHumanReadable(change.date)}`
}
Expand Down
2 changes: 1 addition & 1 deletion source/menu/events/changes/add/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ function menuBody(context: MyContext): Body {
: '\nWelche Art von Änderung willst du vornehmen?'
}

return {text, parse_mode: 'Markdown'}
return {text, parse_mode: 'HTML'}
}

function hidePickDateStep(context: MyContext): boolean {
Expand Down
2 changes: 1 addition & 1 deletion source/menu/events/changes/details.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ export const menu = new MenuTemplate<MyContext>(context => {
}

const text = generateChangeText(change)
return {text, parse_mode: 'Markdown'}
return {text, parse_mode: 'HTML'}
})

menu.switchToChat('Teilen…', context => generateShortChangeText(getChangeFromContext(context)!), {
Expand Down
17 changes: 7 additions & 10 deletions source/menu/events/changes/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import {Composer} from 'grammy'
import {html as format} from 'telegram-format'
import {MenuTemplate, Body} from 'grammy-inline-menu'

import {backMainButtons} from '../../../lib/inline-menu.js'
Expand Down Expand Up @@ -40,18 +41,14 @@ function getChangesOptions(context: MyContext): Record<string, string> {
function menuBody(context: MyContext): Body {
const event = context.match![1]!.replace(/;/, '/')

let text = '*Veranstaltungsänderungen*\n'
text += event
let text = ''
text += format.bold('Veranstaltungsänderungen')
text += '\n'
text += format.escape(event)
text += '\n\n'
text += format.escape(context.i18n.t('changes.help'))

text += '\nWenn sich eine Änderung an einer Veranstaltung ergibt, die nicht in den offiziellen Veranstaltungsplan eingetragen wird, kannst du diese hier nachtragen.'
text += ' Dein Kalender wird dann automatisch aktualisiert und du hast die Änderung in deinem Kalender.'

text += '\nAußerdem lassen sich die Änderungen teilen, sodass du auch anderen Leuten diese Änderung bereitstellen kannst.'

text += '\n\n⚠️ Du bist in der Lage, unlogische Veranstaltungstermine zu kreieren. Beispielsweise kannst du einen Termin so verändern, dass er aufhört bevor er beginnt. Den Bot interessiert das nicht, der tut genau das, was du ihm sagst. Dein Kalenderprogramm ist damit dann allerdings häufig nicht so glücklich…'

return {text, parse_mode: 'Markdown'}
return {text, parse_mode: format.parse_mode}
}

menu.manualRow(backMainButtons)
12 changes: 8 additions & 4 deletions source/parts/changes-inline.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import {Composer} from 'grammy'
import {html as format} from 'telegram-format'
import {InlineQueryResultArticle, User} from 'grammy/out/platform'

import {Change, MyContext} from '../lib/types.js'
Expand All @@ -13,7 +14,7 @@ function generateInlineQueryResultFromChange(change: Change, from: User): Inline
id,
input_message_content: {
message_text: generateChangeText(change),
parse_mode: 'Markdown',
parse_mode: format.parse_mode,
},
reply_markup: {
inline_keyboard: [[
Expand Down Expand Up @@ -109,17 +110,20 @@ bot.callbackQuery(/^c:a:(.+)#(.+)#(.+)$/, async context => {
text += generateChangeTextHeader(currentChange)

text += '\nDiese Veränderung ist bereits in deinem Kalender:'
text += '\n' + generateChangeDescription(currentChange)
text += '\n' + format.escape(generateChangeDescription(currentChange))

text += '\nDiese Veränderung wolltest du hinzufügen:'
text += '\n' + generateChangeDescription(change)
text += '\n' + format.escape(generateChangeDescription(change))

const inline_keyboard = [[
{text: 'Überschreiben', callback_data: `c:af:${name}#${date}#${fromId}`},
{text: 'Abbrechen', callback_data: 'c:cancel'},
]]

await context.api.sendMessage(context.from.id, text, {reply_markup: {inline_keyboard}, parse_mode: 'Markdown'})
await context.api.sendMessage(context.from.id, text, {
reply_markup: {inline_keyboard},
parse_mode: format.parse_mode,
})
return
}

Expand Down

0 comments on commit 740f29b

Please sign in to comment.