14 Commits

Author SHA1 Message Date
Michał Czyż
051ae857a7 chore: release 2024-08-13 14:51:01 +02:00
08fbdc828c ci: release-plz 2024-08-13 14:50:20 +02:00
aeb10d9baf ops: default branch yeet 2024-08-12 20:58:01 +02:00
af247aa6d5 ci: release please setup 2024-08-12 20:01:06 +02:00
eae957c6d7 Create ci.yml 2024-08-12 19:33:07 +02:00
5399f3ba6d oop 2024-08-12 19:31:51 +02:00
076dfd0a93 fixed release to build arm64 2024-08-12 19:08:59 +02:00
212abd9bdd chore: release 0.10.2 2024-08-12 18:46:53 +02:00
8d787f2a11 fix: crates bumped 2024-08-12 18:46:21 +02:00
486f403d10 chore: release 0.10.1 2024-08-12 18:20:24 +02:00
bfd301c9c2 fix: deps broken 2024-08-12 18:14:09 +02:00
670b8dd30e gh: actions 2024-08-12 18:13:59 +02:00
c607aaf403 updated image in README.md 2024-08-12 13:37:10 +02:00
f41fa7e09b updated README.md 2024-08-12 13:36:36 +02:00
13 changed files with 141 additions and 82 deletions

1
.github/FUNDING.yml vendored Normal file
View File

@@ -0,0 +1 @@
github: eRgo35

22
.github/workflows/ci.yml vendored Normal file
View File

@@ -0,0 +1,22 @@
name: Rust
on:
push:
branches: [ "senpai" ]
pull_request:
branches: [ "senpai" ]
env:
CARGO_TERM_COLOR: always
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build
run: cargo build --verbose
- name: Run tests
run: cargo test --verbose

27
.github/workflows/release-plz.yml vendored Normal file
View File

@@ -0,0 +1,27 @@
name: Release Plz
permissions:
pull-requests: write
contents: write
on:
push:
branches:
- senpai
jobs:
release-plz:
name: Release-plz
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Run release-plz
uses: MarcoIeni/release-plz-action@v0.5
env:
GITHUB_TOKEN: ${{ secrets.RELEASE_PLZ_TOKEN }}
CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}

12
.gitmodules vendored
View File

@@ -1,12 +0,0 @@
[submodule "libs/songbird"]
path = libs/songbird
url = git@github.com:eRgo35/songbird.git
[submodule "libs/serenity"]
path = libs/serenity
url = git@github.com:eRgo35/serenity.git
[submodule "libs/poise"]
path = libs/poise
url = git@github.com:eRgo35/poise.git
[submodule "libs/spotify-parser"]
path = libs/spotify-parser
url = git@github.com:eRgo35/spotify-parser.git

13
CHANGELOG.md Normal file
View File

@@ -0,0 +1,13 @@
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
## [0.10.3](https://github.com/eRgo35/lyra/compare/v0.10.2...v0.10.3) - 2024-08-13
### Other
- release-plz
# Changelog

57
Cargo.lock generated
View File

@@ -149,21 +149,6 @@ version = "0.22.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6"
[[package]]
name = "bit-set"
version = "0.5.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1"
dependencies = [
"bit-vec",
]
[[package]]
name = "bit-vec"
version = "0.6.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
[[package]] [[package]]
name = "bitflags" name = "bitflags"
version = "1.3.2" version = "1.3.2"
@@ -642,17 +627,6 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "af9673d8203fcb076b19dfd17e38b3d4ae9f44959416ea532ce72415a6020365" checksum = "af9673d8203fcb076b19dfd17e38b3d4ae9f44959416ea532ce72415a6020365"
[[package]]
name = "fancy-regex"
version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "531e46835a22af56d1e3b66f04844bed63158bc094a628bec1d321d9b4c44bf2"
dependencies = [
"bit-set",
"regex-automata 0.4.7",
"regex-syntax 0.8.4",
]
[[package]] [[package]]
name = "fastrand" name = "fastrand"
version = "2.1.0" version = "2.1.0"
@@ -1292,18 +1266,6 @@ version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760" checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760"
[[package]]
name = "lib-spotify-parser"
version = "1.0.0"
dependencies = [
"regex",
"reqwest 0.12.5",
"scraper",
"serde",
"serde_json",
"tokio",
]
[[package]] [[package]]
name = "libc" name = "libc"
version = "0.2.155" version = "0.2.155"
@@ -1349,12 +1311,10 @@ dependencies = [
[[package]] [[package]]
name = "lyra" name = "lyra"
version = "0.10.0" version = "0.10.3"
dependencies = [ dependencies = [
"dotenv", "dotenv",
"fancy-regex",
"json", "json",
"lib-spotify-parser",
"once_cell", "once_cell",
"openssl", "openssl",
"owoify", "owoify",
@@ -1366,6 +1326,7 @@ dependencies = [
"serde_json", "serde_json",
"serenity", "serenity",
"songbird", "songbird",
"spotify-parser",
"symphonia", "symphonia",
"tokio", "tokio",
"tracing", "tracing",
@@ -2886,6 +2847,20 @@ dependencies = [
"lock_api", "lock_api",
] ]
[[package]]
name = "spotify-parser"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e7b9d1d990125af02c6f611f2e8e34fd979310d43ae7ac5bd2cd357b87b13352"
dependencies = [
"regex",
"reqwest 0.12.5",
"scraper",
"serde",
"serde_json",
"tokio",
]
[[package]] [[package]]
name = "stable-vec" name = "stable-vec"
version = "0.4.1" version = "0.4.1"

View File

@@ -1,19 +1,18 @@
[package] [package]
name = "lyra" name = "lyra"
version = "0.10.0" version = "0.10.3"
authors = ["Michał Czyż <mike@c2yz.com>"] authors = ["Michał Czyż <mike@c2yz.com>"]
edition = "2021" edition = "2021"
description = "A featureful Discord bot written in Rust." description = "A featureful Discord bot written in Rust."
documentation = "https://lyra.c2yz.com/docs" documentation = "https://github.com/eRgo35/lyra"
readme = "README.md" readme = "README.md"
homepage = "https://lyra.c2yz.com" homepage = "https://lyra.c2yz.com"
license-file = "LICENSE.md" license-file = "LICENSE.md"
keywords = ["discord", "bot", "rust", "music", "featureful"] keywords = ["discord", "bot", "rust", "music", "featureful"]
[dependencies] [dependencies]
lib-spotify-parser = { path = "./libs/spotify-parser" } spotify-parser = "1.0.1"
dotenv = "0.15.0" dotenv = "0.15.0"
fancy-regex = "0.13.0"
json = "0.12.4" json = "0.12.4"
openssl = { version = "0.10.66", features = ["vendored"] } openssl = { version = "0.10.66", features = ["vendored"] }
owoify = "0.1.5" owoify = "0.1.5"
@@ -34,7 +33,6 @@ serenity = { default-features = true, features = [
"http", "http",
"rustls_backend", "rustls_backend",
], version = "0.12" } ], version = "0.12" }
symphonia = { version = "0.5.4", features = [ symphonia = { version = "0.5.4", features = [
"aac", "aac",
"adpcm", "adpcm",

View File

@@ -1,52 +1,82 @@
# Lyra <h2 align="center">
<a href="https://lyra.c2yz.com" target="blank_">
![](assets/lyra-256.png) <img height="256" alt="Lyra" src="assets/lyra-256.png" />
</a>
Lyra is a music bot written in Rust. <br />
Lyra: a discord music bot written in rust :crab:
## Getting Started </h2>
Lyra is an open source, discord music bot written in Rust. Lyra is an open source, discord music bot written in Rust.
The idea behind this project is to allow a user to self-host one's own instance of the bot. The idea behind this project is to allow a user to self-host one's own instance of the bot.
User no longer has to rely on 3rd-parties to provide them a service.
The bot can be run on a desktop, a vps or a phone as it's just a simple binary.
User no longer has to rely on 3rd parties to provide them an invite link. Currently bot is still heavily in development!
The bot can be run even on a desktop or a phone because after compilation, it's just a simple binary. ## Getting started
As of now, the bot supports spotify url track recognition through a separate nodejs script. I plan to write the actual parser inside the bot iteself but as of now I postponed it into future release. Before you start, you need to create a discord bot and get a token.
You can do it [here](https://discord.com/developers/applications).
Slash commands are still work in progress! Currently bot is still heavily in development! After you create a bot, you need to invite it to your server.
## Setting up Then, head to download section and download the latest release (or compile it yourself).
After you download the binary, you need to create a `.env` file in the same directory as the binary.
Example can be found in `.env.example` file.
```
DISCORD_TOKEN=<YOUR_DISCORD_TOKEN>
PREFIX=<YOUR_PREFIX>
```
DISCORD_TOKEN is the token you got from discord developers page and PREFIX is the prefix you want to use for your bot.
Bot by default reacts only to the prefix. To enable slash commands, while the bot is running type `:register` in the chat (where `:` is your bot prefix).
## Features
- Music playback
- Audio effects (soon)
- Some multipurpose commands
- Slash commands
- Self-hosted
## Compilation
To compile the source code on your own, you need `rust` and `cargo` To compile the source code on your own, you need `rust` and `cargo`
To run a dev version use To run a dev version, `cd` into the project directory and type
```bash ```bash
$ cargo run $ cargo run
``` ```
To build a production version use To build a production version use
```bash ```bash
$ cargo build --release $ cargo build --release
``` ```
If you need an ARM version and just don't want to wait for ages for the program to compile, use If you need a version for a different system or architecture, you can use `cross` crate
```bash ```bash
$ cross build -r --target aarch64-unknown-linux-gnu $ cross build -r --target aarch64-unknown-linux-gnu
``` ```
To run a program, just type To run a program, just type
```bash ```bash
$ ./lyra $ ./lyra
``` ```
if you want to disown it from the shell, I recommend using the script I provided in `scripts` folder Remember to provide a `.env` file in the same directory as the binary.
If you want to disown the bot from the shell, I recommend using the script I provided in `scripts` folder
## Commands ## Commands
As of now, working commands are: As of now, the commands are:
``` ```
Music: Music:
@@ -60,7 +90,7 @@ Music:
/repeat Loops currently playing song provided amount of times; aliases: repeat, loop, while, for /repeat Loops currently playing song provided amount of times; aliases: repeat, loop, while, for
/resume Resumes currently paused song /resume Resumes currently paused song
/seek Seeks a track by provided seconds /seek Seeks a track by provided seconds
/skip Skips the currently playing song /skip Skips the currently playing song; aliases: skip, :skipper:
/stop Stops playback and destroys the queue; aliases: stop, end /stop Stops playback and destroys the queue; aliases: stop, end
/volume Changes output volume /volume Changes output volume
/effect Plays one of available audio effects /effect Plays one of available audio effects
@@ -69,13 +99,22 @@ Music:
Tools: Tools:
/ai Asks AI /ai Asks AI
/dice Rolls a dice /dice Rolls a dice
/dictionary Explains provided query
/ip Shows IP information
/metar Prints metar for provided airport
/owoify Owoifies whatever you want uwu /owoify Owoifies whatever you want uwu
/ping Pings you backs with a response time /ping Pings you backs with a response time
/posix Prints current time in POSIX format /posix Prints current time in POSIX format
/qr Creates a qr code from text /qr Creates a qr code from text
/taf Returns taf for provided airport
/uptime Checks how long the bot has been running
/verse Reference Bible by verse /verse Reference Bible by verse
/weather Shows weather for provided location
Help: Help:
/help Prints this help message; aliases: help, huh, welp /help Prints this help message; aliases: help, huh, welp
Use /help command for more info on a command.
You can edit you message to the bot and the bot will edit its response.
``` ```

Submodule libs/poise deleted from 575025909b

Submodule libs/serenity deleted from 658b6a7261

Submodule libs/songbird deleted from 2d7dc29fd6

View File

@@ -2,7 +2,6 @@ use crate::commands::music::metadata::Metadata;
use crate::commands::music::notifier::TrackErrorNotifier; use crate::commands::music::notifier::TrackErrorNotifier;
use crate::{commands::embeds::error_embed, Context, Error}; use crate::{commands::embeds::error_embed, Context, Error};
use lib_spotify_parser;
use poise::serenity_prelude::{ use poise::serenity_prelude::{
Color, CreateEmbed, CreateEmbedAuthor, CreateEmbedFooter, Timestamp, Color, CreateEmbed, CreateEmbedAuthor, CreateEmbedFooter, Timestamp,
}; };
@@ -15,6 +14,7 @@ use songbird::input::AuxMetadata;
use songbird::input::{Compose, YoutubeDl}; use songbird::input::{Compose, YoutubeDl};
use songbird::tracks::TrackQueue; use songbird::tracks::TrackQueue;
use songbird::Call; use songbird::Call;
use spotify_parser;
use std::collections::VecDeque; use std::collections::VecDeque;
use std::process::Command; use std::process::Command;
use std::time::Duration; use std::time::Duration;
@@ -120,7 +120,7 @@ async fn handle_play<'a>(
} }
async fn parse_data(data: String) -> VecDeque<String> { async fn parse_data(data: String) -> VecDeque<String> {
let tracks = lib_spotify_parser::retrieve_async_url(&data) let tracks = spotify_parser::retrieve_async_url(&data)
.await .await
.unwrap_or(vec![data]) .unwrap_or(vec![data])
.iter() .iter()