Skip to content

Commit d8b1808

Browse files
authored
Merge pull request #280 from Rustmail/277-incorrectly-categorized-messages-on-the-panel
fix(panel): incorrectly categorized messages on the panel
2 parents 98642d2 + b115b14 commit d8b1808

14 files changed

Lines changed: 170 additions & 22 deletions

.sqlx/query-0a9a9189a018b53b2a3c6ae0c85c44ef60d33d78ce17d773466f374cd2803e15.json renamed to .sqlx/query-19a1b22e10deb0dd6e9bf4b5fb6f54d9cc00ff70392c014872208fbf09be4c46.json

Lines changed: 8 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.sqlx/query-7d9494022e24d0fe923efbfef1ab3f6a046c063b445ea68a6d21b1b5bb93bba9.json

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.sqlx/query-58b509ab34151e24f3f505e8516537324a9ab038f38d0242446bce07faaa3c48.json renamed to .sqlx/query-8bd9999e773c8ff007893fe3d18a519901f9d98d9c85029cc814d27cd510c94f.json

Lines changed: 8 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.sqlx/query-9e31ac92a673943c1173fbe2ffe072b7bddd509e1bceb1b7614010ffa97a4a4c.json renamed to .sqlx/query-a97fc2e1d356748f9253aede913332b848d8da2d1801c4e47e6efaa90f42d4c2.json

Lines changed: 8 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.sqlx/query-6df38aed052bab9ebce287b6d842ce80679b648daa71766b0f9fcb9cb892176b.json renamed to .sqlx/query-d7f09c6247ff4656eb6ec7cbcbbd70e80561d6c07d2695063c74cba55e98dc22.json

Lines changed: 8 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.sqlx/query-78851afb4bcef9737b5bb4a299320cce28a72d5755f57e0b874569311f569b51.json renamed to .sqlx/query-f407a76a376331c6bd0189559814dbbc073ab2eb20ce5dfc1ff0b156502607ba.json

Lines changed: 8 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
-- Add is_internal field to thread_messages table to support internal staff notes
2+
ALTER TABLE thread_messages ADD COLUMN is_internal BOOLEAN NOT NULL DEFAULT false;

rustmail/src/api/handler/bot/tickets.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ pub struct ThreadMessage {
2222
pub message_number: Option<i64>,
2323
pub created_at: String,
2424
pub content: String,
25+
pub is_internal: bool,
2526
}
2627

2728
#[derive(Debug, Clone, Serialize)]
@@ -180,7 +181,8 @@ pub async fn handle_tickets_bot(
180181
inbox_message_id,
181182
message_number,
182183
created_at as "created_at: String",
183-
content
184+
content,
185+
is_internal
184186
FROM thread_messages
185187
WHERE thread_id = ?
186188
ORDER BY created_at ASC
@@ -210,6 +212,7 @@ pub async fn handle_tickets_bot(
210212
message_number: m.message_number,
211213
created_at: m.created_at,
212214
content: m.content,
215+
is_internal: m.is_internal,
213216
})
214217
.collect();
215218

@@ -391,7 +394,8 @@ pub async fn handle_tickets_bot(
391394
inbox_message_id,
392395
message_number,
393396
created_at,
394-
content
397+
content,
398+
is_internal
395399
FROM thread_messages
396400
WHERE thread_id IN ({})
397401
ORDER BY thread_id, created_at ASC
@@ -412,6 +416,7 @@ pub async fn handle_tickets_bot(
412416
Option<i64>,
413417
String,
414418
String,
419+
bool,
415420
),
416421
>(&messages_query_str);
417422

@@ -445,6 +450,7 @@ pub async fn handle_tickets_bot(
445450
message_number: msg.7,
446451
created_at: msg.8,
447452
content: msg.9,
453+
is_internal: msg.10,
448454
});
449455
}
450456

rustmail/src/db/operations/messages.rs

Lines changed: 52 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ pub async fn get_latest_thread_message(
166166
r#"
167167
SELECT id, thread_id, user_id, user_name, is_anonymous,
168168
dm_message_id, inbox_message_id, message_number,
169-
created_at as "created_at: String", content
169+
created_at as "created_at: String", content, is_internal
170170
FROM thread_messages
171171
WHERE thread_id = ?
172172
ORDER BY created_at DESC
@@ -188,6 +188,7 @@ pub async fn get_latest_thread_message(
188188
message_number: row.message_number,
189189
_created_at: row.created_at,
190190
content: row.content,
191+
_is_internal: row.is_internal,
191192
});
192193

193194
Ok(latest)
@@ -259,6 +260,49 @@ pub async fn insert_user_message_with_ids(
259260
Ok(())
260261
}
261262

