From 4f9c088f6b0458eb0ebb52ef899cdfdc57f2c43c Mon Sep 17 00:00:00 2001 From: Boris Muratov <8bee278@gmail.com> Date: Sun, 7 Mar 2021 00:59:41 +0200 Subject: Add route to get a member's data for helper review Added route for getting a user's join date, total messages, and top 3 channels by activity. This information will be used to auto-review nominees. --- pydis_site/apps/api/models/bot/metricity.py | 39 +++++++++++++++++++++++++++++ pydis_site/apps/api/viewsets/bot/user.py | 15 +++++++++++ 2 files changed, 54 insertions(+) (limited to 'pydis_site') diff --git a/pydis_site/apps/api/models/bot/metricity.py b/pydis_site/apps/api/models/bot/metricity.py index cae630f1..af5e1f3b 100644 --- a/pydis_site/apps/api/models/bot/metricity.py +++ b/pydis_site/apps/api/models/bot/metricity.py @@ -89,3 +89,42 @@ class Metricity: raise NotFound() return values[0] + + def top_channel_activity(self, user_id: str) -> int: + """ + Query the top three channels in which the user is most active. + + Help channels are grouped under "the help channels", + and off-topic channels are grouped under "off-topic". + """ + self.cursor.execute( + """ + SELECT + CASE + WHEN channels.name ILIKE 'help-%%' THEN 'the help channels' + WHEN channels.name ILIKE 'ot%%' THEN 'off-topic' + ELSE channels.name + END, + COUNT(1) + FROM + messages + LEFT JOIN channels ON channels.id = messages.channel_id + WHERE + author_id = '%s' + GROUP BY + 1 + ORDER BY + 2 DESC + LIMIT + 3; + """, + [user_id] + ) + + values = self.cursor.fetchall() + print(values) + + if not values: + raise NotFound() + + return values diff --git a/pydis_site/apps/api/viewsets/bot/user.py b/pydis_site/apps/api/viewsets/bot/user.py index 829e2694..5e1f8775 100644 --- a/pydis_site/apps/api/viewsets/bot/user.py +++ b/pydis_site/apps/api/viewsets/bot/user.py @@ -262,3 +262,18 @@ class UserViewSet(ModelViewSet): except NotFound: return Response(dict(detail="User not found in metricity"), status=status.HTTP_404_NOT_FOUND) + + @action(detail=True) + def metricity_review_data(self, request: Request, pk: str = None) -> Response: + """Request handler for metricity_review_data endpoint.""" + user = self.get_object() + + with Metricity() as metricity: + try: + data = metricity.user(user.id) + data["total_messages"] = metricity.total_messages(user.id) + data["top_channel_activity"] = metricity.top_channel_activity(user.id) + return Response(data, status=status.HTTP_200_OK) + except NotFound: + return Response(dict(detail="User not found in metricity"), + status=status.HTTP_404_NOT_FOUND) -- cgit v1.2.3 From d2690bbedb5f5ef221cbfaa42ad78ff8fcc263f2 Mon Sep 17 00:00:00 2001 From: Boris Muratov <8bee278@gmail.com> Date: Sun, 7 Mar 2021 01:05:09 +0200 Subject: Amend top_channel_activity return type --- pydis_site/apps/api/models/bot/metricity.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'pydis_site') diff --git a/pydis_site/apps/api/models/bot/metricity.py b/pydis_site/apps/api/models/bot/metricity.py index af5e1f3b..29a43513 100644 --- a/pydis_site/apps/api/models/bot/metricity.py +++ b/pydis_site/apps/api/models/bot/metricity.py @@ -1,3 +1,5 @@ +from typing import List, Tuple + from django.db import connections BLOCK_INTERVAL = 10 * 60 # 10 minute blocks @@ -90,7 +92,7 @@ class Metricity: return values[0] - def top_channel_activity(self, user_id: str) -> int: + def top_channel_activity(self, user_id: str) -> List[Tuple[str, int]]: """ Query the top three channels in which the user is most active. -- cgit v1.2.3 From 3468d12b0c893bfa951e7baa85ada6a8716e5aef Mon Sep 17 00:00:00 2001 From: Boris Muratov <8bee278@gmail.com> Date: Sun, 7 Mar 2021 01:39:12 +0200 Subject: Added test for metricity-review-data --- pydis_site/apps/api/tests/test_users.py | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) (limited to 'pydis_site') diff --git a/pydis_site/apps/api/tests/test_users.py b/pydis_site/apps/api/tests/test_users.py index 69bbfefc..5851ac11 100644 --- a/pydis_site/apps/api/tests/test_users.py +++ b/pydis_site/apps/api/tests/test_users.py @@ -410,7 +410,7 @@ class UserMetricityTests(APISubdomainTestCase): joined_at = "foo" total_messages = 1 total_blocks = 1 - self.mock_metricity_user(joined_at, total_messages, total_blocks) + self.mock_metricity_user(joined_at, total_messages, total_blocks, []) # When url = reverse('bot:user-metricity-data', args=[0], host='api') @@ -442,7 +442,7 @@ class UserMetricityTests(APISubdomainTestCase): {'exception': ObjectDoesNotExist, 'voice_banned': False}, ] - self.mock_metricity_user("foo", 1, 1) + self.mock_metricity_user("foo", 1, 1, [["bar", 1]]) for case in cases: with self.subTest(exception=case['exception'], voice_banned=case['voice_banned']): @@ -455,7 +455,27 @@ class UserMetricityTests(APISubdomainTestCase): self.assertEqual(response.status_code, 200) self.assertEqual(response.json()["voice_banned"], case["voice_banned"]) - def mock_metricity_user(self, joined_at, total_messages, total_blocks): + def test_metricity_review_data(self): + # Given + joined_at = "foo" + total_messages = 10 + total_blocks = 1 + channel_activity = [["bar", 4], ["buzz", 6]] + self.mock_metricity_user(joined_at, total_messages, total_blocks, channel_activity) + + # When + url = reverse('bot:user-metricity-review-data', args=[0], host='api') + response = self.client.get(url) + + # Then + self.assertEqual(response.status_code, 200) + self.assertEqual(response.json(), { + "joined_at": joined_at, + "top_channel_activity": channel_activity, + "total_messages": total_messages + }) + + def mock_metricity_user(self, joined_at, total_messages, total_blocks, top_channel_activity): patcher = patch("pydis_site.apps.api.viewsets.bot.user.Metricity") self.metricity = patcher.start() self.addCleanup(patcher.stop) @@ -463,6 +483,7 @@ class UserMetricityTests(APISubdomainTestCase): self.metricity.user.return_value = dict(joined_at=joined_at) self.metricity.total_messages.return_value = total_messages self.metricity.total_message_blocks.return_value = total_blocks + self.metricity.top_channel_activity.return_value = top_channel_activity def mock_no_metricity_user(self): patcher = patch("pydis_site.apps.api.viewsets.bot.user.Metricity") @@ -472,3 +493,4 @@ class UserMetricityTests(APISubdomainTestCase): self.metricity.user.side_effect = NotFound() self.metricity.total_messages.side_effect = NotFound() self.metricity.total_message_blocks.side_effect = NotFound() + self.metricity.top_channel_activity.side_effect = NotFound() -- cgit v1.2.3 From 66047f06e5ce060e79e49ef2dfab06475298b070 Mon Sep 17 00:00:00 2001 From: Boris Muratov <8bee278@gmail.com> Date: Sun, 7 Mar 2021 01:46:43 +0200 Subject: Test metricity-review-data when user doesn't exist --- pydis_site/apps/api/tests/test_users.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'pydis_site') diff --git a/pydis_site/apps/api/tests/test_users.py b/pydis_site/apps/api/tests/test_users.py index 5851ac11..2ac06f6b 100644 --- a/pydis_site/apps/api/tests/test_users.py +++ b/pydis_site/apps/api/tests/test_users.py @@ -431,10 +431,13 @@ class UserMetricityTests(APISubdomainTestCase): # When url = reverse('bot:user-metricity-data', args=[0], host='api') - response = self.client.get(url) + response1 = self.client.get(url) + url = reverse('bot:user-metricity-review-data', args=[0], host='api') + response2 = self.client.get(url) # Then - self.assertEqual(response.status_code, 404) + self.assertEqual(response1.status_code, 404) + self.assertEqual(response2.status_code, 404) def test_metricity_voice_banned(self): cases = [ -- cgit v1.2.3 From 07847e959c9b2ac6a79ab38b900abc2d179d0478 Mon Sep 17 00:00:00 2001 From: Boris Muratov <8bee278@gmail.com> Date: Sun, 7 Mar 2021 11:58:30 +0200 Subject: Get rid of stray print Oops. --- pydis_site/apps/api/models/bot/metricity.py | 1 - 1 file changed, 1 deletion(-) (limited to 'pydis_site') diff --git a/pydis_site/apps/api/models/bot/metricity.py b/pydis_site/apps/api/models/bot/metricity.py index 29a43513..7e2a68f2 100644 --- a/pydis_site/apps/api/models/bot/metricity.py +++ b/pydis_site/apps/api/models/bot/metricity.py @@ -124,7 +124,6 @@ class Metricity: ) values = self.cursor.fetchall() - print(values) if not values: raise NotFound() -- cgit v1.2.3 From fdc1be68a90d6ebd9dfe29369bc8a974bcaa8214 Mon Sep 17 00:00:00 2001 From: Boris Muratov <8bee278@gmail.com> Date: Thu, 11 Mar 2021 02:37:44 +0200 Subject: Ignore deleted messaages in message counts Co-authored-by: Joe Banks --- pydis_site/apps/api/models/bot/metricity.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'pydis_site') diff --git a/pydis_site/apps/api/models/bot/metricity.py b/pydis_site/apps/api/models/bot/metricity.py index 7e2a68f2..db975d4e 100644 --- a/pydis_site/apps/api/models/bot/metricity.py +++ b/pydis_site/apps/api/models/bot/metricity.py @@ -112,7 +112,7 @@ class Metricity: messages LEFT JOIN channels ON channels.id = messages.channel_id WHERE - author_id = '%s' + author_id = '%s' AND NOT messages.is_deleted GROUP BY 1 ORDER BY -- cgit v1.2.3 From f4a67489b81f95978912582189cb23afb2169e8e Mon Sep 17 00:00:00 2001 From: Boris Muratov <8bee278@gmail.com> Date: Fri, 12 Mar 2021 15:35:47 +0200 Subject: Document endpoint in viewset docstring --- pydis_site/apps/api/viewsets/bot/user.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'pydis_site') diff --git a/pydis_site/apps/api/viewsets/bot/user.py b/pydis_site/apps/api/viewsets/bot/user.py index 5e1f8775..25722f5a 100644 --- a/pydis_site/apps/api/viewsets/bot/user.py +++ b/pydis_site/apps/api/viewsets/bot/user.py @@ -119,6 +119,22 @@ class UserViewSet(ModelViewSet): - 200: returned on success - 404: if a user with the given `snowflake` could not be found + ### GET /bot/users//metricity_review_data + Gets metricity data for a single user's review by ID. + + #### Response format + >>> { + ... 'joined_at': '2020-08-26T08:09:43.507000', + ... 'top_channel_activity': [['off-topic', 15], + ... ['talent-pool', 4], + ... ['defcon', 2]], + ... 'total_messages': 22 + ... } + + #### Status codes + - 200: returned on success + - 404: if a user with the given `snowflake` could not be found + ### POST /bot/users Adds a single or multiple new users. The roles attached to the user(s) must be roles known by the site. -- cgit v1.2.3 From 9b1b42a4899c0c3f47845def5d152e2bed6c8dd0 Mon Sep 17 00:00:00 2001 From: Boris Muratov <8bee278@gmail.com> Date: Fri, 12 Mar 2021 15:59:11 +0200 Subject: Split test_no_metricity_user to two tests by endpoints --- pydis_site/apps/api/tests/test_users.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'pydis_site') diff --git a/pydis_site/apps/api/tests/test_users.py b/pydis_site/apps/api/tests/test_users.py index 2ac06f6b..c43b916a 100644 --- a/pydis_site/apps/api/tests/test_users.py +++ b/pydis_site/apps/api/tests/test_users.py @@ -431,13 +431,21 @@ class UserMetricityTests(APISubdomainTestCase): # When url = reverse('bot:user-metricity-data', args=[0], host='api') - response1 = self.client.get(url) + response = self.client.get(url) + + # Then + self.assertEqual(response.status_code, 404) + + def test_no_metricity_user_for_review(self): + # Given + self.mock_no_metricity_user() + + # When url = reverse('bot:user-metricity-review-data', args=[0], host='api') - response2 = self.client.get(url) + response = self.client.get(url) # Then - self.assertEqual(response1.status_code, 404) - self.assertEqual(response2.status_code, 404) + self.assertEqual(response.status_code, 404) def test_metricity_voice_banned(self): cases = [ -- cgit v1.2.3 From cd797f801abaff8874e75b1ed093e17f67572a37 Mon Sep 17 00:00:00 2001 From: Boris Muratov <8bee278@gmail.com> Date: Fri, 12 Mar 2021 16:00:14 +0200 Subject: Add case in query for voice chat activity --- pydis_site/apps/api/models/bot/metricity.py | 1 + 1 file changed, 1 insertion(+) (limited to 'pydis_site') diff --git a/pydis_site/apps/api/models/bot/metricity.py b/pydis_site/apps/api/models/bot/metricity.py index db975d4e..5daa5c66 100644 --- a/pydis_site/apps/api/models/bot/metricity.py +++ b/pydis_site/apps/api/models/bot/metricity.py @@ -105,6 +105,7 @@ class Metricity: CASE WHEN channels.name ILIKE 'help-%%' THEN 'the help channels' WHEN channels.name ILIKE 'ot%%' THEN 'off-topic' + WHEN channels.name ILIKE '%%voice%%' THEN 'voice chats' ELSE channels.name END, COUNT(1) -- cgit v1.2.3 From 90c5e62d1c0e8e347d1f16df4849ea942086affe Mon Sep 17 00:00:00 2001 From: Hassan Abouelela <47495861+HassanAbouelela@users.noreply.github.com> Date: Tue, 23 Mar 2021 09:43:32 +0300 Subject: Adds Streamyard Banner To Homepage --- pydis_site/static/images/sponsors/streamyard.png | Bin 0 -> 86678 bytes pydis_site/templates/home/index.html | 3 +++ 2 files changed, 3 insertions(+) create mode 100644 pydis_site/static/images/sponsors/streamyard.png (limited to 'pydis_site') diff --git a/pydis_site/static/images/sponsors/streamyard.png b/pydis_site/static/images/sponsors/streamyard.png new file mode 100644 index 00000000..a1527e8d Binary files /dev/null and b/pydis_site/static/images/sponsors/streamyard.png differ diff --git a/pydis_site/templates/home/index.html b/pydis_site/templates/home/index.html index 04815b7f..c35af2aa 100644 --- a/pydis_site/templates/home/index.html +++ b/pydis_site/templates/home/index.html @@ -204,6 +204,9 @@ Notion + + StreamYard + -- cgit v1.2.3 From 7e05e56d7e650adbaf2e8f552408368d1ff55521 Mon Sep 17 00:00:00 2001 From: Hassan Abouelela <47495861+HassanAbouelela@users.noreply.github.com> Date: Tue, 23 Mar 2021 13:09:46 +0300 Subject: Centers Sponsor Logos Center justifies sponsor logos on the home page to make wrapping look cleaner. --- pydis_site/static/css/home/index.css | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'pydis_site') diff --git a/pydis_site/static/css/home/index.css b/pydis_site/static/css/home/index.css index 58ca8888..106feb7c 100644 --- a/pydis_site/static/css/home/index.css +++ b/pydis_site/static/css/home/index.css @@ -208,7 +208,11 @@ h1 { padding-bottom: 3rem; } +#sponsors .columns { + justify-content: center; +} + #sponsors img { height: 5rem; - margin-right: 2rem; + margin: auto 1rem; } -- cgit v1.2.3 From 20737ab238719ce7a2df78b0ca5101884f28db0d Mon Sep 17 00:00:00 2001 From: Hassan Abouelela <47495861+HassanAbouelela@users.noreply.github.com> Date: Tue, 23 Mar 2021 13:42:14 +0300 Subject: Centers Sponsor Title --- pydis_site/static/css/home/index.css | 2 ++ 1 file changed, 2 insertions(+) (limited to 'pydis_site') diff --git a/pydis_site/static/css/home/index.css b/pydis_site/static/css/home/index.css index 106feb7c..808c0517 100644 --- a/pydis_site/static/css/home/index.css +++ b/pydis_site/static/css/home/index.css @@ -206,6 +206,8 @@ h1 { #sponsors .hero-body { padding-top: 2rem; padding-bottom: 3rem; + + text-align: center; } #sponsors .columns { -- cgit v1.2.3 From c7c571ae404fe6f0ffba53713d86c14090366f0b Mon Sep 17 00:00:00 2001 From: Hassan Abouelela <47495861+HassanAbouelela@users.noreply.github.com> Date: Tue, 23 Mar 2021 13:43:00 +0300 Subject: Reduces The Width Of The Sponsors Tab Reduces the width of the sponsor tab to reduce the chance of one logo ending up on a new line by itself. --- pydis_site/static/css/home/index.css | 2 ++ 1 file changed, 2 insertions(+) (limited to 'pydis_site') diff --git a/pydis_site/static/css/home/index.css b/pydis_site/static/css/home/index.css index 808c0517..6cfbf69f 100644 --- a/pydis_site/static/css/home/index.css +++ b/pydis_site/static/css/home/index.css @@ -212,6 +212,8 @@ h1 { #sponsors .columns { justify-content: center; + margin: auto; + max-width: 80%; } #sponsors img { -- cgit v1.2.3 From c244fea3bc7c9560b3ff5cd4bd40f9e19cf62ae1 Mon Sep 17 00:00:00 2001 From: Leon Sandøy Date: Wed, 24 Mar 2021 22:46:05 +0100 Subject: Remove the 100K user banner. --- pydis_site/static/css/home/index.css | 4 ++++ pydis_site/templates/home/index.html | 8 +------- 2 files changed, 5 insertions(+), 7 deletions(-) (limited to 'pydis_site') diff --git a/pydis_site/static/css/home/index.css b/pydis_site/static/css/home/index.css index 6cfbf69f..ee6f6e4c 100644 --- a/pydis_site/static/css/home/index.css +++ b/pydis_site/static/css/home/index.css @@ -45,6 +45,10 @@ h1 { box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); } +#wave-hero-centered { + margin: auto auto; +} + #wave-hero-right img{ border-radius: 10px; box-shadow: 0 1px 6px rgba(0,0,0,0.16), 0 1px 6px rgba(0,0,0,0.23); diff --git a/pydis_site/templates/home/index.html b/pydis_site/templates/home/index.html index c35af2aa..f3470a83 100644 --- a/pydis_site/templates/home/index.html +++ b/pydis_site/templates/home/index.html @@ -29,7 +29,7 @@
{# Embedded Welcome video #} -
+
- - {# Right side content #} -
- 100K members! -
-
-- cgit v1.2.3 From 80e956971fac63d5198e366ed095d3a699ded7cb Mon Sep 17 00:00:00 2001 From: Leon Sandøy Date: Wed, 24 Mar 2021 22:59:06 +0100 Subject: Update the timeline. Adds recent events, and also cleans up the HTML a bit. --- pydis_site/templates/home/index.html | 4 +- pydis_site/templates/home/timeline.html | 950 +++++++++++++++++++------------- 2 files changed, 564 insertions(+), 390 deletions(-) (limited to 'pydis_site') diff --git a/pydis_site/templates/home/index.html b/pydis_site/templates/home/index.html index f3470a83..67f29e41 100644 --- a/pydis_site/templates/home/index.html +++ b/pydis_site/templates/home/index.html @@ -92,7 +92,7 @@
-
New Timeline!
+
Interactive timeline
@@ -104,7 +104,7 @@

- Start from our humble beginnings to discover the events that made our community what it is today. + Discover the history of our community, and learn about the events that made our community what it is today.

diff --git a/pydis_site/templates/home/timeline.html b/pydis_site/templates/home/timeline.html index ece2e4e5..9f4175b2 100644 --- a/pydis_site/templates/home/timeline.html +++ b/pydis_site/templates/home/timeline.html @@ -3,53 +3,53 @@ {% block title %}Timeline{% endblock %} {% block head %} - - + + {% endblock %} {% block content %} -{% include "base/navbar.html" %} + {% include "base/navbar.html" %} -
+
-
-
- Picture -
+
+
+ Picture +
-
-

Python Discord is created

-

joe becomes one of the owners around 3 days after it - is created, and lemon joins the owner team later in the year, when the community - has around 300 members.

+
+

Python Discord is created

+

joe becomes one of the owners around 3 days after it + is created, and lemon joins the owner team later in the year, when the community + has around 300 members.

-
- Jan 8th, 2017 -
-
+
+ Jan 8th, 2017 +
+
-
-
- -
+
+
+ +
-
-

Python Discord hits 1,000 members

-

Our main source of new users at this point is a post on Reddit that - happens to get very good SEO. We are one of the top 10 search engine hits for the search term - "python discord".

+
+

Python Discord hits 1,000 members

+

Our main source of new users at this point is a post on Reddit that + happens to get very good SEO. We are one of the top 10 search engine hits for the search term + "python discord".

-
- Nov 10th, 2017 -
-
+
+ Nov 10th, 2017 +
+
-
-
- Picture -
+
+
+ Picture +

Our logo is born. Thanks @Aperture!

@@ -57,464 +57,638 @@ src="https://raw.githubusercontent.com/python-discord/branding/main/logos/logo_banner/logo_site_banner.svg">

-
- Feb 3rd, 2018 -
-
+
+ Feb 3rd, 2018 +
+
-
-
- -
+
+
+ +
-
-

PyDis hits 2,000 members; pythondiscord.com and @Python are live

-

The public moderation bot we're using at the time, Rowboat, announces - it will be shutting down. We decide that we'll write our own bot to handle moderation, so that we - can have more control over its features. We also buy a domain and start making a website in Flask. -

+
+

PyDis hits 2,000 members; pythondiscord.com and @Python are live

+

The public moderation bot we're using at the time, Rowboat, announces + it will be shutting down. We decide that we'll write our own bot to handle moderation, so that we + can have more control over its features. We also buy a domain and start making a website in Flask. +

-
- Mar 4th, 2018 -
-
+
+ Mar 4th, 2018 +
+
-
-
- -
+
+
+ +
-
-

First code jam with the theme “snakes”

-

Our very first Code Jam attracts a handful of users who work in random - teams of 2. We ask our participants to write a snake-themed Discord bot. Most of the code written - for this jam still lives on in SeasonalBot, and you can play with it by using the - .snakes command. For more information on this event, see the event page

+
+

First code jam with the theme “snakes”

+

Our very first Code Jam attracts a handful of users who work in random + teams of 2. We ask our participants to write a snake-themed Discord bot. Most of the code written + for this jam still lives on in SeasonalBot, and you can play with it by using the + .snakes command. For more information on this event, see the event page

+ +
+ Mar 23rd, 2018 +
+
+
-
- Mar 23rd, 2018 -
-
+
+
+
-
-
- -
+
+

The privacy policy is created

+

Since data privacy is quite important to us, we create a privacy page + pretty much as soon as our new bot and site starts collecting some data. To this day, we keep our privacy policy up to date with all + changes, and since April 2020 we've started doing monthly data reviews.

+ +
+ May 21st, 2018 +
+
+
-
-

The privacy policy is created

-

Since data privacy is quite important to us, we create a privacy page - pretty much as soon as our new bot and site starts collecting some data. To this day, we keep our privacy policy up to date with all - changes, and since April 2020 we've started doing monthly data reviews.

+
+
+ +
-
- May 21st, 2018 -
-
+
+

Do You Even Python and PyDis merger

+

At this point in time, there are only two serious Python communities on + Discord - Ours, and one called Do You Even Python. We approach the owners of DYEP with a bold + proposal - let's shut down their community, replace it with links to ours, and in return we will let + their staff join our staff. This gives us a big boost in members, and eventually leads to @eivl and + @Mr. Hemlock joining our Admin team

+ +
+ Jun 9th, 2018 +
+
-
-
- -
+
+
+ +
-
-

Do You Even Python and PyDis merger

-

At this point in time, there are only two serious Python communities on - Discord - Ours, and one called Do You Even Python. We approach the owners of DYEP with a bold - proposal - let's shut down their community, replace it with links to ours, and in return we will let - their staff join our staff. This gives us a big boost in members, and eventually leads to @eivl and - @Mr. Hemlock joining our Admin team

+
+

PyDis hits 5,000 members and partners with r/Python

+

As we continue to grow, we approach the r/Python subreddit and ask to + become their official Discord community. They agree, and we become listed in their sidebar, giving + us yet another source of new members.

-
- Jun 9th, 2018 -
-
+
+ Jun 20th, 2018 +
+
-
-
- -
+
+
+ +
-
-

PyDis hits 5,000 members and partners with r/Python

-

As we continue to grow, we approach the r/Python subreddit and ask to - become their official Discord community. They agree, and we become listed in their sidebar, giving - us yet another source of new members.

+
+

PyDis is now partnered with Discord; the vanity URL discord.gg/python is created

+

After being rejected for their Partner program several times, we + finally get approved. The recent partnership with the r/Python subreddit plays a significant role in + qualifying us for this partnership.

-
- Jun 20th, 2018 -
-
+
+ Jul 10th, 2018 +
+
-
-
- -
+
+
+ +
-
-

PyDis is now partnered with Discord; the vanity URL discord.gg/python is created

-

After being rejected for their Partner program several times, we - finally get approved. The recent partnership with the r/Python subreddit plays a significant role in - qualifying us for this partnership.

+
+

First Hacktoberfest PyDis event; @SeasonalBot is created

+

We create a second bot for our community and fill it up with simple, + fun and relatively easy issues. The idea is to create an approachable arena for our members to cut + their open-source teeth on, and to provide lots of help and hand-holding for those who get stuck. + We're training our members to be productive contributors in the open-source ecosystem.

-
- Jul 10th, 2018 -
-
+
+ Oct 1st, 2018 +
+
-
-
- -
+
+
+ +
-
-

First Hacktoberfest PyDis event; @SeasonalBot is created

-

We create a second bot for our community and fill it up with simple, - fun and relatively easy issues. The idea is to create an approachable arena for our members to cut - their open-source teeth on, and to provide lots of help and hand-holding for those who get stuck. - We're training our members to be productive contributors in the open-source ecosystem.

+
+

PyDis hits 10,000 members

+

We partner with RLBot, move from GitLab to GitHub, and start putting + together the first Advent of Code event.

-
- Oct 1st, 2018 -
-
+
+ Nov 24th, 2018 +
+
-
-
- -
+
+
+ +
-
-

PyDis hits 10,000 members

-

We partner with RLBot, move from GitLab to GitHub, and start putting - together the first Advent of Code event.

+
+

django-simple-bulma is released on PyPi

+

Our very first package on PyPI, django-simple-bulma is a package that + sets up the Bulma CSS framework for your Django application and lets you configure everything in + settings.py.

-
- Nov 24th, 2018 -
-
+
+ Dec 19th, 2018 +
+
-
-
- -
+
+
+ +
-
-

django-simple-bulma is released on PyPi

-

Our very first package on PyPI, django-simple-bulma is a package that - sets up the Bulma CSS framework for your Django application and lets you configure everything in - settings.py.

+
+

PyDis hits 15,000 members; the “hot ones special” video is released

+
+ +
+ +
+ Apr 8th, 2019 +
+
+
-
- Dec 19th, 2018 -
-
+
+
+
-
-
- -
+
+

The Django rewrite of pythondiscord.com is now live!

+

The site is getting more and more complex, and it's time for a rewrite. + We decide to go for a different stack, and build a website based on Django, DRF, Bulma and + PostgreSQL.

-
-

PyDis hits 15,000 members; the “hot ones special” video is released

-
- -
+
+ Sep 15, 2019 +
+
+
-
- Apr 8th, 2019 -
-
+
+
+
-
-
- -
+
+

The code of conduct is created

+

Inspired by the Adafruit, Rust and Django communities, an essential + community pillar is created; Our Code of + Conduct.

-
-

The Django rewrite of pythondiscord.com is now live!

-

The site is getting more and more complex, and it's time for a rewrite. - We decide to go for a different stack, and build a website based on Django, DRF, Bulma and - PostgreSQL.

+
+ Oct 26th, 2019 +
+
+
-
- Sep 15, 2019 -
-
+
+
+ Picture
-
-
- -
+
+

Ves Zappa becomes an owner

+

After being a long time active contributor to our projects and the driving + force behind our events, Ves Zappa joined the Owners team alongside joe & lemon.

-
-

The code of conduct is created

-

Inspired by the Adafruit, Rust and Django communities, an essential - community pillar is created; Our Code of - Conduct.

+
+ Sept 22nd, 2019 +
+
+
-
- Oct 26th, 2019 -
-
+
+
+
-
-
- Picture -
+
+

PyDis hits 30,000 members

+

More than tripling in size since the year before, the community hits + 30000 users. At this point, we're probably the largest Python chat community on the planet.

-
-

Ves Zappa becomes an owner

-

After being a long time active contributor to our projects and the driving force behind our events, Ves Zappa joined the Owners team alongside joe & lemon.

+
+ Dec 22nd, 2019 +
+
+
+ +
+
+ +
-
- Sept 22nd, 2019 -
-
+
+

PyDis sixth code jam with the theme “Ancient technology” and the technology Kivy

+

Our Code Jams are becoming an increasingly big deal, and the Kivy core + developers join us to judge the event and help out our members during the event. One of them, + @tshirtman, even joins our staff!

+ +
+ +
+ +
+ Jan 17, 2020 +
+
-
-
- -
+
+
+ +
-
-

PyDis hits 30,000 members

-

More than tripling in size since the year before, the community hits - 30000 users. At this point, we're probably the largest Python chat community on the planet.

+
+

The new help channel system is live

+

We release our dynamic help-channel system, which allows you to claim + your very own help channel instead of fighting over the static help channels. We release a Help Channel Guide to + help our members fully understand how the system works.

-
- Dec 22nd, 2019 -
-
+
+ Apr 5th, 2020 +
+
-
-
- -
+
+
+ +
-
-

PyDis sixth code jam with the theme “Ancient technology” and the technology Kivy

-

Our Code Jams are becoming an increasingly big deal, and the Kivy core - developers join us to judge the event and help out our members during the event. One of them, - @tshirtman, even joins our staff!

+
+

Python Discord hits 40,000 members, and is now bigger than Liechtenstein.

+

+

-
- -
+
+ Apr 14, 2020 +
+
+
-
- Jan 17, 2020 -
-
+
+
+
-
-
- -
+
+

PyDis Game Jam 2020 with the “Three of a Kind” theme and Arcade as the technology

+

The creator of Arcade, Paul Vincent Craven, joins us as a judge. + Several of the Code Jam participants also end up getting involved contributing to the Arcade + repository.

+ +
+ +
+ +
+ Apr 17th, 2020 +
+
+
-
-

The new help channel system is live

-

We release our dynamic help-channel system, which allows you to claim - your very own help channel instead of fighting over the static help channels. We release a Help Channel Guide to - help our members fully understand how the system works.

+
+
+ +
+ +
+

ModMail is now live

+

Having originally planned to write our own ModMail bot from scratch, we + come across an exceptionally good ModMail bot by + kyb3r and decide to just self-host that one instead.

-
- Apr 5th, 2020 -
-
+
+ May 25th, 2020 +
+
-
-
- -
+
+
+ +
-
-

Python Discord hits 40,000 members, and is now bigger than Liechtenstein.

-

-

+
+

Python Discord is now listed on python.org/community

+

After working towards this goal for months, we finally work out an + arrangement with the PSF that allows us to be listed on that most holiest of websites: + https://python.org/. There was much rejoicing.

-
- Apr 14, 2020 -
-
+
+ May 28th, 2020 +
+
-
-
- -
+
+
+ +
-
-

PyDis Game Jam 2020 with the “Three of a Kind” theme and Arcade as the technology

-

The creator of Arcade, Paul Vincent Craven, joins us as a judge. - Several of the Code Jam participants also end up getting involved contributing to the Arcade - repository.

+
+

Python Discord Public Statistics are now live

+

After getting numerous requests to publish beautiful data on member + count and channel use, we create stats.pythondiscord.com for + all to enjoy.

-
- -
+
+ Jun 4th, 2020 +
+
+
-
- Apr 17th, 2020 -
-
+
+
+
-
-
- -
+
+

PyDis summer code jam 2020 with the theme “Early Internet” and Django as the technology

+

Sponsored by the Django Software Foundation and JetBrains, the Summer + Code Jam for 2020 attracts hundreds of participants, and sees the creation of some fantastic + projects. Check them out in our judge stream below:

+ +
+ +
+ +
+ Jul 31st, 2020 +
+
+
-
-

ModMail is now live

-

Having originally planned to write our own ModMail bot from scratch, we - come across an exceptionally good ModMail bot by - kyb3r and decide to just self-host that one instead.

+
+
+ +
-
- May 25th, 2020 -
-
+
+

Python Discord is now the new home of the PyWeek event!

+

PyWeek, a game jam that has been running since 2005, joins Python + Discord as one of our official events. Find more information about PyWeek on their official website.

+ +
+ Aug 16th, 2020 +
+
-
-
- -
+
+
+ Picture +
-
-

Python Discord is now listed on python.org/community

-

After working towards this goal for months, we finally work out an - arrangement with the PSF that allows us to be listed on that most holiest of websites: - https://python.org/. There was much rejoicing.

+
+

Python Discord hosts the 2020 CPython Core Developer Q&A

+
+ +
+ +
+ Oct 21st, 2020 +
+
+
-
- May 28th, 2020 -
-
+
+
+
-
-
- -
+
+

Python Discord hits 100,000 members!

+

Only six months after hitting 40,000 users, we hit 100,000 users. A + monumental milestone, + and one we're very proud of. To commemorate it, we create this timeline.

-
-

Python Discord Public Statistics are now live

-

After getting numerous requests to publish beautiful data on member - count and channel use, we create stats.pythondiscord.com for all to enjoy.

+
+ Oct 22nd, 2020 +
+
+
-
- Jun 4th, 2020 -
-
+
+
+
-
-
- -
+
+

We migrate all our infrastructure to Kubernetes

+

As our tech stack grows, we decide to migrate all our services over to a + container orchestration paradigm via Kubernetes. This gives us better control and scalability. + Joe Banks takes on the role as DevOps Lead. +

-
-

PyDis summer code jam 2020 with the theme “Early Internet” and Django as the technology

-

Sponsored by the Django Software Foundation and JetBrains, the Summer - Code Jam for 2020 attracts hundreds of participants, and sees the creation of some fantastic - projects. Check them out in our judge stream below:

+
+ Nov 29th, 2020 +
+
+
+ +
+
+ +
+ +
+

Advent of Code attracts hundreds of participants

+

+ A total of 443 Python Discord members sign up to be part of + Eric Wastl's excellent Advent of Code event. + As always, we provide dedicated announcements, scoreboards, bot commands and channels for our members + to enjoy the event in. -

- -
+

-
- Jul 31st, 2020 -
-
+
+ December 1st - 25th, 2020 +
+
-
-
- -
-
-

Python Discord is now the new home of the PyWeek event!

-

PyWeek, a game jam that has been running since 2005, joins Python - Discord as one of our official events. Find more information about PyWeek on their official website.

+
+
+ +
+ +
+

We release The PEP 8 song

+

We release the PEP 8 song on our YouTube channel, which finds tens of + thousands of listeners!

-
- Aug 16th, 2020 -
-
+
+ +
+ +
+ February 8th, 2021 +
+
-
-
- Picture -
+
+
+ +
-
-

Python Discord hosts the 2020 CPython Core Developer Q&A

-
- -
+
+

We now have 150,000 members!

+

Our growth continues to accelerate.

-
- Oct 21st, 2020 -
-
+
+ Feb 18th, 2021 +
+
-
-
- -
+
+
+ +
-
-

Python Discord hits 100,000 members.

-

After years of hard work, we hit 100,000 users. A monumental milestone, - and one we're very proud of. To commemorate it, we create this timeline.

+
+

Lemon on Talk Python To Me

+

Lemon goes on the Talk Python to Me podcast to discuss the history of Python + Discord, + the critical importance of culture, and how to run a massive community. You can find the episode + at talkpython.fm. +

+ + + +
+ Mar 1st, 2021 +
+
+
+ +
+
+ +
-
- Oct 22nd, 2020 -
-
+
+

Lemon on Teaching Python

+

Lemon goes on the Teaching Python podcast to discuss how the pandemic has + changed the way we learn, and what role communities like Python Discord can play in this new world. + You can find the episode at teachingpython.fm. +

+ + + +
+ Mar 13th, 2021 +
+
+
+ +
+
+ +
+ +
+

New feature: Weekly discussion channel

+

Every week (or two weeks), we'll be posting a new topic to discuss in a + channel called #weekly-topic-discussion. Our inaugural topic is a PyCon talk by Anthony Shaw called + Wily Python: Writing simpler and more maintainable Python.. +

+ +
+ +
+ +
+ Mar 13th, 2021 +
+
+ +
+
+ +
+ +
+

Summer Code Jam 2020 Highlights

+

+ We release a new video to our YouTube showing the best projects from the Summer Code Jam 2020. + Better late than never! +

+ +
+ +
+ +
+ Mar 21st, 2021 +
+
+
+
-
+
- + {% endblock %} -- cgit v1.2.3 From d9a55b3d09d5c19cbb9b589f5a189f9f4fb38498 Mon Sep 17 00:00:00 2001 From: Leon Sandøy Date: Thu, 25 Mar 2021 10:34:02 +0100 Subject: Use real names in the timeline Using nicknames like Ves Zappa and Lemon doesn't always feel appropriate, so I've replaced some of those references with real names. --- pydis_site/templates/home/timeline.html | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'pydis_site') diff --git a/pydis_site/templates/home/timeline.html b/pydis_site/templates/home/timeline.html index 9f4175b2..ea354a57 100644 --- a/pydis_site/templates/home/timeline.html +++ b/pydis_site/templates/home/timeline.html @@ -19,8 +19,8 @@

Python Discord is created

-

joe becomes one of the owners around 3 days after it - is created, and lemon joins the owner team later in the year, when the community +

Joe Banks becomes one of the owners around 3 days after it + is created, and Leon Sandøy joins the owner team later in the year, when the community has around 300 members.

@@ -283,9 +283,9 @@
-

Ves Zappa becomes an owner

+

Sebastiaan Zeef becomes an owner

After being a long time active contributor to our projects and the driving - force behind our events, Ves Zappa joined the Owners team alongside joe & lemon.

+ force behind many of our events, Sebastiaan Zeef joins the Owners Team alongside Joe & Leon.

Sept 22nd, 2019 @@ -600,11 +600,10 @@
-

Lemon on Talk Python To Me

-

Lemon goes on the Talk Python to Me podcast to discuss the history of Python - Discord, - the critical importance of culture, and how to run a massive community. You can find the episode - at talkpython.fm. +

Leon Sandøy appears on Talk Python To Me

+

Leon goes on the Talk Python to Me podcast with Michael Kennedy + to discuss the history of Python Discord, the critical importance of culture, and how to run a massive + community. You can find the episode at talkpython.fm.