{"id":15146927,"url":"https://github.com/omani/telegram-monerotipbot","last_synced_at":"2026-03-06T02:12:35.634Z","repository":{"id":56446529,"uuid":"216364231","full_name":"omani/telegram-monerotipbot","owner":"omani","description":"This is the repository of the Monero tip bot for Telegram. The one and only, first Monero wallet for Telegram.","archived":false,"fork":false,"pushed_at":"2025-02-08T02:31:37.000Z","size":236,"stargazers_count":38,"open_issues_count":0,"forks_count":13,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-02-08T03:23:07.807Z","etag":null,"topics":["ccs","monero","monerotipbot","telegram","tipbot"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/omani.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-10-20T13:13:17.000Z","updated_at":"2025-02-08T02:31:40.000Z","dependencies_parsed_at":"2024-06-19T00:00:52.894Z","dependency_job_id":"59a61740-b2c9-489a-8e2e-50d7216f5855","html_url":"https://github.com/omani/telegram-monerotipbot","commit_stats":null,"previous_names":["monero-ecosystem/telegram-monerotipbot"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omani%2Ftelegram-monerotipbot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omani%2Ftelegram-monerotipbot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omani%2Ftelegram-monerotipbot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/omani%2Ftelegram-monerotipbot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/omani","download_url":"https://codeload.github.com/omani/telegram-monerotipbot/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":237901410,"owners_count":19384384,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ccs","monero","monerotipbot","telegram","tipbot"],"created_at":"2024-09-26T12:20:45.154Z","updated_at":"2026-03-06T02:12:30.590Z","avatar_url":"https://github.com/omani.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"telegram-monerotipbot\n========================\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://github.com/omani/telegram-monerotipbot/raw/master/assets/img/icon.png\" alt=\"A Monero wallet for Telegram\" width=\"200\" /\u003e\n\u003c/p\u003e\n\nA Telegram Monero tip bot written in go.\n\n___\n## Introduction\nWhat can this bot do?\n\nMoneroTipBot is the one and only, first open source Monero wallet for Telegram that started with a [CCS Proposal](https://ccs.getmonero.org) and has been funded by the great Monero community.\n\n**Notice**:\n\nThis is a custodial Monero wallet service by the bot operator. You do not own your private keys. The bot operator owns them!\nBeside the wallet itself, nothing will be stored on the server - where the bot is running - ever. No user data, personal information or otherwise personal data will be stored. The bot is expected to be stable. However, always have in mind that you might lose your money due to a bug or we can get hacked and lose all funds. Use this bot on your own risk!\n\n\n**Features**:\n- Everything happens on-chain.\n- No transaction is stored on disk or a database.\n- Always synced wallet. Unlike other wallet clients, there is no need to wait until the wallet is fully synced.\n- Group-friendly spam-free messages\n- Sensible wallet information will always be sent to user as private message.\n- Tip users on Telegram within groups. Optionally send them a message along with the tip.\n- Send Monero to regular addresses.\n- Receive Monero on regular addresses.\n- Make Giveaways within groups.\n- Generate a QR-Code image and share it comfortably with others.\n- Make transactions by scanning or uploading a QR-Code image.\n- Deposit to account.\n- Withdraw from account.\n- Clickable TX Hash link to blockexplorer.\n\nInvite this bot to your group (bot needs no admin rights) and enjoy Monero in Telegram.\n\nFor more information about the commands please use the help command.\n\nHappy tipping!\n\n## Help\n```\nHelp Menu:\n\n/tip username amount message\nTip a user with a certain amount and optionally a messageto send along with the tip. All users who started the bot will be notified upon a tip.\n\n\n/send address amount\nSend amount to a regular monero wallet address\n\n\n/balance\nShow your balance.\n\n\n/giveaway amount\nMake a giveaway within a telegram group.\n\n\n/withdraw address\nWithdraw everything from the tip bot wallet to your own wallet address.\n\n\n/generateqr amount description\nGenerate a QR-Code image with the desired amount and optionally a description to share with others.\n\nYou can also paste a QR-Code image into this PM chat with me and I will try to decode it. This way you can make transactions by scanning QR-Codes.\n\n\n/help command\n\nShow additional information about a specific command.'\n```\n\n## Commands\n`/help tip`\n\n/tip **username** **amount** *message*\n\nAmount takes no trailing XMR symbol! Tip a user with a certain amount. All users who started the bot will be notified upon a tip.\nOptionally you can specify a message to be sent along with the tip. This message will be forwarded to the user if that user has started the bot.\n\n**Notice:**\n\nMake sure the telegram user you want to tip actually exists, otherwise the moneros will be gone!!!\n\nUnknown users to the bot, will be tipped regardless whether or not they exist in Telegram.\n\nYou cannot tip users who do not have an account at MoneroTipBot within the bot PM. Those users can only be tipped within a group.\n\nOptionally, you can use the @ sign when giving the username. Exception to this is when you tip on a reply message. Then you don't need a username and only the amount. Amount has to be a number. Use decimals if you need fractional amounts (like 0.1).\n\n___\n\n`/help send`\n\n/send **address** **amount**\n\nAmount takes no trailing XMR symbol! Send a certain amount to a regular monero wallet address. Amount has to be a number. Use decimals if you need fractional amounts (like 0.1).\n\n___\n\n`/help balance`\n\n/balance\n\nShow your current balance. Balance is the total balance.\nUnlocked balance is what is free to spend and the number of spent outputs gives you a hint to how many times you can tip.\nIf balance is locked the output will show the estimated time until unlocked.\n\n___\n\n`/help giveaway`\n\n/giveaway **amount**\n\nAmount takes no trailing XMR symbol! Make a giveaway within a telegram group. This is a group command. If this bot is in a group and you are a member of that group, you can make a giveaway with the amount you want to give away. The first user in that group who clicks on the 'Claim' button will receive that amount and a tip will happen between the giver and the taker.\nAmount has to be a number. Use decimals if you need fractional amounts (like 0.1)\n\n___\n\n`/help generateqr`\n\n/generateqr *amount* *description*\n\nGenerate a QR-Code image with the desired amount and optionally a description to share with others. The other person can then paste this image into the bot PM and can do a transaction.\n\nEvery QR-Code image generated will use a new subaccount address to avoid giving away your main wallet address.\n\nIf you don't specify any parameter, it will generate a QR-Code image with just your subaccount address.\n\nThe bot will try to parse the QR-Code according to [RFC 3986](https://github.com/monero-project/monero/wiki/URI-Formatting). If the QR-Code is RFC 3986 compliant you will be prompted with the content of the QR-Code (address, amount, recipient, description) and buttons to make the transaction or cancel it.\n\nExample:\n/generateqr 10 thank you for the donation. much appreciated! :)\n\n___\n\n`/help withdraw`\n\n/withdraw **address**\n\nWithdraw everything from the tip bot wallet to your own wallet address.\n\nMake sure you double-check the recipient address to make sure you are sending to the right address.\n\n___\n\n\n## Administration/Configuration\nThis section is for the bot operator.\n\nConfiguration is done in the `settings.yml` YAML file.\n\nOverview of the settings file:\n\n#### #Telegram Bot Settings\n`telegram_bot_token:`\n\nToken of the Telegram bot. This is the token you get when you create a new bot in telegram via @BotFather.\n\n`rpcchannel_uri: \"tcp://127.0.0.1:5555\"`\n\nThis is the socket for the ZMQ REQ/REP channel for the communication between the bot and external applications. It can be extended to do any kind of stuff.\nFor now it is being used by the notifier in `cmd/notifier` to send a message to one user or broadcast a message to all users.\n\n`blockexplorer_url: \"https://xmrchain.net/tx/\"`\n\nThis is the link to the XMR blockexplorer when the bot sends the output about a transaction that happened and is used in the TxHash as an HTML anchor link. We use xmrchain.net here.\n\n`BOT_NAME: \"\"`\n\nThe name of your telegram bot (@username, not the display name) as given in the creation process via @BotFather.\n\n`DEV_DONATION_ADDRESS: \"88jspkqPmvvc9L3LovdhjoCW2eBSKk4VNTsrdWqB4CYdBfKRWH5yL39bE6NP5Di2Wgix1cxBgKMAiXMbUwCBY3Dk2WvwSSA\"`\n\nThis wallet address of (preferrably the bot operator) will be used in the message that pops up when a user tries to tip himself/herself.\nOr leave it as it is with this wallet address. This is the address of the developer of this bot. He will be happy to receive tips :)\n\n`MIN_TIP_AMOUNT: 0.00042`\n\nThe minimum amount that is allowed to tip. You shouldn't set this lower than the fees it requires to do the transaction.\n\n`GIVEAWAY_FILE: \"giveaways.json\" # absolute path will also work`\n\nThis is the path to the file to save giveaways. Since giveaways can last for a long time (if nobody claimed it yet) we want to store them in files, in case the bot goes down or has to be restarted by the bot operator.\n\n`BROADCAST_NOTIFICATION_INTERVAL: 10`\n\nThis is the interval broadcast messages will be sent out to users, in seconds. Leave it at 10, since Telegram has restriction on how many times a bot can message users per minute/second, etc. See https://core.telegram.org/bots/faq#how-can-i-message-all-of-my-bot-39s-subscribers-at-once for more information.\n\n`LOGFILE: \"monerotipbot.log\"`\n\nTelegram does not give us the information about how many groups the bot is in. We use a trick here, we track every `Chat.ID` of every message to track in how many groups the bot *could* possibly be:\n```\n// track in how many groups this bot is actually used in\nif update.Message.Chat != nil {\n  mutex.Lock()\n  groupsBotIsIn[update.Message.Chat.ID] = update.Message.Chat\n  mutex.Unlock()\n}\n```\nAs you can see, this is not accurate, and is just for informational purposes to get an estimated value about the group metric. The logfile will show public and private group chatIDs and the chatID of users who private message the bot within the bot PM.\n\n\n#### #Monero Wallet RPC Settings\n`monero_rpc_daemon_url: \"http://127.0.0.1:6061/json_rpc\"`\n\nThis is the URL to **YOUR** (the bot operator's) wallet RPC daemon. Everything happens over this RPC wallet daemon.\n\n`monero_rpc_daemon_username: ''`\n\nYou should enable HTTP Digest Login on the Monero wallet RPC daemon with the `--rpc-login` parameter, when starting the RPC daemon.\n\n`monero_rpc_daemon_password: ''`\n\nYou should enable HTTP Digest Login on the Monero wallet RPC daemon with the `--rpc-login` parameter, when starting the RPC daemon.\n\n`IS_STAGENET_WALLET: false`\n\nIs this bot working with a stagenet wallet? That is, has the Monero wallet RPC damon been started with the `--stagenet` flag? If so, set to true here or things will not work.\n\n#### #Statsd Settings (Metrics Logger)\n`USE_STATSD: false`\n\nThis bot uses a statsd client to collect some application metrics all over the place (in the code). Set to true if you are running your own instance of a statsd backend. This works perfectly with a statds-graphite-grafana backend and was tested with this docker container https://github.com/kamon-io/docker-grafana-graphite. Follow the instructions there to set up a statsd backend for your bot.\n\n`statsd_address: \"127.0.0.1:8125\"`\n\nThe socket for the statsd backend if you use one.\n\n`statsd_prefix: \"mytipbot.\"`\n\nThe prefix for all statsd metrics.\n\n#### #Bot Helper Messages\n`welcome_message: \"\"`\n\nWelcome message to display when a user PMs the bot for the first time and starts it.\n\n`help_message: \"\"`\n\nThe structure of the message of your help menu when a user invokes the `/help` command\n\n`help_message_TIP: \"\"`\n\nThe structure of the message of your help menu when a user invokes the `/help tip` command\n\n`help_message_SEND: \"\"`\n\nThe structure of the message of your help menu when a user invokes the `/help send` command\n\n`help_message_GIVEAWAY: \"\"`\n\nThe structure of the message of your help menu when a user invokes the `/help giveaway` command\n\n`help_message_WITHDRAW: \"\"`\n\nThe structure of the message of your help menu when a user invokes the `/help withdraw` command\n\n`help_message_BALANCE: \"\"`\n\nThe structure of the message of your help menu when a user invokes the `/help balance` command\n\n`help_message_GENERATEQR: \"\"`\n\nThe structure of the message of your help menu when a user invokes the `/help generateqr` command\n\n\nThis was everything you can specify in your `settings.yml`. Adjust to your needs.\n\n### BotFather Setup (Commands)\nWhen creating your new bot, remember to set up the commands of the new bot.\n\nYou must at least have these commands, paste them into the BotFather PM when asked to specify the commands:\n```\nhelp - Print help\ntip - \u003cusername\u003e \u003camount\u003e\nsend - \u003caddress\u003e \u003camount\u003e\nwithdraw - \u003cyour private wallet address\u003e\nbalance - Show your current balance\ngiveaway - \u003camount\u003e\ngenerateqr - \u003camount\u003e\n```\n\n### Installation\n\n\u003e You can compile every main.go you see here if you want and use only the binary. But we will stick to the source code here.\n\n#### Clone repo\n```\ngit clone https://github.com/omani/telegram-monerotipbot\n```\n\n#### Install dependencies (using golang modules)\nInstall ZMQ library (eg. on Debian based systems)\n```\nsudo apt install libzmq3-dev\n```\nNow install all golang dependencies with one command:\n```\ngo mod tidy\n```\n\n#### Bot\nStart the bot and specify the settings file:\n```\ncd cmd/\ngo run main.go -c ../settings.yml\n```\n\nThe bot is considered to be safe in errors. To reduce interruptions while operating it on eg. a VPS, let it run in a loop so it \"restarts itself\" should there be anything wrong (mostly due to Telegram itself), if at all:\n```\ncd cmd/\nwhile true; do go run main.go -c ../settings.yml; done\n```\n\n#### Notifier\nTo notify users create a file which holds the message you want to send or broadcast and send it with the notifier:\n```\ncd cmd/notifier\n\nvi message.txt\n...\n\u003cwrite down the message in that file and save it\u003e\n...\n```\nSend to specific user:\n\n`go run main.go -messagefile message.txt -c ../../settings.yml -userid 123456`\n\nBroadcast to all users:\n\n`go run main.go -messagefile message.txt -c ../../settings.yml -broadcast`\n\nYou can also redirect the output of this operation to a file:\n\n`go run main.go -messagefile message.txt -c ../../settings.yml -broadcast 2\u003e\u00261 \u003e broadcast.log`\n\n#### LabelMapper\nThere is a label mapper to gather all labels from the wallet and save it to a local file. The label mapper just issues a `walletrpc.GetAccounts()` and dumps the object into a json file:\n\n```\ncd cmd/labelmapper\ngo run main.go -c ../../settings.yml\n```\n\nIt will save it to a file named `labelmap.json`.\n\n*Hint*: If you use the statsd client, you will get labels in your statsd backend, which is more comfortable since you don't have to run this LabelMapper in a cron or by hand.\n\n## Questions\nIf you have questions or trouble feel free to create an issue in this repository so we can help you.\n\n## Final Notes\n**YOU** (the bot operator) are dealing with money here, at least when you are not operating on stagenet. With power comes responsibility.\n\nIf you use this bot in your own group, people trust you by depositing their Monero to your wallet. Do not abuse their trust!\n\n- If you create a new wallet, write down and save away the mnemonic seed of that wallet.\n- Do regular backups of the wallet. You can broadcast a \"scheduled maintenance\" message to all users. On that date, stop the bot, stop the wallet-rpc daemon, and make a backup of the wallet file and store it somewhere safe. Restart all services again after that.\n\n## Contribution\n* You can fork this, extend it and contribute back.\n* You can contribute with pull requests.\n\n## Donations\nYou can make me happy by donating Bitcoin to the following address:\n```\nbc1qgezvfp4s0xme8pdv6aaqu9ayfgnv4mejdlv3tx\n```\n\n## Author\nHAH! Sun (omani)\n\n## LICENSE\nMIT License\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fomani%2Ftelegram-monerotipbot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fomani%2Ftelegram-monerotipbot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fomani%2Ftelegram-monerotipbot/lists"}