Beispiel #1
1
module.exports = () => {
  const bot = new Telegraf(process.env.BOT_TOKEN)

  //зарегистрировать посредника для логгирования
  bot.use(Telegraf.log())

  //при получении команды onetime:
  //отправить сообщение 'One time keyboard',
  //отобразить клавиатуру с тремя кнопками
  bot.command('onetime', ({ reply }) =>
    reply('One time keyboard', Markup
      .keyboard(['/simple', '/inline', '/pyramid'])
      .oneTime()
      .resize()
      .extra()
    )
  )

  //при получении команды custom:
  //отправить сообщение 'Custom buttons keyboard',
  //отобразить клавиатуру с семью кнопками, распределенными между тремя строками: две
  //в первой строке, две - во второй и три - в третьей
  bot.command('custom', ({ reply }) => {
    return reply('Custom buttons keyboard', Markup
      .keyboard([
        ['🔍 Search', '😎 Popular'],         // Row1 with 2 buttons
        ['☸ Setting', '📞 Feedback'],       // Row2 with 2 buttons
        ['📢 Ads', '⭐️ Rate us', '👥 Share'] // Row3 with 3 buttons
      ])
      .oneTime()
      .resize()
      .extra()
    )
  })

  //при получении команды special
  //отправить сообщение 'Special buttons keyboard',
  //отобразить клавиатуру с двумя кнопками:
  //кнопками, запрашивающая контакты,
  //кнопка, запрашивающая местоположение.
  bot.command('special', (ctx) => {
    //метод Extra.markup может принимать функцию, которая принимает объект класса Markup
    return ctx.reply('Special buttons keyboard', Extra.markup((markup) => {
      return markup.resize()
        .keyboard([
          markup.contactRequestButton('Send contact'),
          markup.locationRequestButton('Send location')
        ])
    }))
  })

  //при получении команды pyramid
  //отправить сообщение 'Keyboard wrap',
  //отобразить клавиатуру с шестью кнопками, распределенными между тремя строками:
  //одна в первой строке, две - во второй и три - в третьей.
  bot.command('pyramid', (ctx) => {
    //метод Extra.markup может принимать объект класса Markup и объект с
    //дополнительными параметрами (в данном случае с параметром wrap)
    return ctx.reply('Keyboard wrap', Extra.markup(
      Markup.keyboard(['one', 'two', 'three', 'four', 'five', 'six'], {
        //btn - название кнопки,
        //index - индекс кнопки,
        //currentRow - массив с кнопками, расположенными на данной строке
        //если метод wrap возвращает false, то добавить кнопку в текущую строку, если
        //он возвращает true, то перейти к следующей строке
        wrap: (btn, index, currentRow) => currentRow.length >= (index + 1) / 2
      })
    ))
  })

  //при получении команды simple
  //отправить сообщение, содержащее указанный HTML-код, добавив к нему клавиатуру с
  //двумя кнопками
  bot.command('simple', (ctx) => {
    return ctx.replyWithHTML('<b>Coke</b> or <i>Pepsi?</i>', Extra.markup(
      Markup.keyboard(['Coke', 'Pepsi'])
    ))
  })

  //при получении команды inline
  //отправить сообщение, содержащее указанный HTML-код, добавив к нему встроенную
  //клавиатуру с двумя кнопками, при нажатии на каждую из кнопок инициализируется
  //соответствующее событие
  bot.command('inline', (ctx) => {
    return ctx.reply('<b>Coke</b> or <i>Pepsi?</i>', Extra.HTML().markup((m) =>
      m.inlineKeyboard([
        //инициализировать событие Coke
        m.callbackButton('Coke', 'Coke'),
        //инициализировать событие Pepsi
        m.callbackButton('Pepsi', 'Pepsi')
      ])))
  })

  //при получении команды random
  //отправить сообщение 'random example', добавив к нему встроенную клавиатуру с
  // двумя/тремя кнопками
  bot.command('random', (ctx) => {
    return ctx.reply('random example',
      Markup.inlineKeyboard([
        //инициализировать событие Coke
        Markup.callbackButton('Coke', 'Coke'),
        //инициализировать событие Dr Pepper
        //третьим параметром метод callbackButton принимает флаг, который указывает,
        //отображать кнопку или нет
        Markup.callbackButton('Dr Pepper', 'Dr Pepper', Math.random() > 0.5),
        //инициализировать событие Pepsi
        Markup.callbackButton('Pepsi', 'Pepsi')
      ]).extra()
    )
  })

  //при получении сообщения '/wrap <одна или несколько цифр>'
  //отправить сообщение 'Keyboard wrap',
  //отобразить клавиатуру с шестью кнопками, распределенными между указанным
  //количеством столбцов
  bot.hears(/\/wrap (\d+)/, (ctx) => {
    return ctx.reply('Keyboard wrap', Extra.markup(
      Markup.keyboard(['one', 'two', 'three', 'four', 'five', 'six'], {
        //свойство columns содержит количество столбцов
        columns: parseInt(ctx.match[1])
      })
    ))
  })

  //при инициализации события Dr Pepper
  //отправить сообщение со смайликом
  bot.action('Dr Pepper', (ctx, next) => {
    return ctx.reply('👍').then(next)
  })

  //при инициализации любого события
  //выводить всплывающую подсказку с сообщением 'Oh, <choice>! Great choise'
  bot.action(/.+/, (ctx) => {
    return ctx.answerCallbackQuery(`Oh, ${ctx.match[0]}! Great choise`)
  })

  bot.startPolling()
}
Beispiel #2
0
    {
      'media': { source: '/cats/cat1.jpeg' },
      'caption': 'From file',
      'type': 'photo'
    },
    {
      'media': { source: fs.createReadStream('/cats/cat2.jpeg') },
      'caption': 'From stream',
      'type': 'photo'
    },
    {
      'media': { source: fs.readFileSync('/cats/cat3.jpeg') },
      'caption': 'From buffer',
      'type': 'photo'
    }
  ])
})

bot.command('edit_media', (ctx) => ctx.replyWithAnimation(AnimationUrl1, Extra.markup((m) =>
  m.inlineKeyboard([
    m.callbackButton('Change media', 'swap_media')
  ])
)))

bot.action('swap_media', (ctx) => ctx.editMessageMedia({
  type: 'animation',
  media: AnimationUrl2
}))

bot.launch()
Beispiel #3
0
const Telegraf = require('telegraf')
const Extra = require('telegraf/extra')
const Markup = require('telegraf/markup')

const keyboard = Markup.inlineKeyboard([
  Markup.urlButton('❤️', 'http://telegraf.js.org'),
  Markup.callbackButton('Delete', 'delete')
])

const bot = new Telegraf(process.env.BOT_TOKEN)
bot.start((ctx) => ctx.reply('Hello'))
bot.help((ctx) => ctx.reply('Help message'))
bot.on('message', (ctx) => ctx.telegram.sendCopy(ctx.from.id, ctx.message, Extra.markup(keyboard)))
bot.action('delete', ({ deleteMessage }) => deleteMessage())
bot.launch()