263+
pub async fn insert_internal_message(
264+
ctx: &Context,
265+
msg: &Message,
266+
thread_id: &str,
267+
pool: &SqlitePool,
268+
config: &Config,
269+
) -> Result<(), Error> {
270+
let user_id = msg.author.id.get() as i64;
271+
let inbox_message_id = msg.id.to_string();
272+
273+
let user_name = msg
274+
.author
275+
.id
276+
.to_user(&ctx.http)
277+
.await
278+
.map(|user| user.name)
279+
.unwrap_or_else(|_| "Unknown".to_string());
280+
281+
let content = extract_message_content(msg, config);
282+
283+
sqlx::query!(
284+
r#"
285+
INSERT INTO thread_messages (
286+
thread_id, user_id, user_name, is_anonymous, inbox_message_id, content, thread_status, is_internal
287+
) VALUES (
288+
?, ?, ?, ?, ?, ?, ?, ?
289+
)
290+
"#,
291+
thread_id,
292+
user_id,
293+
user_name,
294+
false,
295+
inbox_message_id,
296+
content,
297+
1,
298+
true
299+
)
300+
.execute(pool)
301+
.await?;
302+
303+
Ok(())
304+
}
305+
262306
pub async fn get_thread_message_by_inbox_message_id(
263307
inbox_message_id: &str,
264308
pool: &SqlitePool,
@@ -267,7 +311,7 @@ pub async fn get_thread_message_by_inbox_message_id(
267311
r#"
268312
SELECT id, thread_id, user_id, user_name, is_anonymous,
269313
dm_message_id, inbox_message_id, message_number,
270-
created_at as "created_at: String", content
314+
created_at as "created_at: String", content, is_internal
271315
FROM thread_messages
272316
WHERE inbox_message_id = ?
273317
ORDER BY created_at DESC
@@ -289,6 +333,7 @@ pub async fn get_thread_message_by_inbox_message_id(
289333
message_number: row.message_number,
290334
_created_at: row.created_at,
291335
content: row.content,
336+
_is_internal: row.is_internal,
292337
}) {
293338
Some(row) => row,
294339
None => {
@@ -309,7 +354,7 @@ pub async fn get_thread_message_by_message_id(
309354
r#"
310355
SELECT id, thread_id, user_id, user_name, is_anonymous,
311356
dm_message_id, inbox_message_id, message_number,
312-
created_at as "created_at: String", content
357+
created_at as "created_at: String", content, is_internal
313358
FROM thread_messages
314359
WHERE dm_message_id = ? OR inbox_message_id = ?
315360
ORDER BY created_at DESC
@@ -332,6 +377,7 @@ pub async fn get_thread_message_by_message_id(
332377
message_number: row.message_number,
333378
_created_at: row.created_at,
334379
content: row.content,
380+
_is_internal: row.is_internal,
335381
}) {
336382
Some(row) => row,
337383
None => {
@@ -354,7 +400,7 @@ pub async fn get_thread_message_by_dm_message_id(
354400
r#"
355401
SELECT id, thread_id, user_id, user_name, is_anonymous,
356402
dm_message_id, inbox_message_id, message_number,
357-
created_at as "created_at: String", content
403+
created_at as "created_at: String", content, is_internal
358404
FROM thread_messages
359405
WHERE dm_message_id = ?
360406
AND thread_status = 1
@@ -377,6 +423,7 @@ pub async fn get_thread_message_by_dm_message_id(
377423
message_number: row.message_number,
378424
_created_at: row.created_at,
379425
content: row.content,
426+
_is_internal: row.is_internal,
380427
}) {
381428
Some(row) => row,
382429
None => {
@@ -401,4 +448,5 @@ pub struct ThreadMessage {
401448
pub message_number: Option<i64>,
402449
pub _created_at: String,
403450
pub content: String,
451+
pub _is_internal: bool,
404452
}

rustmail/src/handlers/guild_messages_handler.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,23 @@ impl EventHandler for GuildMessagesHandler {
242242
}
243243
return;
244244
}
245+
246+
if let Some(guild_id) = msg.guild_id {
247+
let staff_guild_id = self.config.bot.get_staff_guild_id();
248+
if guild_id.get() == staff_guild_id && !msg.author.bot {
249+
if let Some(pool) = &self.config.db_pool {
250+
let channel_id_str = msg.channel_id.to_string();
251+
if let Some(_thread) = get_thread_by_channel_id(&channel_id_str, pool).await {
252+
if let Err(e) =
253+
insert_internal_message(&ctx, &msg, &_thread.id, pool, &self.config)
254+
.await
255+
{
256+
eprintln!("Failed to record internal message: {}", e);
257+
}
258+
}
259+
}
260+
}
261+
}
245262
return;
246263
}
247264

0 commit comments

Comments
 (0)