siahe

command module
v0.0.0-...-a262b4a Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 7, 2024 License: AGPL-3.0 Imports: 17 Imported by: 0

README

#+title: siahe
#+html: <img style="height: 30em;"src="https://i.imgur.com/mXwY95v.jpeg"/>

=siahe= is designed to help university clubs sell tickets for their events through the Telegram messaging platform. The bot provides a seamless ticket purchasing experience for users, allowing them to easily browse available events, select tickets, and sign up directly within the Telegram app.

** Build
1. Have the latest version of =go= installed in you path.
2. Clone this repository and change directory.
3. Build.
#+begin_src bash
go build .
#+end_src

** Run
=siahe= inputs a set of configuration entries. This entries can either be passed by environment variables, argument flags or =.env= file. To see the full list of flags either do =siahe --help= or check out [file:config.go] directly.

Here is an example usage of an =.env= file.
Generate the env file.
#+begin_src bash
cp .env.sample .env
#+end_src
Fill out the env file with specified parameters.
#+begin_src bash
$EDITOR .env
#+end_src
Run the program.
#+begin_src bash
siahe
#+end_src

*** Run by Docker
=siahe= [[https://github.com/dearrude/siahe/pkgs/container/siahe][images]] are built upon each commit on Github container registry (ghcr) with =latest= tag.

Generate the following =docker-compose.yml= file.
#+begin_src yaml
version: '3'
services:
    siahe:
    image: ghcr.io/dearrude/siahe:latest
    container_name: siahe
    volumes:
        - ./siahe_assets:/home/nonroot/assets
    environment:
        APPID: -
        APPHASH: -
        BOTTOKEN: -
        ADMINPASSWORD: -
        VARIFICATIONCHAT: -
        BACKUPCHAT: -
        SQLITEPATH: "/home/nonroot/assets/db.sqlite"
        SESSIONPATH: "/home/nonroot/assets/session.json"

#+end_src

Run the containers.
#+begin_src bash
docker compose up -d && docker compose logs -f
#+end_src

In case of updates, run the following the command to update and re-run the container:
#+begin_src bash
docker compose pull
docker compose up -d --force-recreate
docker compose logs -f
#+end_src

** Run
*Note*: ~<param>~ means a mandatory parameter while ~[param]~ means an optional parameter.

1. Make sure that the bot is running by sending ~/start~ command to it.
2. Make an account by ~/add_account~ command.
3. Change your status to *moderator* by ~/promote_me <admin_password>~. A moderator can _promote_ and _demote_ other *admin* aside from running admin commands.
4. Run other commands accordingly.

*** User commands
- ~/start~ boots the bot. Given a ~getTicket_<event_id>~ as parameter, it can be used to purchase ticket(s).
- ~/add_account~ add a permanent account to bot, similar to signing up to a website authentication.
- ~/get_account~ prints data about user's own account.
- ~/delete_account~ delete user's account.
- ~/available_events~ shows all available events to get tickets for

*** Admin commands
**** User handling
- ~/get_user <user_id>~ prints a user's info by theirs telegram user_id
- ~/delete_user <user_id>~ deletes a user's account.
- ~/export_users~ exports all users info into a CSV file.
- ~/message_all~ sends a message to all signed up users.

**** Place handling
A place is a database entity that events take place in. For more info, run ~/add_place~ command.

- ~/add_place~ add and define a place to database. This will generate a unique ~place_id~.
- ~/get_place <place_id>~ prints data about place.
- ~/get_places~ prints a minimal data about all places. This include their place_id and name. It is useful if you want to event a place id by its name.
- ~/delete_place <place_id>~ deletes a place by its id.

**** Event handling
An event is a database entity that users can get tickets for. For more info, run ~/add_event~ command.

- ~/add_event~ add and define a event to database. This will generate a unique ~event_id~.
- ~/get_event <event_id>~ prints data about event.
- ~/get_events~ prints a minimal data about all events. This include their event_id and name. It is useful if you want to find an event id by its name.
- ~/delete_event <event_id>~ deletes a place by its id.
- ~/activate_event <event_id>~ activating an event enables users to get ticket for it. Events are activated by default upon creation.
- ~/deactivate_event <event_id>~ deactivating an event disables users to get ticket for it.
- ~/flush_reserves <event_id>~ delete all reserved tickets for an event.
- ~/message_event~ sends a message to all who got a ticket for the event.

**** Ticket handling
A ticket is a sign for users that they can attend events. In order to get a ticket for the user, they can open a URL of such pattern: ~https://t.me/<bot_username>?start=getTicket_<event_id>~. For example if bot's username is ~@fumTheatreSignupBot~ and you want to generate a link for users to get tickets for event_id 1, according to schema the URL is: ~https://t.me/fumTheatreSignupBot?start=getTicket_1~. In order to show all available events, the following URL can be used: ~https://t.me/fumTheatreSignupBot?start=availableEvents~

- ~/get_ticket <ticket_id>~ shows info about a ticket and its owner. Used to check the validity of the ticket.
- ~/attend_ticket <ticket_id>~ changes the ticket _status_ from ~completed~ to ~attended~. Used to track who showed up if they got any ticket.
- ~/unattend_ticket <ticket_id>~ reverses the functionality of prior command.
- ~/delete_ticket <ticket_id>~ removes a ticket from database.
- ~/export_tickets <event_id>~ exports all tickets of an event to a CSV file.
- ~/preview_tickets <event_id>~ preview all tickets of an event to a telegram message.
- ~/print_tickets <event_id>~ generate a printable PDF of all tickets of an event.
- ~/count_tickets~ count all tickets in database. Since ticket code is a 4-digit code, its count shouldn't exceed 9999. Delete deactivated events for their tickets to be deleted and free up the ticket codes.

** Licence
AGPLv3+

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL