feat: add first bot draft
parent
3eea5cd344
commit
f3d19182d7
|
@ -0,0 +1,8 @@
|
||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectRootManager">
|
||||||
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
|
</component>
|
||||||
|
<component name="ScalaSbtSettings">
|
||||||
|
<option name="customVMPath" />
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,8 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/songlify.iml" filepath="$PROJECT_DIR$/songlify.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,10 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="RunConfigurationProducerService">
|
||||||
|
<option name="ignoredProducers">
|
||||||
|
<set>
|
||||||
|
<option value="com.android.tools.idea.compose.preview.runconfiguration.ComposePreviewRunConfigurationProducer" />
|
||||||
|
</set>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,13 @@
|
||||||
|
[package]
|
||||||
|
name = "songlify"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
teloxide = { version = "0.5", features = ["auto-send", "macros"] }
|
||||||
|
log = "0.4"
|
||||||
|
pretty_env_logger = "0.4.0"
|
||||||
|
tokio = { version = "1.8", features = ["rt-multi-thread", "macros"] }
|
||||||
|
rspotify = "0.10.0"
|
|
@ -0,0 +1,12 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="RUST_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$">
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
|
||||||
|
<excludeFolder url="file://$MODULE_DIR$/target" />
|
||||||
|
</content>
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
|
@ -0,0 +1,47 @@
|
||||||
|
use teloxide::prelude::*;
|
||||||
|
use crate::Spotify::Track;
|
||||||
|
|
||||||
|
enum Spotify {
|
||||||
|
Track(String)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_spotify_entry(url : &str) -> Option<Spotify> {
|
||||||
|
if url.contains("https://open.spotify.com/track/") {
|
||||||
|
let track_id = url.rsplit('/').next().and_then(|x| x.split('?').next());
|
||||||
|
return match track_id {
|
||||||
|
Some(id) => Some(Spotify::Track(id.to_string())),
|
||||||
|
None => None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return None
|
||||||
|
}
|
||||||
|
|
||||||
|
fn is_spotify_url(url : &str) -> Option<&str> {
|
||||||
|
// https://open.spotify.com/track/0VffaI2jwQknRrxpECYHsF?si=1e16c64779744375
|
||||||
|
if url.contains("https://open.spotify.com/") {
|
||||||
|
return Some(url)
|
||||||
|
}
|
||||||
|
return None
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() {
|
||||||
|
teloxide::enable_logging!();
|
||||||
|
log::info!("Starting Songlify...");
|
||||||
|
|
||||||
|
let bot = Bot::from_env().auto_send();
|
||||||
|
|
||||||
|
teloxide::repl(bot, |message| async move {
|
||||||
|
let text = message.update.text().and_then(get_spotify_entry);
|
||||||
|
match text {
|
||||||
|
Some(spotify) => {
|
||||||
|
match spotify {
|
||||||
|
Track(id) => Some(message.reply_to(id).await?)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
None => None
|
||||||
|
};
|
||||||
|
respond(())
|
||||||
|
})
|
||||||
|
.await;
|
||||||
|
}
|
Loading…
Reference in New Issue