Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
software-project-WS25
Discord Team
Commits
6102c6ca
Commit
6102c6ca
authored
Nov 25, 2025
by
Dennis
Browse files
updated filestructure
parent
0cf25b1c
Changes
1
Hide whitespace changes
Inline
Side-by-side
bot_history.py
View file @
6102c6ca
...
@@ -18,10 +18,10 @@ intents.members = True
...
@@ -18,10 +18,10 @@ intents.members = True
client
=
discord
.
Client
(
intents
=
intents
)
client
=
discord
.
Client
(
intents
=
intents
)
DATA_DIR
=
Path
(
"
logs
"
)
DATA_DIR
=
Path
(
"
ingest
"
)
DATA_DIR
.
mkdir
(
exist_ok
=
True
)
DATA_DIR
.
mkdir
(
exist_ok
=
True
)
ME
SSAGES
_DIR
=
DATA_DIR
/
"me
ssages
"
ME
TA
_DIR
=
DATA_DIR
/
"
.
me
ta
"
ME
SSAGES
_DIR
.
mkdir
(
exist_ok
=
True
)
ME
TA
_DIR
.
mkdir
(
exist_ok
=
True
)
URL_REGEX
=
r
'(https?://\S+)'
URL_REGEX
=
r
'(https?://\S+)'
...
@@ -40,6 +40,10 @@ async def save_json_file_async(data: dict, dest: Path) -> None:
...
@@ -40,6 +40,10 @@ async def save_json_file_async(data: dict, dest: Path) -> None:
loop
=
asyncio
.
get_running_loop
()
loop
=
asyncio
.
get_running_loop
()
await
loop
.
run_in_executor
(
None
,
_atomic_write_json
,
data
,
dest
)
await
loop
.
run_in_executor
(
None
,
_atomic_write_json
,
data
,
dest
)
def
save_text
(
data
:
str
,
dest
:
Path
)
->
None
:
with
open
(
dest
,
"w"
,
encoding
=
"utf-8"
)
as
f
:
f
.
write
(
data
)
# === Bot startup: fetch history ===
# === Bot startup: fetch history ===
@
client
.
event
@
client
.
event
async
def
on_ready
():
async
def
on_ready
():
...
@@ -52,30 +56,33 @@ async def on_ready():
...
@@ -52,30 +56,33 @@ async def on_ready():
print
(
f
' -> Channel: #
{
channel
.
name
}
'
)
print
(
f
' -> Channel: #
{
channel
.
name
}
'
)
async
for
message
in
channel
.
history
(
limit
=
None
):
async
for
message
in
channel
.
history
(
limit
=
None
):
ts_safe
=
_safe_filename
(
message
.
created_at
.
isoformat
())
ts_safe
=
_safe_filename
(
message
.
created_at
.
isoformat
())
message_file
=
MESSAGES_DIR
/
f
"
{
message
.
id
}
_
{
ts_safe
}
.json"
file_name
=
f
"
{
message
.
id
}
_
{
ts_safe
}
"
meta_file
=
META_DIR
/
f
"
{
file_name
}
.txt.json"
message_file
=
DATA_DIR
/
f
"
{
file_name
}
.txt"
if
me
ssage
_file
.
exists
():
if
me
ta
_file
.
exists
():
with
open
(
me
ssage
_file
,
'r'
,
encoding
=
'utf-8'
)
as
f
:
with
open
(
me
ta
_file
,
'r'
,
encoding
=
'utf-8'
)
as
f
:
me
ssage
_data
=
json
.
load
(
f
)
me
ta
_data
=
json
.
load
(
f
)
else
:
else
:
me
ssage
_data
=
{
me
ta
_data
=
{
"message_id"
:
str
(
message
.
id
),
"message_id"
:
str
(
message
.
id
),
"user_id"
:
str
(
message
.
author
.
id
),
"user_id"
:
str
(
message
.
author
.
id
),
"text"
:
message
.
content
,
"text"
:
message
.
content
,
"reactions_history"
:
[],
"reactions_history"
:
[],
"links"
:
re
.
findall
(
URL_REGEX
,
message
.
content
)
"links"
:
re
.
findall
(
URL_REGEX
,
message
.
content
)
}
}
save_text
(
message
.
content
,
message_file
)
# Ensure reactions_history exists
# Ensure reactions_history exists
me
ssage
_data
.
setdefault
(
"reactions_history"
,
[])
me
ta
_data
.
setdefault
(
"reactions_history"
,
[])
current_emojis
=
[
str
(
reaction
.
emoji
)
for
reaction
in
message
.
reactions
]
current_emojis
=
[
str
(
reaction
.
emoji
)
for
reaction
in
message
.
reactions
]
me
ssage
_data
[
"reactions_history"
].
append
({
me
ta
_data
[
"reactions_history"
].
append
({
"timestamp"
:
str
(
message
.
created_at
.
isoformat
()),
"timestamp"
:
str
(
message
.
created_at
.
isoformat
()),
"emojis"
:
current_emojis
"emojis"
:
current_emojis
})
})
await
save_json_file_async
(
me
ssage
_data
,
me
ssage
_file
)
await
save_json_file_async
(
me
ta
_data
,
me
ta
_file
)
except
discord
.
Forbidden
:
except
discord
.
Forbidden
:
print
(
f
' ⚠️ No permission to read #
{
channel
.
name
}
'
)
print
(
f
' ⚠️ No permission to read #
{
channel
.
name
}
'
)
except
discord
.
HTTPException
as
e
:
except
discord
.
HTTPException
as
e
:
...
@@ -90,7 +97,9 @@ async def on_message(message: discord.Message):
...
@@ -90,7 +97,9 @@ async def on_message(message: discord.Message):
return
return
ts_safe
=
_safe_filename
(
message
.
created_at
.
isoformat
())
ts_safe
=
_safe_filename
(
message
.
created_at
.
isoformat
())
message_file
=
MESSAGES_DIR
/
f
"
{
message
.
id
}
_
{
ts_safe
}
.json"
file_name
=
f
"
{
message
.
id
}
_
{
ts_safe
}
"
meta_file
=
META_DIR
/
f
"
{
file_name
}
.txt.json"
message_file
=
DATA_DIR
/
f
"
{
file_name
}
.txt"
message_data
=
{
message_data
=
{
"message_id"
:
str
(
message
.
id
),
"message_id"
:
str
(
message
.
id
),
...
@@ -99,19 +108,19 @@ async def on_message(message: discord.Message):
...
@@ -99,19 +108,19 @@ async def on_message(message: discord.Message):
"reactions_history"
:
[],
"reactions_history"
:
[],
"links"
:
re
.
findall
(
URL_REGEX
,
message
.
content
)
"links"
:
re
.
findall
(
URL_REGEX
,
message
.
content
)
}
}
save_text
(
message
.
content
,
message_file
)
await
save_json_file_async
(
message_data
,
me
ssage
_file
)
await
save_json_file_async
(
message_data
,
me
ta
_file
)
print
(
f
'💬
{
message
.
author
}
said:
{
message
.
content
}
(saved to
{
message_file
}
)'
)
print
(
f
'💬
{
message
.
author
}
said:
{
message
.
content
}
(saved to
{
message_file
}
)'
)
# === Reaction events ===
# === Reaction events ===
async
def
update_reaction_history
(
message_id
:
str
,
emoji
:
str
,
user_id
:
str
,
action
:
str
,
timestamp
:
str
):
async
def
update_reaction_history
(
message_id
:
str
,
emoji
:
str
,
user_id
:
str
,
action
:
str
,
timestamp
:
str
):
# Find the message file (support historic messages)
# Find the message file (support historic messages)
me
ssage
_file
s
=
list
(
ME
SSAGES
_DIR
.
glob
(
f
"
{
message_id
}
_*.json"
))
me
ta
_file
=
list
(
ME
TA
_DIR
.
glob
(
f
"
{
message_id
}
_*.json"
))
if
not
me
ssage
_file
s
:
if
not
me
ta
_file
:
return
return
me
ssage
_file
=
me
ssage
_file
s
[
0
]
me
ta
_file
=
me
ta
_file
[
0
]
with
open
(
me
ssage
_file
,
'r'
,
encoding
=
'utf-8'
)
as
f
:
with
open
(
me
ta
_file
,
'r'
,
encoding
=
'utf-8'
)
as
f
:
message_data
=
json
.
load
(
f
)
message_data
=
json
.
load
(
f
)
message_data
.
setdefault
(
"reactions_history"
,
[])
message_data
.
setdefault
(
"reactions_history"
,
[])
...
@@ -125,7 +134,7 @@ async def update_reaction_history(message_id: str, emoji: str, user_id: str, act
...
@@ -125,7 +134,7 @@ async def update_reaction_history(message_id: str, emoji: str, user_id: str, act
message_data
[
"reactions_history"
].
append
(
entry
)
message_data
[
"reactions_history"
].
append
(
entry
)
await
save_json_file_async
(
message_data
,
me
ssage
_file
)
await
save_json_file_async
(
message_data
,
me
ta
_file
)
@
client
.
event
@
client
.
event
async
def
on_raw_reaction_add
(
payload
:
discord
.
RawReactionActionEvent
):
async
def
on_raw_reaction_add
(
payload
:
discord
.
RawReactionActionEvent
):
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment