# Nexus Search: Telegram Bot

`Bot` is a daemon processing user input from Telegram. This version has cut `configs`
subdirectory due to hard reliance of configs on the network infrastructure you are using.
You have to write your own configs taking example below into account.

The bot requires three other essential parts: 
- IDM API (auth)
- Nexus Hub API (managing files)
- Nexus Meta API (rescoring API for Summa Search server)

or their substitutions

## Sample `configs/base.yaml`

```yaml
---

application:
  # Amazon Recipient Email in /donate message
  amazon_gift_card_recipient: pirate@ship.space
  # Amazon URL for buying card in /donate message
  amazon_gift_card_url: https://www.amazon.com/dp/B07TMNGSN4
  bot_version: 1.6.0
  # Bitcoin Donation address in /donate message
  btc_donate_address: 3QbF3zRQVjn3qMJBSbmLC1gb6VUc555xkw
  # List of chat IDs that is allowed to bypass maintenance mode
  bypass_maintenance: []
  # Debugging mode
  debug: true
  # All users (except `bypass_maintenance` ones) will get UPGRADE_MAINTENANCE message in response
  is_maintenance_mode: false
  # Disable /settings, uploading new articles (can be used while vacuuming backend Postgres)
  # and preventing creation of new users
  is_read_only_mode: false
  # Require subscription to `related_channel` before allowing to use the bot
  is_subscription_required: false
  # Libera Pay URL in /donate message
  libera_pay_url:
  maintenance_picture_url:
  nexus_version: InterCom
  # Default page size for SERP
  page_size: 5
  # Length of generated Request-ID used for tracking requests across all backends
  request_id_length: 12
  # Enabled schemas (passed to Nexus Meta API)
  schemas:
    - scimag
    - scitech
  # Length of generated Session-ID used in commands to clue user sessions
  session_id_length: 8
  too_difficult_picture_url:
  upgrade_maintenance_picture_url:
  # Configuring behaviour of the bot in some cases
  views:
    settings:
      has_discovery_button: true
      has_language_buttons: true
      has_location_button: false
      has_router: false
      has_system_messaging_button: true
hub:
  url:
idm:
  url:
log_path: '/var/log/nexus-bot/{{ ENV_TYPE }}'
meta_api:
  url:
telegram:
  # Telegram App Hash from https://my.telegram.org/
  app_hash: '{{ APP_HASH }}'
  # Telegram App ID from https://my.telegram.org/
  app_id: 00000
  # External bot name shown in messages to users
  bot_external_name: libgen_scihub_bot
  # Internal bot name used in logging
  bot_name: nexus-bot
  bot_token: '{{ BOT_TOKEN }}'
  # WARNING! Potentially buggy telethon option. Sometimes it goes mad and overload users with tons of messages
  # Collect missed messages at startup time and answer to them
  catch_up: false
  # Telegram account for forwarding copyright infringements from /copyright command
  copyright_infringement_account:
  # Telethon database for keeping cache
  database:
    session_id: '/usr/lib/nexus-bot/{{ ENV_TYPE }}/session.db'
  # Enabled handlers
  handlers:
    - nexus.bot.handlers.admin.AdminHandler
    - nexus.bot.handlers.ban.BanHandler
    - nexus.bot.handlers.ban.BanlistHandler
    - nexus.bot.handlers.ban.UnbanHandler
    - nexus.bot.handlers.contact.ContactHandler
    - nexus.bot.handlers.copyright.CopyrightHandler
    - nexus.bot.handlers.close.CloseHandler
    - nexus.bot.handlers.donate.DonateHandler
    - nexus.bot.handlers.download.DownloadHandler
    - nexus.bot.handlers.emoji.EmojiHandler
    - nexus.bot.handlers.help.HelpHandler
    - nexus.bot.handlers.referencing_to.ReferencingToHandler
    - nexus.bot.handlers.referencing_to.ReferencingToPagingHandler
    - nexus.bot.handlers.roll.RollHandler
    - nexus.bot.handlers.settings.SettingsButtonsHandler
    - nexus.bot.handlers.settings.SettingsRouterHandler
    - nexus.bot.handlers.settings.SettingsManualHandler
    - nexus.bot.handlers.shortlink.ShortlinkHandler
    - nexus.bot.handlers.submit.SubmitHandler
    - nexus.bot.handlers.start.StartHandler
    - nexus.bot.handlers.stop.StopHandler
    - nexus.bot.handlers.view.ViewHandler
    - nexus.bot.handlers.vote.VoteHandler
    - nexus.bot.handlers.noop.NoopHandler
    - nexus.bot.handlers.search.SearchHandler
    - nexus.bot.handlers.search.SearchEditHandler
    - nexus.bot.handlers.search.SearchPagingHandler
  # Channel that will be shown in /help, /donate, /contact and in promotions
  related_channel: '@nexus_search'
```