trade_bot/README.md
Jeff 12ba111c39
All checks were successful
Publish / rust (push) Successful in 5m30s
Publish / docker (push) Successful in 19m53s
Update README and config file
2024-10-19 06:00:37 -04:00

159 lines
6.2 KiB
Markdown

# Veloren Trading Bot
A bot that buys, sells and trades with players.
The bot is containerized and can be run without compiling or building anything. Alternatively, you
can clone this repository and build the image yourself or build the binary directly with Cargo if
you are familiar with Rust.
![publish](https://git.jeffa.io/jeff/trade_bot/actions/workflows/publish.yaml/badge.svg)
## Warnings and Notices
- This project is **not officially supported** by the Veloren team. It will connect to the official
Veloren server by default, but the moderators have the final say in whether it is allowed or
not. **If you are asked not to use it, do not use it**.
- This is **not a cheat bot**. It does not give the player any advantage in the game. It is
intended to be a fun addition to the game that can help players trade items with each other.
- This project may have bugs. You are encouraged to report them to the author but the author takes
no responsibility for any lost items. **No such incidents have been reported so far.**
- This program **handles your password securely** and does nothing with it except connecting to the
veloren server during launch. However, third-party video game software is often infected with
malware. You should **review the source code** or ask someone you trust to do so for you.
- You are welcome to make changes to the code or fork the project. The author is open to
contributions and suggestions. But you **must indicate that the software has changed and
distribute it under the same license**, which also requires it being open-source. You may not
distribute the modified software as if it were the original.
## In-Game Commands
The bot is able to respond to the following commands, which must be sent via "/tell".
- `price [search term]`: Returns the buy/sell offers of any item whose name or ID contains the
search term.
- `admin_access`: Admin-only, prompts the bot to send a trade invite to the sender, after which it
will give away and accept any items until the trade ends.
- `announce`: Admin-only, sends the announcement message to "/region". This will reset the
announcement timer to 45 minutes.
- `location`: Returns the bot's current town or, if it is not in a town, its current position.
- `sort [count (optional)]`: Admin-only, sorts the inventory once or the given number of times.
- `pos [x] [y] [z]`: Admin-only, sets the bot's desired position where it will try to stand (must
be close to the bot's current position).
- `ori [0-360]`: Admin-only, sets the bot's desired orientation (or facing direction).
## Prerequisites
You must have either [Docker](docker.com) or [Podman](podman.io) installed.
## Usage
All of these steps can be done with Docker but Podman is shown for the examples. If you use
Docker, just replace "podman" with "docker" in your commands.
### Setup
Create a "secrets.toml" file:
```toml
# secrets.toml
username = "bot_username"
password = "bot_password"
character = "bot_character"
# You may add usernames or UUIDs to this list. The only advantage of using UUIDs is that it will
# persist accross changes to your username or player alias.
admins = ["my_username"]
```
Then create a secret to pass the file securely to the container.
```sh
podman secret create secrets.toml secrets.toml
```
You will also need a "config.toml" and it needs it be in a "config" directory that can be mounted
to the container:
```toml
# config/config.toml
# Optional. The bot will connect to the official server if this is not set.
game_server = "server.veloren.net"
# Optional. The bot will connect to the official auth server if this is not set. Be careful
# if you set this, your username and password will be sent to this server. Most servers use the
# official auth server so you can probably leave this out, even if you are using an alternate
# game server.
auth_server = "https://auth.veloren.net"
# Optional. Change these to the desired X, Y, Z coordinates. The bot will try to stand here, but
# the coordinates must be close to the bot's spawn point. If not set, the bot will stand at its
# spawn point. Its position can be changed in-game with the "pos" command.
position = [0, 0, 0]
# Optional. (0 = North, 90 = West, 180 = South, 270 = East) If not set, the bot will face North.
# Its orientation can be changed in-game with the "ori" command.
orientation = 0
# Optional. Announcements are sent every 45 minutes. If not set, the bot will not make announcements.
announcement = "I love cheese!"
# The buy_prices and sell_prices tables are required. The keys are item definition IDs and the
# values are the price in coins. You may type in-game "/give_item common.items." and press Tab to
# explore the item definition IDs. Then just leave off the "common.items." part in this file.
[buy_prices]
"food.cheese" = 50
[sell_prices]
"consumable.potion_minor" = 150
# Modular weapons are listed by their components: "material|primary|secondary". The material is
# snake_cased and you can omit the "common.items.modular.weapon.[primary|secondary]" from the
# modular components.
"iron|sword.greatsword|sword.long" = 1_000
```
### Running
Run the container:
```sh
podman run \
--detach \
--name trade_bot \
--secret secrets.toml \
--volume ./config/:/root/config/:Z \
--env CONFIG=/root/config/config.toml \
--env SECRETS=/run/secrets/secrets.toml \
--env RUST_LOG=trade_bot \
git.jeffa.io/jeff/trade_bot
```
View the log output with `podman logs -f trade_bot`.
### Building
Clone this repository. From the project root:
```sh
podman build . -t trade_bot
```
Then follow the [above](#running) steps with the tag "trade_bot" instead of
"git.jeffa.io/jeff/trade_bot".
## Changelog
- 9/2/2024:
- Added the "location" command.
- Removed the "{location}" feature from the announcement message. Announcements are now sent to
"/region" so this feature is now used by the "location" command.
- Changed announcements to be sent to "/region" instead of "/world". The moderators on the official
server have asked for this, so please don't run an old version to circumvent the change.
- Removed the "Ouch!" and "That hurt!" messages when the bot is attacked. The moderators have also
asked for this.
## License
This project is licensed under the GPL-3.0 license. See the [LICENSE](LICENSE) file for details.