Skip to content

Repository files navigation

Steam news bot

Kotlin Gradle Steam SQLite SonarLint

List of contents

  1. Program version
  2. Introduction
  3. Project objectives
  4. What can the bot do?
  5. List of supported commands
  6. Requirements and run
  7. List of used libraries
  8. Versions
  9. Project Updates
  10. License

Program version

2.13.0

Introduction

It's no secret that the steam platform has significant drawbacks and general slowness and sluggishness. News about apps and games there are in disarray and without sorting by date and time. This bot allows you to receive the latest news from application developers in a timely manner, in a convenient application (telegram)
image info

image info

Try it now: Steam News Bot

Project objectives:

✅ Develop a telegram bot that will promptly deliver news on games and software from the steam platform.
✅ Add the ability to ignore uninteresting applications.
✅ Place the bot on the linux(raspbian) server using PM2(advanced, production process manager for node.js).
✅ Make the bot multilingual.

What can the bot do?

  1. The first and most important thing is that the bot does not use or store any private information about users. Only open sources and the steam API are used.
  2. The bot determines the user's language from the set language in the telegram settings. Five languages are supported: Russian, English, France, Germany, Ukraine (updated 25.03.2025).
  3. After the greeting, the bot will prompt the user to register. Registration is very simple, you only need a Steam ID. image info
  4. When registering, the bot requests the user's application library from the steam, according to the entered Steam ID, and then saves the user's data to the database.
  5. The bot has a scheduler (single Quartz instance):
    • Every 30 minutes: fetch news → retry failed Steam requests → send news to users.
    • Failed game requests are retried up to 5 times with a 1-minute pause between attempts (within the same cycle).
    • Every 24 hours: sync owned games and wishlists for active users.
    • Every 2 hours: update game names that are missing in the database.
  6. In the settings you can find:
    image info Menu buttons use colored styles (primary, success, danger) for quicker navigation.
    • "Set/Update Steam ID" - This is necessary for registration.
    • "Check your steam ID" - Here you can see the installed steam ID and activity mode.
    • "Check available wishlist" - Checking that the wishlist is available and news on games from the list will be received.
    • "Set "active" mode" - Set the active mode. Only in this mode the bot will send you news.
    • "Set "inactive" mode" - Set inactive mode if you are tired of the news in general.
    • "Clear black list" - Clearing the blacklist.
    • "Black list" - List of blacklisted applications.
  7. You can add the application to the blacklist under the news.
    image info News cards are sent as Telegram Rich Messages: Steam markup (BBCode) is parsed into formatted text, images, and links. If Rich Message delivery fails, the bot falls back to HTML.
  8. Blacklist management:
    image info image info
  9. Added a wishlist for accounts that have access to game information in steam settings. In order for the bot to get access to the wishlist, the privacy settings in steam should look like this: (updated 21.08.2023)
    image infoimage info
  10. You can get links to the game by clicking under the news:
    image info
  11. Show statistics for the bot (updated 31.08.2026). /stats sends a Rich Message with a markdown table: global user, game, and news counters, plus your owned games and wishlist counts when you are registered.
    image info

List of supported commands:

/start
/settings
/stats
/help

Requirements and run

Requirements: JDK 25, Telegram bot token, Steam Web API key.

  1. Copy .env.example to .env and fill in the variables:

    TELEGRAM_BOT_TOKEN=
    STEAM_WEB_API_KEY=
    

    Variables can also be exported in the shell instead of using .env.

  2. Run the bot:

    ./gradlew run
    
  3. Database: SQLite file steamidusers.db in the project root. Schema is applied automatically via Flyway on startup. SQL migrations live in src/main/resources/db/migration/.

    For manual migration (optional):

    ./gradlew flywayMigrate
    

List of used libraries

  1. telegram bot API - library for working with Telegram Bot API
  2. slf4j + logback - logger
  3. sqlite + exposed - lightweight database
  4. quartz - job scheduling library
  5. koin - dependency injection library
  6. ktor - web framework
  7. caffeine - caching library
  8. flyway - database migrations

Versions:

  • Kotlin: 2.4.10
  • Ktor: 3.5.2
  • Koin: 4.2.2
  • SQLite: 3.53.4.0
  • Exposed: 1.5.0
  • Quartz: 2.5.2
  • TelegramBotAPI: 36.1.0
  • Caffeine (Aedile): 3.0.4
  • Flyway: 13.4.0
  • Gradle: 9.5.1
  • JDK: 25

Project Updates

(update 21.08.2023) I didn't rent a server for a bot, but just used raspberries mini-PC iRU 114. This is my little production server from improvised means.

(update 25.03.2025) The application was completely rewritten from Java + Spring to Kotlin + Ktor using an asynchronous approach. It has become more stable and faster, and is prepared for an increase in the number of users.

(update 13.04.2025) Added statistics for the bot.

(update 16.04.2025) Pagination added for blacklist games.

(update 28.08.2026) Flyway migrations run automatically on startup. Quartz schedulers consolidated into a single instance; jobs receive dependencies via Koin. Added .env support for local configuration.

(update 31.08.2026) News is delivered as Telegram Rich Messages with Steam BBCode parsing and HTML fallback. Bot statistics use a Rich Message markdown table with per-user game and wishlist counts. Inline keyboard buttons in settings and under news use colored styles.

License

This project is distributed under the terms of the MIT license. See LICENSE.

About

A bot for news about your Steam games. Stay up to date with the latest patches, DLC releases, and game events!

Topics

Resources

Stars

7 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages