Skip to content

Commit 86ffa10

Browse files
committed
womp
1 parent 40d1536 commit 86ffa10

File tree

2 files changed

+137
-107
lines changed

2 files changed

+137
-107
lines changed

Dockerfile

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,23 @@ RUN cargo chef prepare --recipe-path recipe.json
88
FROM chef AS builder
99
COPY --from=planner /tricked-bot/recipe.json recipe.json
1010
# Build dependencies - this is the caching Docker layer!
11-
RUN cargo chef cook --release --recipe-path recipe.json
11+
RUN --mount=type=cache,target=/usr/local/cargo/registry \
12+
--mount=type=cache,target=/tricked-bot/target \
13+
cargo chef cook --release --recipe-path recipe.json
1214
# Build tricked-botlication
1315
COPY . .
14-
RUN cargo build --release --bin tricked-bot
16+
RUN --mount=type=cache,target=/usr/local/cargo/registry \
17+
--mount=type=cache,target=/tricked-bot/target \
18+
cargo build --release --bin tricked-bot && \
19+
cp /tricked-bot/target/release/tricked-bot /usr/local/bin/tricked-bot
1520

1621
# We do not need the Rust toolchain to run the binary!
1722
FROM debian:bookworm-slim AS runtime
1823
WORKDIR /tricked-bot
19-
RUN apt-get update && \
20-
apt-get install -y --no-install-recommends libssl3 ca-certificates && \
21-
rm -rf /var/lib/apt/lists/*
24+
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
25+
--mount=type=cache,target=/var/lib/apt,sharing=locked \
26+
apt-get update && \
27+
apt-get install -y --no-install-recommends libssl3 ca-certificates
2228
COPY --from=chef /etc/ssl/certs /etc/ssl/certs
23-
COPY --from=builder /tricked-bot/target/release/tricked-bot /usr/local/bin
29+
COPY --from=builder /usr/local/bin/tricked-bot /usr/local/bin
2430
ENTRYPOINT ["/usr/local/bin/tricked-bot"]

src/ai_message.rs

Lines changed: 125 additions & 101 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,12 @@ impl Tool for Memory {
6868
}
6969

7070
// Ignore all errors to prevent AI completion failure
71-
let _ = self.0.get().and_then(|conn| {
72-
conn.execute(
71+
if let Ok(conn) = self.0.get() {
72+
let _ = conn.execute(
7373
"INSERT OR REPLACE INTO memory (user_id, key, content) VALUES (?, ?, ?)",
7474
params![self.1, args.memory_name, args.memory_content],
75-
)
76-
});
75+
);
76+
}
7777
Ok(())
7878
}
7979
}
@@ -119,12 +119,12 @@ impl Tool for MemoryRemove {
119119
logger.push(format!("🗑️ reluctantly deleting: {}", args.memory_name));
120120
}
121121

122-
let conn = self.0.get()?;
123-
conn.execute(
124-
"DELETE FROM memory WHERE user_id = ? AND key = ?",
125-
params![self.1, args.memory_name],
126-
)
127-
.map_err(|err| color_eyre::eyre::eyre!("Failed to execute SQL query: {}", err))?;
122+
if let Ok(conn) = self.0.get() {
123+
let _ = conn.execute(
124+
"DELETE FROM memory WHERE user_id = ? AND key = ?",
125+
params![self.1, args.memory_name],
126+
);
127+
}
128128
Ok(())
129129
}
130130
}
@@ -169,27 +169,30 @@ impl Tool for SocialCredit {
169169
logger.push(format!("{}: {}", action, args.social_credit.abs()));
170170
}
171171

172-
let mut user = {
173-
let db = self.0.get()?;
174-
let mut stm = db
175-
.prepare("SELECT * FROM user WHERE id = ?")
176-
.map_err(|err| color_eyre::eyre::eyre!("Failed to prepare SQL query: {}", err))?;
177-
stm.query_one([self.1.to_string()], |row| {
178-
from_row::<User>(row).map_err(|_| rusqlite::Error::QueryReturnedNoRows)
179-
})
180-
.map_err(|err| color_eyre::eyre::eyre!("Failed to query SQL query: {:?}", err))
181-
.unwrap()
182-
};
183-
184-
if args.remove == Some(true) && args.social_credit > 0 {
185-
args.social_credit = -args.social_credit;
186-
}
172+
// Ignore all errors to prevent AI completion failure
173+
let result = if let Ok(db) = self.0.get() {
174+
if let Ok(mut stm) = db.prepare("SELECT * FROM user WHERE id = ?") {
175+
if let Ok(mut user) = stm.query_one([self.1.to_string()], |row| {
176+
from_row::<User>(row).map_err(|_| rusqlite::Error::QueryReturnedNoRows)
177+
}) {
178+
if args.remove == Some(true) && args.social_credit > 0 {
179+
args.social_credit = -args.social_credit;
180+
}
187181

188-
user.social_credit += args.social_credit;
189-
user.update_sync(&*self.0.get()?)
190-
.map_err(|err| color_eyre::eyre::eyre!("Failed to update SQL query: {:?}", err))
191-
.unwrap();
192-
Ok(user.social_credit)
182+
user.social_credit += args.social_credit;
183+
let _ = user.update_sync(&*db);
184+
user.social_credit
185+
} else {
186+
0
187+
}
188+
} else {
189+
0
190+
}
191+
} else {
192+
0
193+
};
194+
195+
Ok(result)
193196
}
194197
}
195198

@@ -266,34 +269,43 @@ impl Tool for CrossUserMemory {
266269
logger.push(format!("🕵️ spying on {}: {}", args.user_name, args.memory_name));
267270
}
268271

269-
let conn = self.0.get()?;
270-
271-
// Try to find user by name using cache first, then database
272-
let user_id: u64 = {
273-
// First try to find in database
274-
let mut stmt = conn.prepare("SELECT id FROM user WHERE name = ?")
275-
.map_err(|err| color_eyre::eyre::eyre!("Failed to prepare query: {}", err))?;
272+
// Ignore all errors to prevent AI completion failure
273+
if let Ok(conn) = self.0.get() {
274+
// Try to find user by name using cache first, then database
275+
let user_id: u64 = {
276+
// First try to find in database
277+
if let Ok(mut stmt) = conn.prepare("SELECT id FROM user WHERE name = ?") {
278+
if let Ok(id) = stmt.query_row([&args.user_name], |row| row.get::<_, u64>(0)) {
279+
id
280+
} else if let Some(&user_id) = self.2.get(&args.user_name) {
281+
// Found in user mentions map
282+
user_id
283+
} else {
284+
// Fallback: create a hash-based ID if user doesn't exist anywhere yet
285+
use std::collections::hash_map::DefaultHasher;
286+
use std::hash::{Hash, Hasher};
287+
let mut hasher = DefaultHasher::new();
288+
args.user_name.hash(&mut hasher);
289+
hasher.finish()
290+
}
291+
} else if let Some(&user_id) = self.2.get(&args.user_name) {
292+
// Found in user mentions map
293+
user_id
294+
} else {
295+
// Fallback: create a hash-based ID if user doesn't exist anywhere yet
296+
use std::collections::hash_map::DefaultHasher;
297+
use std::hash::{Hash, Hasher};
298+
let mut hasher = DefaultHasher::new();
299+
args.user_name.hash(&mut hasher);
300+
hasher.finish()
301+
}
302+
};
276303

277-
if let Some(id) = stmt.query_row([&args.user_name], |row| row.get::<_, u64>(0)).ok() {
278-
id
279-
} else if let Some(&user_id) = self.2.get(&args.user_name) {
280-
// Found in user mentions map
281-
user_id
282-
} else {
283-
// Fallback: create a hash-based ID if user doesn't exist anywhere yet
284-
use std::collections::hash_map::DefaultHasher;
285-
use std::hash::{Hash, Hasher};
286-
let mut hasher = DefaultHasher::new();
287-
args.user_name.hash(&mut hasher);
288-
hasher.finish()
289-
}
290-
};
291-
292-
conn.execute(
293-
"INSERT OR REPLACE INTO memory (user_id, key, content) VALUES (?, ?, ?)",
294-
params![user_id, args.memory_name, args.memory_content],
295-
)
296-
.map_err(|err| color_eyre::eyre::eyre!("Failed to execute SQL query: {}", err))?;
304+
let _ = conn.execute(
305+
"INSERT OR REPLACE INTO memory (user_id, key, content) VALUES (?, ?, ?)",
306+
params![user_id, args.memory_name, args.memory_content],
307+
);
308+
}
297309
Ok(())
298310
}
299311
}
@@ -332,34 +344,43 @@ impl Tool for CrossUserMemoryRemove {
332344
logger.push(format!("🗑️ reluctantly deleting dirt on {}: {}", args.user_name, args.memory_name));
333345
}
334346

335-
let conn = self.0.get()?;
336-
337-
// Try to find user by name using cache first, then database
338-
let user_id: u64 = {
339-
// First try to find in database
340-
let mut stmt = conn.prepare("SELECT id FROM user WHERE name = ?")
341-
.map_err(|err| color_eyre::eyre::eyre!("Failed to prepare query: {}", err))?;
347+
// Ignore all errors to prevent AI completion failure
348+
if let Ok(conn) = self.0.get() {
349+
// Try to find user by name using cache first, then database
350+
let user_id: u64 = {
351+
// First try to find in database
352+
if let Ok(mut stmt) = conn.prepare("SELECT id FROM user WHERE name = ?") {
353+
if let Ok(id) = stmt.query_row([&args.user_name], |row| row.get::<_, u64>(0)) {
354+
id
355+
} else if let Some(&user_id) = self.2.get(&args.user_name) {
356+
// Found in user mentions map
357+
user_id
358+
} else {
359+
// Fallback: create a hash-based ID if user doesn't exist anywhere yet
360+
use std::collections::hash_map::DefaultHasher;
361+
use std::hash::{Hash, Hasher};
362+
let mut hasher = DefaultHasher::new();
363+
args.user_name.hash(&mut hasher);
364+
hasher.finish()
365+
}
366+
} else if let Some(&user_id) = self.2.get(&args.user_name) {
367+
// Found in user mentions map
368+
user_id
369+
} else {
370+
// Fallback: create a hash-based ID if user doesn't exist anywhere yet
371+
use std::collections::hash_map::DefaultHasher;
372+
use std::hash::{Hash, Hasher};
373+
let mut hasher = DefaultHasher::new();
374+
args.user_name.hash(&mut hasher);
375+
hasher.finish()
376+
}
377+
};
342378

343-
if let Some(id) = stmt.query_row([&args.user_name], |row| row.get::<_, u64>(0)).ok() {
344-
id
345-
} else if let Some(&user_id) = self.2.get(&args.user_name) {
346-
// Found in user mentions map
347-
user_id
348-
} else {
349-
// Fallback: create a hash-based ID if user doesn't exist anywhere yet
350-
use std::collections::hash_map::DefaultHasher;
351-
use std::hash::{Hash, Hasher};
352-
let mut hasher = DefaultHasher::new();
353-
args.user_name.hash(&mut hasher);
354-
hasher.finish()
355-
}
356-
};
357-
358-
conn.execute(
359-
"DELETE FROM memory WHERE user_id = ? AND key = ?",
360-
params![user_id, args.memory_name],
361-
)
362-
.map_err(|err| color_eyre::eyre::eyre!("Failed to execute SQL query: {}", err))?;
379+
let _ = conn.execute(
380+
"DELETE FROM memory WHERE user_id = ? AND key = ?",
381+
params![user_id, args.memory_name],
382+
);
383+
}
363384
Ok(())
364385
}
365386
}
@@ -394,23 +415,26 @@ impl Tool for BraveSearch {
394415
logger.push(format!("🔍 searching for ammo: \"{}\"", args.query));
395416
}
396417

397-
let results = self
398-
.0
399-
.search(&args.query)
400-
.await
401-
.map_err(|e| color_eyre::eyre::eyre!(format!("Brave API error: {e}")))?;
402-
let results_json: Vec<_> = results
403-
.into_iter()
404-
.map(|r| {
405-
json!({
406-
"title": r.title,
407-
"url": r.url,
408-
"description": r.description
409-
})
410-
})
411-
.collect();
412-
println!("Results: {:#?}", results_json);
413-
Ok(json!(results_json))
418+
// Ignore all errors to prevent AI completion failure
419+
let results_json = match self.0.search(&args.query).await {
420+
Ok(results) => {
421+
let results_json: Vec<_> = results
422+
.into_iter()
423+
.map(|r| {
424+
json!({
425+
"title": r.title,
426+
"url": r.url,
427+
"description": r.description
428+
})
429+
})
430+
.collect();
431+
println!("Results: {:#?}", results_json);
432+
json!(results_json)
433+
}
434+
Err(_) => json!([]) // Return empty array on error
435+
};
436+
437+
Ok(results_json)
414438
}
415439
}
416440

0 commit comments

Comments
 (0)