coffee-telegram-bot
A Telegram Bot framework, written in CoffeeScript.
Deprecated, use aztgbot instead.
Feature
-
Only one dev dependency (CoffeeScript), all native Node.js method.
-
Promise based async framework.
-
Class based bot that can work in one object per user mode.
Usage
-
Install it with
npm
:$ npm i -s coffee-telegram-bot
-
Create your own bot by
require("coffee-telegram-bot")
with CoffeeScript:-
A simple example that print all messages:
This bot use one class and only create one object, which will never be deleted.
# Import modules with Destructuring Assignment.# botUtils is an object while others are class.{BotMaster, BotServant, BotApi, botUtils} = require("coffee-telegram-bot")# Get token from cli. Command like `$ coffee YOURBOT.coffee TOKEN`.# process.argv likes ["coffee", "YOURBOT.coffee", "TOKEN"].token = process.argv[2]# Your bot should extend BotServant, and implements processUpdate method.class MyBot extends BotServant# BotMaster will give each objects a botApi, which is used to send API request (yes different bots share one botApi), an identifier for each object, and bot's Name for logging, also your bot's ID.constructor: (botApi, identifier, botName, botID) -># You extend, so you need to call `super`.# This super call will make arguments into props of `this`.super(botApi, identifier, botName, botID)# A message counter.@counter = 0# BotMaster will call `processUpdate`.# For the update object read `https://core.telegram.org/bots/api#Update`.processUpdate: (update) =>if update["message"]++@counterif update["message"]["text"]?botUtils.log("#{@botName}##{@identifier}: Got No.#{counter} text \"#{update["message"]["text"]}\".")# Every API is a promise.@botApi.sendChatAction(update["message"]["chat"]["id"], "typing").then(() =>return @botApi.sendMessage(update["message"]["chat"]["id"], "Received.", {"reply_to_message_id": update["message"]["message_id"]})).catch(botUtils.error)# Create a `BotMaster` to start the program, it takes following arguments:# A `BotApi` object shares to each bot.# A `BotServant` (we call it `MyBot` in this example).# An `identify` function to give each bot an identifier from update object (we only create one bot object so use a function returns "0").# `null` means no bot destroy timeout. We keep this bot's lifecycle.# Use `BotMaster::loop` to run it, `loop` takes two functions as arguments, the former will be run before loop starts, the later will be run after loop stops.new BotMaster(new BotApi(token), MyBot, () -> return "0", null).loop(null, null) -
A bot that use different object to serve different users:
# Import modules with Destructuring Assignment.# botUtils is an object while others are class.{BotMaster, BotServant, BotApi, botUtils} = require("coffee-telegram-bot")# Get token from cli. Command like `$ coffee YOURBOT.coffee TOKEN`.# process.argv likes ["coffee", "YOURBOT.coffee", "TOKEN"].token = process.argv[2]# Your bot should extend BotServant, and implements processUpdate method.class MyBot extends BotServant# BotMaster will give each objects a botApi, which is used to send API request (yes different bots share one botApi), an identifier for each object, and bot's Name for logging, also your bot's ID.constructor: (botApi, identifier, botName, botID) -># You extend, so you need to call `super`.# This super call will make arguments into props of `this`.super(botApi, identifier, botName, botID)# A message counter.@counter = 0# BotMaster will call `processUpdate`.# For the update object read `https://core.telegram.org/bots/api#Update`.processUpdate: (update) =>if update["message"]++@counterif update["message"]["text"]?botUtils.log("#{@botName}##{@identifier}: Got No.#{counter} text \"#{update["message"]["text"]}\".")# Every API is a promise.@botApi.sendChatAction(update["message"]["chat"]["id"], "typing").then(() =>return @botApi.sendMessage(update["message"]["chat"]["id"], "Received.", {"reply_to_message_id": update["message"]["message_id"]})).catch(botUtils.error)# Create a `BotMaster` to start the program, it takes following arguments:# A `BotApi` object shares to each bot.# A `BotServant` (we call it `MyBot` in this example).# An `identify` function to give each bot an identifier from update object (`botUtils.perFromID` returns the `userID` in update object, we use this).# Leave destroy timeout default.# Use `BotMaster::loop` to run it, `loop` takes two functions as arguments, the former will be run before loop starts, the later will be run after loop stops.new BotMaster(new BotApi(token), MyBot, botUtils.perFromID).loop(null, null)
-
License
Apache-2.0