https://github.com/soyart/fngobot
a simple, stupid Telegram chatbot for tracking financial markets
https://github.com/soyart/fngobot
binance bitkub coinbase cryptocurrency finance satang stock-market telegram telegram-bot
Last synced: 5 months ago
JSON representation
a simple, stupid Telegram chatbot for tracking financial markets
- Host: GitHub
- URL: https://github.com/soyart/fngobot
- Owner: soyart
- License: bsd-3-clause
- Created: 2021-05-22T16:59:50.000Z (about 5 years ago)
- Default Branch: main
- Last Pushed: 2022-09-05T21:17:47.000Z (almost 4 years ago)
- Last Synced: 2024-06-20T13:30:06.952Z (almost 2 years ago)
- Topics: binance, bitkub, coinbase, cryptocurrency, finance, satang, stock-market, telegram, telegram-bot
- Language: Go
- Homepage:
- Size: 909 KB
- Stars: 1
- Watchers: 1
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# FnGoBot
A simple, stupid CLI/Telegram bot for tracking financial markets. FnGoBot can be run as a standalone CLI program, or as a Telegram chatbot. Both versions share the same text interface (see `bot` package).
FnGoBot is my practice project for designing more complicated software, parsing JSON responses, and using external libraries. It developed from an ugly single-file program into a much more *normal* looking Go project.
The Telegram part is made possible with [this amazing Go Telegram bot library](https://gopkg.in/tucnak/telebot.v3). It fetches quotes from Yahoo! Finance (via [finance-go](https://github.com/piquette/finance-go)), [Binance](https://binance.com), [Coinbase](https://coinbase.com), [Satang](https://satangcorp.com), and [Bitkub](https://bitkub.com).
- This bot is currently in use in my friends' circle doing real trades, so the command-line patterns are not to be changed.
# Quote sources
## `github.com/piquette/finance-go`
For Yahoo! Finance API. This is the default security quote source.
## `github.com/piquette/finance-go/crypto`
For Yahoo! Finance cryptocurrency API. This source is activated with a `crypto` switch in the command.
## `fetch/binance/binance.go`
FnGoBot's [Binance](https://binance.com) API data fetcher. This source is activated with a `binance` switch in the command.
## `fetch/coinbase/coinbase.go`
FnGoBot's [Coinbase](https://coinbase.com) API data fetcher. This source is activated with a `coinbase` switch in the command. Coinbase quotes are currently THB denominated, although this may change in the future, perhaps with adding currency configuration.
## `fetch/satang/satang.go`
FnGoBot's [satangcorp.com](https://satangcorp.com) API data fetcher. This source is activated with a `satang` switch in the command. Satang quotes are only THB denominated
## `fetch/bitkub/bitkub.go`
FnGoBot's [bitkub.com](https://bitkub.com) API data fetcher. This source is activated with a `bitkub` switch in the command. Bitkub quotes are only THB denominated.
## [Adding quote sources](add_source.md)
## Running your own bot
- Clone this repository
- Provide your bot's [configuration](#config)
- Run the bot with `go run ./cmd/fngobot` or `go run ./cmd/fngobot-cli`, or build and run the binaries
- If the bot successfully initializes, you may now start using the bot
- Start chatting with the bot. Send `/help` to get command-line help
## Configuration
FnGoBot uses [Viper](github.com/spf13/viper) to manage configuration. The default config file is `$HOME/.config/fngobot/config.yml`, but `-c ` command-line option can also be used to load different configuration.
### Configuration file type
Default configuration type is YAML, but other file types like JSON can also be used.
> Only YAML and JSON are tested for FnGobot, and TOML is not supported because Telegram bot token strings contain special character `:`.
To use other configuration types (must be supported by Viper), specify the configuation file with `-c `:
$ go run ./cmd -c path/to/config.json;
Or change the default filename in `cmd/main.go` to your desired file extension.
## Core external dependencies
- `gopkg.in/tucnak/telebot.v3` Telegram bot framework
- `github.com/piquette/finance-go` Yahoo! Finance data library
- `github.com/google/uuid` Google UUID library
- `github.com/spf13/viper` Configuration library
- `golang.org/x/text/message` and `golang.org/x/text/language` for thousands operator (`,`)
## Example commands
The chat will look like a CLI program. The bot supports 3 commands: `/quote`, `track`, and `/alert`. Source switches can be used in all commands to set quote source.
The general syntax for `/quote` is
/quote [source switch] [ticker..]
The example below will quote BBL.BK, KBANK.BK, KKP.BK from Yahoo! Finance:
/quote bbl.bk kbank.bk kkp.bk
The general syntax for `/track` is
/track [source switch] [ticker..]
The example below will track BTC-USD crypto pair for 2 times, each one minute apart:
/track crypto btc-usd 2
`/alert` can handle one more switch - a bid/ask switch. This is because `/alert` can be used against last price and best bid/ask prices. If a bid/ask switch is used, it will alert based on bid or ask prices, if the bid/ask switch is not present, it will alert based on last price.
The general syntax for `/alert` is
/alert [source switch] [bid/ask switch]
The two modes of `/alert` are not supported all quote sources - for example, Yahoo! Finance (crypto) does not support alert with bid/ask, while Satang source does not support alert with last price.
The example below will make the bot alert if BBL.BK 'last' price is greater than 120:
/alert bbl.bk > 120
The example below will make the bot alert if BBL.BK 'ask' price is smaller than 115:
/alert bbl.bk ask < 115
The example below will make the bot alert if BTC-USD (from Yahoo! Finance crypto) is greater than 30,000:
/alert crypto btc-usd > 30000
The example below will make the bot alert if BTC (From Binance) last price is smaller than 30,000:
/alert binance btc < 30000
The example below will make the bot alert if BTC (From Coinbase) bid price is smaller than 30,000:
/alert coinbase btc-usd bid < 30000
The example below will make the bot alert if BTC (From Bitkub.com) bid price is smaller than 30,000:
/alert bitkub btc-usd bid < 30000
## Other chat commands
`/handlers` is used to get all running handlers in JSON format.
/handlers
`/stop` is used to stop a running handler. Let's say we have an alerting handler whose UUID is cfd337b7, to stop it, send:
/stop cfd337b7
## Important packages
After editing the code, you probably want to run tests on these packages before you start using FnGoBot.
The `parse` package provides command parsing for both CLI and Telegram versions. This means that they both share the same text interface.
The `bot` package defines logic for handling alerts, price tracking, and quoting, and is also used by both CLI and Telegram versions.
The `fetch` package, which fetches data from remote APIs, provides an interface (`fetch.Quoter`) to all quotes processed by FnGoBot.