[PAID] sh-telegram | Telegram & Parcels – Telegram + Parcel System w/ Contacts (VORP/RSG)

:sparkles: Features

:speech_balloon: Telegrams

  • Each character gets a unique telegram ID on first use (e.g. VA1056). Optional for Numeric or Town Based.

  • Send telegrams by ID, including:

    • Title + body
    • Optional anonymous sending with an extra configurable fee.
  • Clean NUI inbox:

    • Incoming messages list
    • Per-message view with reply & delete.
  • Charges money through VORP_CORE or RSG_CORE depending on config.

:package: Parcels

  • Send items as parcels to another player via their telegram ID.

  • Support for multiple items per parcel (max items configurable).

  • Configurable fees:

    • Base parcel fee
    • Optional per-item fees per item type.
  • Fully configurable parcel mishaps:

    • damaged – items arrive but marked as damaged in UI (cosmetic only).
    • lost_some – random % of quantity is lost.
    • lost_all – parcel arrives empty.
  • Mishaps are controlled entirely from Config.ParcelMishaps (toggle types, chances & ranges).

:repeat_button: Return to Sender

  • Receivers can manually return unclaimed parcels back to the sender.
  • Optional return fee for the receiver.
  • Config toggle for auto-return after X days (with periodic server-side checks).

:busts_in_silhouette: Contacts System

  • Simple contacts stored in DB:

    • Save telegram IDs with a friendly name.
    • Mark favorites so they’re sorted to the top.
  • Integrated directly into the NUI for easier sending.

:globe_showing_europe_africa: World Integration (Telegraph Offices)

  • Configurable telegraph office locations with map blips:

    • Example setup includes Valentine and Saint Denis telegraph offices.
  • Configurable clerk NPCs per office (model, coords, heading).

  • On-foot prompt near the NPC:

    • Default: Press [R] to access Telegraph Office
    • Customizable distance, keycode, text, and anti-spam delay.

:globe_with_meridians: Discord Webhook Logging

  • Optional Discord logging for:

    • Telegrams
    • Parcels sent / claimed
  • Supports:

    • Single global webhook or
    • Separate telegram + parcel webhooks.
  • Configurable Discord username, avatar, and embed colors.


:puzzle_piece: Requirements

  • oxmysql (for DB)
  • One of:
    • VORP_CORE
    • RSG_CORE

:file_folder: Resource Structure

From the fxmanifest.lua:

fx_version 'cerulean'
game 'rdr3'
lua54 'yes'

author 'SH Development'
description 'RedM Telegram + Parcel System with Contacts (VORP/RSG Compatible)'
version '1.0.5'

ui_page 'html/index.html'

escrow_ignore {
    'client/config.lua',
    'client/client_notify.lua',
    'server/config.lua'
}

files {
    'html/index.html',
    'html/app.js',
    'html/style.css',
    'html/assets/bg_telegram.png'
}

client_scripts {
    'client/config.lua',
    'client/main.lua',
    'client/ui_handler.lua',
    'client/client_notify.lua'
}

server_scripts {
    '@oxmysql/lib/MySQL.lua',
    'server/config.lua',
    'server/database.lua',
    'server/telegrams.lua',
    'server/parcels.lua',
    'server/contacts.lua',
    'server/main.lua'
}

Configs & notify scripts are left out of escrow so server owners can tweak them.


:gear: Configuration Overview

Core & Command

Config.Core = "VORP" -- or "RSG"

Config.Cooldown = 60 -- seconds cooldown for telegrams/parcels or nil

Config.Command = {
    enabled     = true,
    commandname = "telegram", -- /telegram
    permission  = nil         -- ACE if you want (e.g. "telegram.use")
}

Telegram IDs & Town Prefixes

Config.TelegramIdMode = "town" -- "numeric" or "town"

Config.TelegramTownPrefixes = {
    { name = "Valentine",   prefix = "VA", coords = { -277.0, 805.0, 119.0 } },
    { name = "Strawberry",  prefix = "SB", coords = { -1819.0, -561.0, 157.0 } },
    { name = "Rhodes",      prefix = "RH", coords = { 1230.0, -1295.0, 76.9 } },
    { name = "Saint Denis", prefix = "SD", coords = { 2644.8, -1280.6, 52.27 } },
    -- etc...
}

Parcels & Mishaps

Config.EnableParcels = true
Config.ParcelBaseFee = 5.0
Config.ParcelMaxItems = 4

Config.ParcelMishaps = {
    enabled       = true,
    chancePercent = 15,

    types = {
        lost_some = false,
        lost_all  = false,
        damaged   = true
    },

    lostSomeMinPercent = 20,
    lostSomeMaxPercent = 60,

    showDamagedSuffix  = true,
    notifyReceiver     = true,
    notifySender       = false
}

Return to Sender

Config.ParcelReturn = {
    enabled              = true,
    manualReturnFee      = 0.0,
    notifySenderOnReturn = true,

    autoReturn = {
        enabled              = false,
        daysUnclaimed        = 5,
        checkIntervalMinutes = 30
    }
}

Messages & Discord

All player-facing notifications and error messages are configurable in Config.Messages, including telegram/parcels success/failure and core errors. Discord logging is handled via Config.Discord (fill in your own webhooks there).


:world_map: Telegraph Offices & NPC Setup

Example from client/config.lua:

Config.Locations = {
    { name = "Valentine Telegraph Office", coords = vector3(-178.0035, 628.1660, 113.065) },
    { name = "Saint Denis Telegraph Office", coords = vector3(2744.2, -1398.3, 46.3) },
}

Config.NPCs = {
    {
        model   = "s_m_m_bankclerk_01",
        coords  = vector3(-178.0035, 628.1660, 113.065),
        heading = 157.0782,
    },
}

Config.Prompt = {
    keyControl   = 0xE30CD707, -- R
    showDist     = 3.0,
    interactDist = 2.0,
    text         = "Press [R] to access Telegraph Office",
    zOffset      = 1.0,
    spamDelay    = 500,
}

You can add more telegraph offices by expanding Config.Locations and Config.NPCs.


:package: Installation

  1. Place the resource
    Put the folder in your server resources, e.g.:
    resources/[scripts]/sh_telegram

  2. Import SQL
    Run the SQL file located at:
    sql/sh_telegram.sql
    This will create the tables for telegrams, parcels, contacts, etc.

  3. Ensure the resource
    In your server.cfg:

    ensure sh_telegram
    
  4. Configure

    • Set Config.Core to VORP or RSG.
    • Set telegraph office locations & NPCs in client/config.lua.
    • Adjust parcel fees, mishaps, telegram fees, IDs, messages, return behavior, and Discord logging in server/config.lua.

:camera_with_flash: Preview

Youtube


:inbox_tray: Purchase

Link - $35.99 USD


:bust_in_silhouette: Credits & Support

  • Author: SH Development
  • If you find any bugs or have feature requests, feel free to reply here or create a ticket within our Discord Server

Code is accessible No (configs.lua and client_notify.lua)
Subscription-based No
Lines (approximately) 4000
Requirements oxmysql, VORP Core or RSG Core
Support Yes

Update v1.0.6

  • Implemented SH-Identity Compatibility (Checks for ID before you can use telegram)

Files Updated : server/config.lua, server/main.lua, fxmanifest.lua, version.json

Update v1.0.7

  • Added new Icon for unread telegrams, shows how many unread you have available.
  • New Config.TelegramIdMode “custom” (Set a static custom prefix)
  • Added fallbacks incase of max 4 digit ID slots (Goes to 5/6 digits)