mirror of
https://github.com/mii443/rs-docker-bot.git
synced 2025-08-22 16:15:40 +00:00
add file uploading
This commit is contained in:
@ -199,7 +199,47 @@ impl Container {
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
pub async fn upload_file(&self, content: &str, file_name: String) {
|
||||
pub async fn upload_file(&self, data: Vec<u8>, path: &str) {
|
||||
let docker = Docker::connect_with_local_defaults().unwrap();
|
||||
|
||||
let archive = {
|
||||
let encoder = GzEncoder::new(vec![], Compression::default());
|
||||
let mut tar = tar::Builder::new(encoder);
|
||||
|
||||
let mut header = Header::new_gnu();
|
||||
header.set_path(path).unwrap();
|
||||
header.set_size(data.len() as u64);
|
||||
header.set_cksum();
|
||||
|
||||
tar.append(&header, data.as_slice()).unwrap();
|
||||
|
||||
tar.finish().unwrap();
|
||||
|
||||
let encoder = tar.into_inner().unwrap();
|
||||
encoder.finish().unwrap()
|
||||
};
|
||||
|
||||
{
|
||||
docker
|
||||
.start_container::<String>(&self.id, None)
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
docker
|
||||
.upload_to_container(
|
||||
&self.id,
|
||||
Some(UploadToContainerOptions {
|
||||
path: "/",
|
||||
..Default::default()
|
||||
}),
|
||||
archive.into(),
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn upload_source_file(&self, content: &str, file_name: String) {
|
||||
let docker = Docker::connect_with_local_defaults().unwrap();
|
||||
let path = self.language.clone().unwrap().get_path(file_name.clone());
|
||||
|
||||
|
@ -22,7 +22,6 @@ pub async fn event_handler(
|
||||
}
|
||||
|
||||
serenity::FullEvent::Message { new_message } => {
|
||||
println!("on_message");
|
||||
on_message(ctx, data, new_message).await;
|
||||
}
|
||||
|
||||
@ -31,10 +30,10 @@ pub async fn event_handler(
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn on_message(ctx: &serenity::Context, data: &Data, message: &Message) {
|
||||
async fn on_message(ctx: &serenity::Context, data: &Data, new_message: &Message) {
|
||||
let regex = Regex::new("^(?P<codeblock>```(?:(?P<language>[^\n]*)\n)?(?P<code>[\\s\\S]+?)\n```)(?:\\s*(?P<paths>(?:(?:/|\\.\\.?/)?(?:[^/\\s]+/)*[^/\\s]+\\s*)+))?$").unwrap();
|
||||
|
||||
let capture = regex.captures(&message.content);
|
||||
let capture = regex.captures(&new_message.content);
|
||||
|
||||
if let Some(captures) = capture {
|
||||
let language = captures.name("language").unwrap().as_str();
|
||||
@ -45,7 +44,7 @@ async fn on_message(ctx: &serenity::Context, data: &Data, message: &Message) {
|
||||
let language = config.get_language(&String::from(language));
|
||||
|
||||
if let Some(language) = language {
|
||||
let mut message = message
|
||||
let mut message = new_message
|
||||
.reply(&ctx.http, format!("Creating {} container.", language.name))
|
||||
.await
|
||||
.unwrap();
|
||||
@ -61,7 +60,14 @@ async fn on_message(ctx: &serenity::Context, data: &Data, message: &Message) {
|
||||
.await
|
||||
.unwrap();
|
||||
|
||||
container.upload_file(code, file_name.clone()).await;
|
||||
for attachment in &new_message.attachments {
|
||||
let data = attachment.download().await.unwrap();
|
||||
container
|
||||
.upload_file(data, &format!("{}", attachment.filename))
|
||||
.await;
|
||||
}
|
||||
|
||||
container.upload_source_file(code, file_name.clone()).await;
|
||||
|
||||
let compile_buf = Arc::new(Mutex::new(String::default()));
|
||||
let b = Arc::clone(&compile_buf);
|
||||
|
Reference in New Issue
Block a user