Skip to content

Instantly share code, notes, and snippets.

@leifermendez
Created August 29, 2024 07:28
Show Gist options
  • Save leifermendez/310af5fda4d10cf7f943fb5e4d82e5aa to your computer and use it in GitHub Desktop.
Save leifermendez/310af5fda4d10cf7f943fb5e4d82e5aa to your computer and use it in GitHub Desktop.
telegram and builderbot
import { createBot, createProvider, createFlow, addKeyword } from '@builderbot/bot'
import { MemoryDB as Database } from '@builderbot/bot'
import { TelegramProvider as Provider } from '@builderbot-plugins/telegram'
const PORT = process.env.PORT ?? 3008
const welcomeFlow = addKeyword<Provider, Database>(['hi', 'hello', 'hola'])
.addAnswer(`๐Ÿ™Œ Hello welcome to this *Chatbot*`)
.addAnswer(
[
'I share with you the following links of interest about the project',
'๐Ÿ‘‰ *doc* to view the documentation',
].join('\n'),
{ delay: 800, capture: true },
async (ctx, { fallBack }) => {
if (!ctx.body.toLocaleLowerCase().includes('doc')) {
return fallBack('You should type *doc*')
}
return
}
)
const main = async () => {
const adapterFlow = createFlow([welcomeFlow])
const adapterProvider = createProvider(Provider, {
token: 'YOUR_TELEGRAM_TOKEN_HERE'
})
const adapterDB = new Database()
const { handleCtx, httpServer } = await createBot({
flow: adapterFlow,
provider: adapterProvider,
database: adapterDB,
})
adapterProvider.server.post(
'/v1/messages',
handleCtx(async (bot, req, res) => {
const { number, message, urlMedia } = req.body
await bot.sendMessage(number, message, { media: urlMedia ?? null })
return res.end('sended')
})
)
adapterProvider.server.post(
'/v1/register',
handleCtx(async (bot, req, res) => {
const { number, name } = req.body
await bot.dispatch('REGISTER_FLOW', { from: number, name })
return res.end('trigger')
})
)
adapterProvider.server.post(
'/v1/samples',
handleCtx(async (bot, req, res) => {
const { number, name } = req.body
await bot.dispatch('SAMPLES', { from: number, name })
return res.end('trigger')
})
)
adapterProvider.server.post(
'/v1/blacklist',
handleCtx(async (bot, req, res) => {
const { number, intent } = req.body
if (intent === 'remove') bot.blacklist.remove(number)
if (intent === 'add') bot.blacklist.add(number)
res.writeHead(200, { 'Content-Type': 'application/json' })
return res.end(JSON.stringify({ status: 'ok', number, intent }))
})
)
httpServer(+PORT)
}
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment