Skip to content

Commit

Permalink
Remove data collection
Browse files Browse the repository at this point in the history
  • Loading branch information
raidensakura committed Jun 23, 2024
1 parent 2b6d777 commit 81c27f9
Show file tree
Hide file tree
Showing 4 changed files with 8 additions and 89 deletions.
1 change: 0 additions & 1 deletion .github/workflows/load-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ jobs:
LOG_URL: https://domain.example
GUILD_ID: "1100011945207271494"
OWNERS: "243316261264556032,505386507440488458"
DATA_COLLECTION: off
LOG_LEVEL: DEBUG

- name: Save Modmail output as Artifact
Expand Down
49 changes: 8 additions & 41 deletions PRIVACY.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,16 @@
# Privacy Statement

Hey, we are the lead developers of Modmail bot. This is a look into the data we collect, the data you collect, the data other parties collect, and what can be done about any of this data.
> **Disclaimer**: None of us are lawyers. We are just trying to be more transparent
Hey, we are the lead developers of Modmail bot. This is a look into the data you collect, the data other parties collect, and what can be done about any of this data.
> **Disclaimer**: None of us are lawyers. We are just trying to be more transparent.
This version of Modmail is a fork, and this privacy policy is a fork of the original Modmail privacy policy.
All telemetry and data collection has been removed from this fork.

**Plugins may collect additional data**. Please check with the plugin developer for more information.

### TL;DR

Yes, we collect some data to keep us happy. You collect some data to keep the bot functioning. External services also collect some data that is out of our control.
You collect some data to keep the bot functioning. External services also collect some data that is out of our control.

## Interpretation

Expand All @@ -18,38 +23,6 @@ Yes, we collect some data to keep us happy. You collect some data to keep the bo
- Database: A location where data is stored, hosted by the bot owner. The following types of database are currently supported: [MongoDB](#MongoDB).
- Logviewer: A webserver hosted by the bot owner.

## The Data We Collect

No data is being collected unless someone decides to host the bot and the bot is kept online.

The Modmail Team collect some metadata to keep us updated on the number of instances that are making use of the bot and know what features we should focus on. The following is a list of data that we collect:
- Bot ID
- Bot username and discriminator
- Bot avatar URL
- Main guild ID
- Main guild name
- Main guild member count
- Bot uptime
- Bot latency
- Bot version
- Whether the bot is selfhosted

No tokens/passwords/private data is ever being collected or sent to our servers.

This metadata is sent to our centralised servers every hour that the bot is up and can be viewed in the bot logs when the `log_level` is set to `DEBUG`.

As our bot is completely open-source, the part that details this behaviour is located in `bot.py > ModmailBot > post_metadata`.

We assure you that the data is not being sold to anybody.

### Opting out

The bot owner can opt out of this data collection by setting `data_collection` to `off` within the configuration variables or the `.env` file.

### Data deletion

Data can be deleted with a request in a DM to our [support server](https://discord.gg/etJNHCQ)'s Modmail bot.

## The Data You Collect

When using the bot, the bot can collect various bits of user data to ensure that the bot can run smoothly.
Expand Down Expand Up @@ -99,11 +72,6 @@ If you wish to opt out of any of this data collection, please view their own pri

- [Discord Privacy Policy](https://discord.com/privacy)

### Heroku

- [Heroku Security](https://www.heroku.com/policy/security)
- [Salesforce Privacy Policy](https://www.salesforce.com/company/privacy/).

### MongoDB

- [MongoDB Privacy Policy](https://www.mongodb.com/legal/privacy-policy).
Expand All @@ -117,6 +85,5 @@ If you wish to opt out of any of this data collection, please view their own pri
For a maximum privacy setup, we recommend the following hosting procedure. We have included links to various help articles for each relevant step. We will not provide support for such a procedure.
- [Creating a local mongodb instance](https://zellwk.com/blog/local-mongodb/)
- [Hosting Modmail on your personal computer](https://docs.modmail.dev/)
- Ensuring `data_collection` is set to `no` in the `.env` file.
- [Opt out of discord data collection](https://support.discord.com/hc/en-us/articles/360004109911-Data-Privacy-Controls)
- Do not use any plugins, setting `enable_plugins` to `no`.
44 changes: 0 additions & 44 deletions bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -632,7 +632,6 @@ async def on_ready(self):
)
logger.warning("If the external servers are valid, you may ignore this message.")

self.post_metadata.start()
self.autoupdate.start()
self.log_expiry.start()
self._started = True
Expand Down Expand Up @@ -1588,49 +1587,6 @@ async def on_command_error(
else:
logger.error("Unexpected exception:", exc_info=exception)

@tasks.loop(hours=1)
async def post_metadata(self):
info = await self.application_info()

delta = discord.utils.utcnow() - self.start_time
data = {
"bot_id": self.user.id,
"bot_name": str(self.user),
"avatar_url": self.user.display_avatar.url,
"guild_id": self.guild_id,
"guild_name": self.guild.name,
"member_count": len(self.guild.members),
"uptime": delta.total_seconds(),
"latency": f"{self.ws.latency * 1000:.4f}",
"version": f"{self.version} on raidensakura's fork",
"selfhosted": True,
"last_updated": str(discord.utils.utcnow()),
}

if info.team is not None:
data.update(
{
"owner_name": info.team.owner.name if info.team.owner is not None else "No Owner",
"owner_id": info.team.owner_id,
"team": True,
}
)
else:
data.update({"owner_name": info.owner.name, "owner_id": info.owner.id, "team": False})

async with self.session.post("https://api.modmail.dev/metadata", json=data):
logger.debug("Uploading metadata to Modmail server.")

@post_metadata.before_loop
async def before_post_metadata(self):
await self.wait_for_connected()
if not self.config.get("data_collection") or not self.guild:
self.post_metadata.cancel()
return

logger.debug("Starting metadata loop.")
logger.line("debug")

@tasks.loop(hours=1)
async def autoupdate(self):
changelog = await Changelog.from_url(self)
Expand Down
3 changes: 0 additions & 3 deletions core/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -181,8 +181,6 @@ class ConfigManager:
"stream_log_format": "plain",
"file_log_format": "plain",
"discord_log_level": "INFO",
# data collection
"data_collection": True,
}

colors = {"mod_color", "recipient_color", "main_color", "error_color"}
Expand Down Expand Up @@ -212,7 +210,6 @@ class ConfigManager:
"confirm_thread_creation",
"use_regex_autotrigger",
"enable_plugins",
"data_collection",
"enable_eval",
"disable_autoupdates",
"disable_updates",
Expand Down

0 comments on commit 81c27f9

Please sign in to comment.