diff --git a/.github/workflows/load-check.yml b/.github/workflows/load-check.yml index 625729b513..58530f95ca 100644 --- a/.github/workflows/load-check.yml +++ b/.github/workflows/load-check.yml @@ -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 diff --git a/PRIVACY.md b/PRIVACY.md index a93a104b8d..63bca849f1 100644 --- a/PRIVACY.md +++ b/PRIVACY.md @@ -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 @@ -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. @@ -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). @@ -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`. diff --git a/bot.py b/bot.py index 5c53e7ce39..cf9a323879 100644 --- a/bot.py +++ b/bot.py @@ -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 @@ -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) diff --git a/core/config.py b/core/config.py index 626011bf03..4ab3dc801d 100644 --- a/core/config.py +++ b/core/config.py @@ -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"} @@ -212,7 +210,6 @@ class ConfigManager: "confirm_thread_creation", "use_regex_autotrigger", "enable_plugins", - "data_collection", "enable_eval", "disable_autoupdates", "disable_updates",