mirror of
https://github.com/alterware/aw-bot.git
synced 2025-12-11 12:07:50 +00:00
feat: MongoDB
This commit is contained in:
@@ -11,7 +11,6 @@ COPY requirements.txt .
|
|||||||
RUN /bot-env/bin/pip install --no-cache-dir -r requirements.txt
|
RUN /bot-env/bin/pip install --no-cache-dir -r requirements.txt
|
||||||
|
|
||||||
COPY bot /aw-bot/bot
|
COPY bot /aw-bot/bot
|
||||||
COPY chat /aw-bot/chat
|
|
||||||
COPY database /aw-bot/database
|
COPY database /aw-bot/database
|
||||||
COPY sounds /aw-bot/sounds
|
COPY sounds /aw-bot/sounds
|
||||||
COPY aw.py .
|
COPY aw.py .
|
||||||
@@ -26,6 +25,8 @@ ENV DISCOURSE_USERNAME=""
|
|||||||
# Where the database will be stored
|
# Where the database will be stored
|
||||||
ENV BOT_DATA_DIR=""
|
ENV BOT_DATA_DIR=""
|
||||||
|
|
||||||
|
ENV MONGO_URI=""
|
||||||
|
|
||||||
# Accept build arguments for metadata
|
# Accept build arguments for metadata
|
||||||
ARG BUILD_DATE=""
|
ARG BUILD_DATE=""
|
||||||
ARG GIT_TAG=""
|
ARG GIT_TAG=""
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
import csv
|
|
||||||
import os
|
import os
|
||||||
import glob
|
|
||||||
|
|
||||||
from bot.log import logger
|
from bot.log import logger
|
||||||
from database import get_patterns
|
from database import get_patterns
|
||||||
|
|
||||||
|
from pymongo import MongoClient
|
||||||
|
|
||||||
|
MONGO_URI = os.getenv("MONGO_URI")
|
||||||
|
|
||||||
message_patterns = get_patterns()
|
message_patterns = get_patterns()
|
||||||
|
|
||||||
|
|
||||||
@@ -14,61 +15,55 @@ def update_patterns(regex: str, response: str):
|
|||||||
logger.info(f"Pattern added in memory: {regex}")
|
logger.info(f"Pattern added in memory: {regex}")
|
||||||
|
|
||||||
|
|
||||||
def load_chat_messages_from_disk(csv_path="chat/chat_messages_blue.csv"):
|
def load_chat_messages_from_db(
|
||||||
|
mongo_uri="mongodb://localhost:27017",
|
||||||
|
database="discord_bot",
|
||||||
|
collection="messages",
|
||||||
|
):
|
||||||
"""
|
"""
|
||||||
Loads all messages from the given CSV file.
|
Loads all chat messages from MongoDB.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
csv_path (str): Path to the CSV file.
|
mongo_uri (str): MongoDB connection URI
|
||||||
|
database (str): Name of the MongoDB database
|
||||||
|
collection (str): Name of the collection
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
list: List of message strings.
|
list: list of message strings
|
||||||
"""
|
"""
|
||||||
messages = []
|
try:
|
||||||
if not os.path.exists(csv_path):
|
client = MongoClient(mongo_uri)
|
||||||
logger.info(f"CSV file not found: {csv_path}")
|
db = client[database]
|
||||||
return messages
|
col = db[collection]
|
||||||
|
|
||||||
with open(csv_path, newline="", encoding="utf-8") as csvfile:
|
logger.debug(
|
||||||
reader = csv.DictReader(csvfile)
|
f"Connecting to MongoDB at {mongo_uri}, DB='{database}', Collection='{collection}'"
|
||||||
for row in reader:
|
|
||||||
msg = row.get("Message")
|
|
||||||
if msg:
|
|
||||||
messages.append(msg)
|
|
||||||
return messages
|
|
||||||
|
|
||||||
|
|
||||||
def load_chat_messages():
|
|
||||||
"""
|
|
||||||
Loads and combines chat messages from all CSV files in the chat folder.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
list: Combined list of all message strings from all CSV files.
|
|
||||||
"""
|
|
||||||
messages = []
|
|
||||||
|
|
||||||
# Find all CSV files in the chat folder
|
|
||||||
csv_files = glob.glob("chat/*.csv")
|
|
||||||
|
|
||||||
if not csv_files:
|
|
||||||
logger.error("No CSV files found in chat folder")
|
|
||||||
return messages
|
|
||||||
|
|
||||||
logger.info(
|
|
||||||
f"Found {len(csv_files)} CSV files: {[os.path.basename(f) for f in csv_files]}"
|
|
||||||
)
|
|
||||||
|
|
||||||
# Load messages from each CSV file
|
|
||||||
for csv_file in csv_files:
|
|
||||||
file_messages = load_chat_messages_from_disk(csv_file)
|
|
||||||
messages.extend(file_messages)
|
|
||||||
logger.info(
|
|
||||||
f"Loaded {len(file_messages)} messages from {os.path.basename(csv_file)}"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
logger.info(f"Total messages loaded: {len(messages)}")
|
cursor = col.find({}, {"message": 1})
|
||||||
|
messages = [doc["message"] for doc in cursor if "message" in doc]
|
||||||
|
|
||||||
|
logger.info(f"Loaded {len(messages)} messages from MongoDB")
|
||||||
|
|
||||||
|
return messages
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Failed to load messages from MongoDB: {e}")
|
||||||
|
return []
|
||||||
|
|
||||||
|
|
||||||
|
def load_mongodb():
|
||||||
|
messages = []
|
||||||
|
|
||||||
|
if not MONGO_URI:
|
||||||
|
logger.error("MONGO_URI is not set. Please contact the administrator.")
|
||||||
|
return
|
||||||
|
|
||||||
|
messages = load_chat_messages_from_db(MONGO_URI)
|
||||||
|
if not messages:
|
||||||
|
logger.warning("messages collection is empty after loading from MongoDB!")
|
||||||
|
|
||||||
return messages
|
return messages
|
||||||
|
|
||||||
|
|
||||||
schizo_messages = load_chat_messages()
|
schizo_messages = load_mongodb()
|
||||||
|
|||||||
121
chat/LICENSE
121
chat/LICENSE
@@ -1,121 +0,0 @@
|
|||||||
Creative Commons Legal Code
|
|
||||||
|
|
||||||
CC0 1.0 Universal
|
|
||||||
|
|
||||||
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
|
|
||||||
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
|
|
||||||
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
|
|
||||||
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
|
|
||||||
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
|
|
||||||
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
|
|
||||||
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
|
|
||||||
HEREUNDER.
|
|
||||||
|
|
||||||
Statement of Purpose
|
|
||||||
|
|
||||||
The laws of most jurisdictions throughout the world automatically confer
|
|
||||||
exclusive Copyright and Related Rights (defined below) upon the creator
|
|
||||||
and subsequent owner(s) (each and all, an "owner") of an original work of
|
|
||||||
authorship and/or a database (each, a "Work").
|
|
||||||
|
|
||||||
Certain owners wish to permanently relinquish those rights to a Work for
|
|
||||||
the purpose of contributing to a commons of creative, cultural and
|
|
||||||
scientific works ("Commons") that the public can reliably and without fear
|
|
||||||
of later claims of infringement build upon, modify, incorporate in other
|
|
||||||
works, reuse and redistribute as freely as possible in any form whatsoever
|
|
||||||
and for any purposes, including without limitation commercial purposes.
|
|
||||||
These owners may contribute to the Commons to promote the ideal of a free
|
|
||||||
culture and the further production of creative, cultural and scientific
|
|
||||||
works, or to gain reputation or greater distribution for their Work in
|
|
||||||
part through the use and efforts of others.
|
|
||||||
|
|
||||||
For these and/or other purposes and motivations, and without any
|
|
||||||
expectation of additional consideration or compensation, the person
|
|
||||||
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
|
|
||||||
is an owner of Copyright and Related Rights in the Work, voluntarily
|
|
||||||
elects to apply CC0 to the Work and publicly distribute the Work under its
|
|
||||||
terms, with knowledge of his or her Copyright and Related Rights in the
|
|
||||||
Work and the meaning and intended legal effect of CC0 on those rights.
|
|
||||||
|
|
||||||
1. Copyright and Related Rights. A Work made available under CC0 may be
|
|
||||||
protected by copyright and related or neighboring rights ("Copyright and
|
|
||||||
Related Rights"). Copyright and Related Rights include, but are not
|
|
||||||
limited to, the following:
|
|
||||||
|
|
||||||
i. the right to reproduce, adapt, distribute, perform, display,
|
|
||||||
communicate, and translate a Work;
|
|
||||||
ii. moral rights retained by the original author(s) and/or performer(s);
|
|
||||||
iii. publicity and privacy rights pertaining to a person's image or
|
|
||||||
likeness depicted in a Work;
|
|
||||||
iv. rights protecting against unfair competition in regards to a Work,
|
|
||||||
subject to the limitations in paragraph 4(a), below;
|
|
||||||
v. rights protecting the extraction, dissemination, use and reuse of data
|
|
||||||
in a Work;
|
|
||||||
vi. database rights (such as those arising under Directive 96/9/EC of the
|
|
||||||
European Parliament and of the Council of 11 March 1996 on the legal
|
|
||||||
protection of databases, and under any national implementation
|
|
||||||
thereof, including any amended or successor version of such
|
|
||||||
directive); and
|
|
||||||
vii. other similar, equivalent or corresponding rights throughout the
|
|
||||||
world based on applicable law or treaty, and any national
|
|
||||||
implementations thereof.
|
|
||||||
|
|
||||||
2. Waiver. To the greatest extent permitted by, but not in contravention
|
|
||||||
of, applicable law, Affirmer hereby overtly, fully, permanently,
|
|
||||||
irrevocably and unconditionally waives, abandons, and surrenders all of
|
|
||||||
Affirmer's Copyright and Related Rights and associated claims and causes
|
|
||||||
of action, whether now known or unknown (including existing as well as
|
|
||||||
future claims and causes of action), in the Work (i) in all territories
|
|
||||||
worldwide, (ii) for the maximum duration provided by applicable law or
|
|
||||||
treaty (including future time extensions), (iii) in any current or future
|
|
||||||
medium and for any number of copies, and (iv) for any purpose whatsoever,
|
|
||||||
including without limitation commercial, advertising or promotional
|
|
||||||
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
|
|
||||||
member of the public at large and to the detriment of Affirmer's heirs and
|
|
||||||
successors, fully intending that such Waiver shall not be subject to
|
|
||||||
revocation, rescission, cancellation, termination, or any other legal or
|
|
||||||
equitable action to disrupt the quiet enjoyment of the Work by the public
|
|
||||||
as contemplated by Affirmer's express Statement of Purpose.
|
|
||||||
|
|
||||||
3. Public License Fallback. Should any part of the Waiver for any reason
|
|
||||||
be judged legally invalid or ineffective under applicable law, then the
|
|
||||||
Waiver shall be preserved to the maximum extent permitted taking into
|
|
||||||
account Affirmer's express Statement of Purpose. In addition, to the
|
|
||||||
extent the Waiver is so judged Affirmer hereby grants to each affected
|
|
||||||
person a royalty-free, non transferable, non sublicensable, non exclusive,
|
|
||||||
irrevocable and unconditional license to exercise Affirmer's Copyright and
|
|
||||||
Related Rights in the Work (i) in all territories worldwide, (ii) for the
|
|
||||||
maximum duration provided by applicable law or treaty (including future
|
|
||||||
time extensions), (iii) in any current or future medium and for any number
|
|
||||||
of copies, and (iv) for any purpose whatsoever, including without
|
|
||||||
limitation commercial, advertising or promotional purposes (the
|
|
||||||
"License"). The License shall be deemed effective as of the date CC0 was
|
|
||||||
applied by Affirmer to the Work. Should any part of the License for any
|
|
||||||
reason be judged legally invalid or ineffective under applicable law, such
|
|
||||||
partial invalidity or ineffectiveness shall not invalidate the remainder
|
|
||||||
of the License, and in such case Affirmer hereby affirms that he or she
|
|
||||||
will not (i) exercise any of his or her remaining Copyright and Related
|
|
||||||
Rights in the Work or (ii) assert any associated claims and causes of
|
|
||||||
action with respect to the Work, in either case contrary to Affirmer's
|
|
||||||
express Statement of Purpose.
|
|
||||||
|
|
||||||
4. Limitations and Disclaimers.
|
|
||||||
|
|
||||||
a. No trademark or patent rights held by Affirmer are waived, abandoned,
|
|
||||||
surrendered, licensed or otherwise affected by this document.
|
|
||||||
b. Affirmer offers the Work as-is and makes no representations or
|
|
||||||
warranties of any kind concerning the Work, express, implied,
|
|
||||||
statutory or otherwise, including without limitation warranties of
|
|
||||||
title, merchantability, fitness for a particular purpose, non
|
|
||||||
infringement, or the absence of latent or other defects, accuracy, or
|
|
||||||
the present or absence of errors, whether or not discoverable, all to
|
|
||||||
the greatest extent permissible under applicable law.
|
|
||||||
c. Affirmer disclaims responsibility for clearing rights of other persons
|
|
||||||
that may apply to the Work or any use thereof, including without
|
|
||||||
limitation any person's Copyright and Related Rights in the Work.
|
|
||||||
Further, Affirmer disclaims responsibility for obtaining any necessary
|
|
||||||
consents, permissions or other rights required for any use of the
|
|
||||||
Work.
|
|
||||||
d. Affirmer understands and acknowledges that Creative Commons is not a
|
|
||||||
party to this document and has no duty or obligation with respect to
|
|
||||||
this CC0 or use of the Work.
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
# Game Chat Text Corpus
|
|
||||||
|
|
||||||
## Overview
|
|
||||||
|
|
||||||
This folder contains a collection of text data sourced from public game chat channels in various online multiplayer games.
|
|
||||||
|
|
||||||
## Data Collection
|
|
||||||
|
|
||||||
The text provided in the CSV file was collected **with the expressed consent of server owners** and comprises messages written by players in public game chat environments.
|
|
||||||
|
|
||||||
## Content Warning
|
|
||||||
|
|
||||||
**WARNING: The files contain explicit language including obscenity and profanity.**
|
|
||||||
|
|
||||||
The dataset reflects unfiltered player communications and may include offensive, inappropriate, or otherwise objectionable content. Viewer discretion is advised.
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
This work is licensed under the **CC0 1.0 Universal (CC0 1.0) Public Domain Dedication**.
|
|
||||||
|
|
||||||
For complete license details, please see the full text in [LICENSE](LICENSE).
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
By using this dataset, you acknowledge that you have read and understood the content warning and agree to the terms of the CC0 1.0 Universal license.
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -5,3 +5,4 @@ python-dotenv
|
|||||||
pynacl
|
pynacl
|
||||||
google-genai
|
google-genai
|
||||||
beautifulsoup4
|
beautifulsoup4
|
||||||
|
pymongo
|
||||||
|
|||||||
Reference in New Issue
Block a user