tangled
alpha
login
or
join now
bwc9876.dev
/
bingus-bot
0
fork
atom
The world's most clever kitty cat
0
fork
atom
overview
issues
pulls
pipelines
Allow replying to self
bwc9876.dev
1 week ago
a30d0c4a
5e0be501
verified
This commit was signed with the committer's
known signature
.
bwc9876.dev
SSH Key Fingerprint:
SHA256:DanMEP/RNlSC7pAVbnXO6wzQV00rqyKj053tz4uH5gQ=
+30
-18
3 changed files
expand all
collapse all
unified
split
src
brain.rs
main.rs
on_message.rs
+1
-1
src/brain.rs
···
96
96
let chance = if is_self { 45 } else { 80 };
97
97
let roll = rand.u8(0..=100);
98
98
99
99
-
(FORCE_REPLIES && !is_self) || roll <= chance
99
99
+
(FORCE_REPLIES) || roll <= chance
100
100
}
101
101
102
102
fn extract_final_token(msg: &str) -> Option<Token> {
+6
-4
src/main.rs
···
51
51
52
52
async fn handle_discord_event(event: Event, ctx: Arc<BotContext>) -> Result {
53
53
match event {
54
54
-
Event::MessageCreate(msg) => handle_discord_message(msg, ctx).await?,
54
54
+
Event::MessageCreate(msg) => handle_discord_message(msg, ctx).await,
55
55
Event::Ready(ev) => {
56
56
info!("Connected to gateway as {}", ev.user.name);
57
57
let brain = ctx.brain_handle.lock().await;
58
58
-
update_status(&*brain, &ctx.shard_sender).context("Failed to update status")?;
58
58
+
update_status(&*brain, &ctx.shard_sender).context("Failed to update status")
59
59
}
60
60
_ => {
61
61
debug!("Ev: {event:?}");
62
62
+
Ok(())
62
63
}
63
64
}
64
64
-
65
65
-
Ok(())
66
65
}
67
66
68
67
fn load_brain(path: &Path) -> Result<Option<Brain>> {
···
176
175
177
176
loop {
178
177
tokio::select! {
178
178
+
179
179
+
biased;
180
180
+
179
181
Ok(()) = tokio::signal::ctrl_c() => {
180
182
info!("SIGINT: Closing connection and saving");
181
183
shard.close(CloseFrame::NORMAL);
+23
-13
src/on_message.rs
···
20
20
.is_some_and(|flags| flags.contains(MessageFlags::EPHEMERAL));
21
21
let is_dm = msg.guild_id.is_none();
22
22
23
23
-
// Should Ingest Message?
24
24
-
if is_self || !is_normal_message || is_ephemeral || is_dm {
23
23
+
// Should we consider this message at all?
24
24
+
if !is_normal_message || is_ephemeral || is_dm {
25
25
return Ok(());
26
26
}
27
27
28
28
-
let mut brain = ctx.brain_handle.lock().await;
29
29
-
let learned_new_word = brain.ingest(&msg.content);
30
30
-
ctx.pending_save.store(true, Ordering::Relaxed);
28
28
+
// Should we learn from this message? (We don't want to learn from ourselves)
29
29
+
if !is_self {
30
30
+
let mut brain = ctx.brain_handle.lock().await;
31
31
+
let learned_new_word = brain.ingest(&msg.content);
32
32
+
ctx.pending_save.store(true, Ordering::Relaxed);
31
33
32
32
-
if learned_new_word {
33
33
-
update_status(&*brain, &ctx.shard_sender).context("Failed to update status")?;
34
34
+
if learned_new_word {
35
35
+
update_status(&*brain, &ctx.shard_sender).context("Failed to update status")?;
36
36
+
}
34
37
}
35
38
36
39
// Should Reply to Message?
···
52
55
done_tx.send(()).ok();
53
56
});
54
57
58
58
+
let brain = ctx.brain_handle.lock().await;
55
59
if let Some(reply_text) = brain
56
60
.respond(&msg.content, is_self, Some(typ_tx))
57
61
.filter(|s| !s.trim().is_empty())
58
62
{
59
63
drop(brain);
60
64
done_rx.await.ok();
61
61
-
ctx.http
65
65
+
let allowed_mentions = AllowedMentions::default();
66
66
+
let my_msg = ctx
67
67
+
.http
62
68
.create_message(msg.channel_id)
63
69
.content(&reply_text)
64
64
-
.reply(msg.id)
65
65
-
.fail_if_not_exists(false)
66
66
-
.allowed_mentions(Some(&AllowedMentions::default()))
67
67
-
.await
68
68
-
.context("Failed to send message")?;
70
70
+
.allowed_mentions(Some(&allowed_mentions));
71
71
+
72
72
+
let my_msg = if !is_self {
73
73
+
my_msg.reply(msg.id).fail_if_not_exists(false)
74
74
+
} else {
75
75
+
my_msg
76
76
+
};
77
77
+
78
78
+
my_msg.await.context("Failed to send message")?;
69
79
}
70
80
71
81
Ok(())