We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Отсутствует robots.txt
Уверен, что в клубе всем похуй, но мне каждый раз больно, когда вижу, что нет robots.txt.

Можно хотяб стандартный добавить, вроде:

User-agent: *
Sitemap: https://vas3k.club/sitemap.xml
Host: https://vas3k.club

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `misc/views.py`
Content:
```
1 from django.shortcuts import render
2 
3 from auth.helpers import auth_required
4 from landing.models import GodSettings
5 from users.models.achievements import Achievement
6 
7 
8 @auth_required
9 def achievements(request):
10     achievements = Achievement.objects.filter(is_visible=True)
11     return render(request, "pages/achievements.html", {
12         "achievements": achievements
13     })
14 
15 
16 @auth_required
17 def network(request):
18     secret_page_html = GodSettings.objects.first().network_page
19     return render(request, "pages/network.html", {
20         "page_html": secret_page_html,
21     })
22
```

Path: `club/urls.py`
Content:
```
1 from django.conf import settings
2 from django.contrib.sitemaps.views import sitemap
3 from django.urls import path, include, re_path
4 
5 from auth.helpers import auth_switch
6 from auth.views.auth import login, logout, debug_dev_login, debug_random_login, join
7 from auth.views.email import email_login, email_login_code
8 from auth.views.external import external_login
9 from auth.views.patreon import patreon_login, patreon_oauth_callback
10 from bot.views import webhook_telegram, link_telegram
11 from comments.views import create_comment, edit_comment, delete_comment, show_comment, upvote_comment, \
12     retract_comment_vote, pin_comment
13 from landing.views import landing, docs, god_settings
14 from misc.views import achievements, network
15 from notifications.views import weekly_digest, email_unsubscribe, email_confirm, daily_digest, email_digest_switch
16 from payments.views import membership_expired, pay, done, stripe_webhook, stop_subscription
17 from posts.api import md_show_post, api_show_post
18 from posts.models.post import Post
19 from posts.rss import NewPostsRss
20 from posts.sitemaps import sitemaps
21 from posts.views.admin import admin_post, announce_post
22 from posts.views.api import toggle_post_bookmark
23 from posts.views.feed import feed
24 from posts.views.posts import show_post, edit_post, upvote_post, retract_post_vote, compose, compose_type, \
25     toggle_post_subscription
26 from bookmarks.views import bookmarks
27 from search.views import search
28 from users.api import api_profile
29 from users.views.delete_account import request_delete_account, confirm_delete_account
30 from users.views.messages import on_review, rejected, banned
31 from users.views.profile import profile, toggle_tag, add_expertise, delete_expertise
32 from users.views.settings import profile_settings, edit_profile, edit_account, edit_notifications, edit_payments, \
33     edit_bot, edit_data, request_data
34 from users.views.intro import intro
35 from users.views.admin import admin_profile
36 from users.views.people import people
37 
38 POST_TYPE_RE = r"(?P<post_type>(all|{}))".format("|".join(dict(Post.TYPES).keys()))
39 ORDERING_RE = r"(?P<ordering>(activity|new|top|top_week|top_month))"
40 
41 urlpatterns = [
42     path("", auth_switch(landing, feed), name="index"),
43 
44     path("join/", join, name="join"),
45     path("auth/login/", login, name="login"),
46     path("auth/logout/", logout, name="logout"),
47     path("auth/patreon/", patreon_login, name="patreon_login"),
48     path("auth/patreon_callback/", patreon_oauth_callback, name="patreon_oauth_callback"),
49     path("auth/email/", email_login, name="email_login"),
50     path("auth/email/code/", email_login_code, name="email_login_code"),
51     path("auth/external/", external_login, name="external_login"),
52 
53     path("monies/", pay, name="pay"),
54     path("monies/done/", done, name="done"),
55     path("monies/membership_expired/", membership_expired, name="membership_expired"),
56     path("monies/stripe/webhook/", stripe_webhook, name="stripe_webhook"),
57     path("monies/subscription/<str:subscription_id>/stop/", stop_subscription, name="stop_subscription"),
58 
59     path("user/<slug:user_slug>/", profile, name="profile"),
60     path("user/<slug:user_slug>.json", api_profile, name="api_profile"),
61     path("user/<slug:user_slug>/edit/", profile_settings, name="profile_settings"),
62     path("user/<slug:user_slug>/edit/profile/", edit_profile, name="edit_profile"),
63     path("user/<slug:user_slug>/edit/account/", edit_account, name="edit_account"),
64     path("user/<slug:user_slug>/edit/bot/", edit_bot, name="edit_bot"),
65     path("user/<slug:user_slug>/edit/notifications/", edit_notifications, name="edit_notifications"),
66     path("user/<slug:user_slug>/edit/monies/", edit_payments, name="edit_payments"),
67     path("user/<slug:user_slug>/edit/data/", edit_data, name="edit_data"),
68     path("user/<slug:user_slug>/edit/data/request/", request_data, name="request_user_data"),
69     path("user/<slug:user_slug>/admin/", admin_profile, name="admin_profile"),
70     path("user/<slug:user_slug>/delete/", request_delete_account, name="request_delete_account"),
71     path("user/<slug:user_slug>/delete/confirm/", confirm_delete_account, name="confirm_delete_account"),
72 
73     path("intro/", intro, name="intro"),
74     path("people/", people, name="people"),
75     path("achievements/", achievements, name="achievements"),
76     path("profile/tag/<slug:tag_code>/toggle/", toggle_tag, name="toggle_tag"),
77     path("profile/expertise/add/", add_expertise, name="add_expertise"),
78     path("profile/expertise/<slug:expertise>/delete/", delete_expertise, name="delete_expertise"),
79     path("profile/on_review/", on_review, name="on_review"),
80     path("profile/rejected/", rejected, name="rejected"),
81     path("profile/banned/", banned, name="banned"),
82 
83     path("create/", compose, name="compose"),
84     path("create/<slug:post_type>/", compose_type, name="compose_type"),
85     path("post/<slug:post_slug>/edit/", edit_post, name="edit_post"),
86     path("post/<slug:post_slug>/bookmark/", toggle_post_bookmark, name="toggle_post_bookmark"),
87     path("post/<slug:post_slug>/upvote/", upvote_post, name="upvote_post"),
88     path("post/<slug:post_slug>/retract_vote/", retract_post_vote, name="retract_post_vote"),
89     path("post/<slug:post_slug>/subscription/", toggle_post_subscription, name="toggle_post_subscription"),
90     path("post/<slug:post_slug>/admin/", admin_post, name="admin_post"),
91     path("post/<slug:post_slug>/announce/", announce_post, name="announce_post"),
92     path("post/<slug:post_slug>/comment/create/", create_comment, name="create_comment"),
93     path("post/<slug:post_slug>/comment/<uuid:comment_id>/", show_comment, name="show_comment", ),
94 
95     path("bookmarks/", bookmarks, name="bookmarks"),
96 
97     path("search/", search, name="search"),
98     path("room/<slug:topic_slug>/", feed, name="feed_topic"),
99     path("room/<slug:topic_slug>/<slug:ordering>/", feed, name="feed_topic_ordering"),
100 
101     path("comment/<uuid:comment_id>/upvote/", upvote_comment, name="upvote_comment"),
102     path("comment/<uuid:comment_id>/retract_vote/", retract_comment_vote, name="retract_comment_vote"),
103     path("comment/<uuid:comment_id>/edit/", edit_comment, name="edit_comment"),
104     path("comment/<uuid:comment_id>/pin/", pin_comment, name="pin_comment"),
105     path("comment/<uuid:comment_id>/delete/", delete_comment, name="delete_comment"),
106 
107     path("telegram/link/", link_telegram, name="link_telegram"),
108     path("telegram/webhook/<str:token>/", webhook_telegram, name="webhook_telegram"),
109 
110     path("notifications/confirm/<str:secret>/", email_confirm, name="email_confirm"),
111     path("notifications/confirm/<str:secret>/<str:legacy_code>/", email_confirm, name="email_confirm_legacy"),
112     path("notifications/unsubscribe/<str:user_id>/<str:secret>/", email_unsubscribe, name="email_unsubscribe"),
113     path("notifications/switch/<str:digest_type>/<str:user_id>/<str:secret>/", email_digest_switch,
114          name="email_digest_switch"),
115     path("notifications/renderer/digest/weekly/", weekly_digest, name="render_weekly_digest"),
116     path("notifications/renderer/digest/daily/<slug:user_slug>/", daily_digest, name="render_daily_digest"),
117 
118     path("docs/<slug:doc_slug>/", docs, name="docs"),
119 
120     path("network/", network, name="network"),
121 
122     path("godmode/", god_settings, name="god_settings"),
123     path("godmode/dev_login/", debug_dev_login, name="debug_dev_login"),
124     path("godmode/random_login/", debug_random_login, name="debug_random_login"),
125 
126     # feeds
127     path("sitemap.xml", sitemap, {"sitemaps": sitemaps}, name="sitemap"),
128     path("posts.rss", NewPostsRss(), name="rss"),
129 
130     # keep these guys at the bottom
131     re_path(r"^{}/$".format(POST_TYPE_RE), feed, name="feed_type"),
132     re_path(r"^{}/{}/$".format(POST_TYPE_RE, ORDERING_RE), feed, name="feed_ordering"),
133     path("<slug:post_type>/<slug:post_slug>/", show_post, name="show_post"),
134     path("<slug:post_type>/<slug:post_slug>.md", md_show_post, name="md_show_post"),
135     path("<slug:post_type>/<slug:post_slug>.json", api_show_post, name="api_show_post"),
136 ]
137 
138 if settings.DEBUG:
139     import debug_toolbar
140 
141     urlpatterns = [path("__debug__/", include(debug_toolbar.urls))] + urlpatterns
142 
143 # According to django doc: https://docs.djangoproject.com/en/3.1/topics/testing/overview/#other-test-conditions
144 # Regardless of the value of the DEBUG setting in your configuration file, all Django tests run with DEBUG=False
145 # so we use separate special var instead of settings.DEBUG
146 if settings.TESTS_RUN:
147     from debug.api import api_me
148 
149     urlpatterns.append(path("debug/me", api_me, name="debug_api_me"))
150
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/club/urls.py b/club/urls.py
--- a/club/urls.py
+++ b/club/urls.py
@@ -11,7 +11,7 @@
 from comments.views import create_comment, edit_comment, delete_comment, show_comment, upvote_comment, \
     retract_comment_vote, pin_comment
 from landing.views import landing, docs, god_settings
-from misc.views import achievements, network
+from misc.views import achievements, network, robots
 from notifications.views import weekly_digest, email_unsubscribe, email_confirm, daily_digest, email_digest_switch
 from payments.views import membership_expired, pay, done, stripe_webhook, stop_subscription
 from posts.api import md_show_post, api_show_post
@@ -127,6 +127,8 @@
     path("sitemap.xml", sitemap, {"sitemaps": sitemaps}, name="sitemap"),
     path("posts.rss", NewPostsRss(), name="rss"),
 
+    path("robots.txt", robots, name="robots"),
+
     # keep these guys at the bottom
     re_path(r"^{}/$".format(POST_TYPE_RE), feed, name="feed_type"),
     re_path(r"^{}/{}/$".format(POST_TYPE_RE, ORDERING_RE), feed, name="feed_ordering"),
diff --git a/misc/views.py b/misc/views.py
--- a/misc/views.py
+++ b/misc/views.py
@@ -1,4 +1,6 @@
+from django.http import HttpResponse
 from django.shortcuts import render
+from django.views.decorators.http import require_GET
 
 from auth.helpers import auth_required
 from landing.models import GodSettings
@@ -19,3 +21,12 @@
     return render(request, "pages/network.html", {
         "page_html": secret_page_html,
     })
+
+@require_GET
+def robots(request):
+    lines = [
+        "User-agent: *",
+        "Sitemap: https://vas3k.club/sitemap.xml",
+        "Host: https://vas3k.club",
+    ]
+    return HttpResponse("\n".join(lines), content_type="text/plain")

{"golden_diff": "diff --git a/club/urls.py b/club/urls.py\n--- a/club/urls.py\n+++ b/club/urls.py\n@@ -11,7 +11,7 @@\n from comments.views import create_comment, edit_comment, delete_comment, show_comment, upvote_comment, \\\n     retract_comment_vote, pin_comment\n from landing.views import landing, docs, god_settings\n-from misc.views import achievements, network\n+from misc.views import achievements, network, robots\n from notifications.views import weekly_digest, email_unsubscribe, email_confirm, daily_digest, email_digest_switch\n from payments.views import membership_expired, pay, done, stripe_webhook, stop_subscription\n from posts.api import md_show_post, api_show_post\n@@ -127,6 +127,8 @@\n     path(\"sitemap.xml\", sitemap, {\"sitemaps\": sitemaps}, name=\"sitemap\"),\n     path(\"posts.rss\", NewPostsRss(), name=\"rss\"),\n \n+    path(\"robots.txt\", robots, name=\"robots\"),\n+\n     # keep these guys at the bottom\n     re_path(r\"^{}/$\".format(POST_TYPE_RE), feed, name=\"feed_type\"),\n     re_path(r\"^{}/{}/$\".format(POST_TYPE_RE, ORDERING_RE), feed, name=\"feed_ordering\"),\ndiff --git a/misc/views.py b/misc/views.py\n--- a/misc/views.py\n+++ b/misc/views.py\n@@ -1,4 +1,6 @@\n+from django.http import HttpResponse\n from django.shortcuts import render\n+from django.views.decorators.http import require_GET\n \n from auth.helpers import auth_required\n from landing.models import GodSettings\n@@ -19,3 +21,12 @@\n     return render(request, \"pages/network.html\", {\n         \"page_html\": secret_page_html,\n     })\n+\n+@require_GET\n+def robots(request):\n+    lines = [\n+        \"User-agent: *\",\n+        \"Sitemap: https://vas3k.club/sitemap.xml\",\n+        \"Host: https://vas3k.club\",\n+    ]\n+    return HttpResponse(\"\\n\".join(lines), content_type=\"text/plain\")\n", "issue": "\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 robots.txt\n\u0423\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u0432 \u043a\u043b\u0443\u0431\u0435 \u0432\u0441\u0435\u043c \u043f\u043e\u0445\u0443\u0439, \u043d\u043e \u043c\u043d\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0431\u043e\u043b\u044c\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u0432\u0438\u0436\u0443, \u0447\u0442\u043e \u043d\u0435\u0442 robots.txt.\r\n\r\n\u041c\u043e\u0436\u043d\u043e \u0445\u043e\u0442\u044f\u0431 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c, \u0432\u0440\u043e\u0434\u0435:\r\n\r\nUser-agent: *\r\nSitemap: https://vas3k.club/sitemap.xml\r\nHost: https://vas3k.club\n", "before_files": [{"content": "from django.shortcuts import render\n\nfrom auth.helpers import auth_required\nfrom landing.models import GodSettings\nfrom users.models.achievements import Achievement\n\n\n@auth_required\ndef achievements(request):\n    achievements = Achievement.objects.filter(is_visible=True)\n    return render(request, \"pages/achievements.html\", {\n        \"achievements\": achievements\n    })\n\n\n@auth_required\ndef network(request):\n    secret_page_html = GodSettings.objects.first().network_page\n    return render(request, \"pages/network.html\", {\n        \"page_html\": secret_page_html,\n    })\n", "path": "misc/views.py"}, {"content": "from django.conf import settings\nfrom django.contrib.sitemaps.views import sitemap\nfrom django.urls import path, include, re_path\n\nfrom auth.helpers import auth_switch\nfrom auth.views.auth import login, logout, debug_dev_login, debug_random_login, join\nfrom auth.views.email import email_login, email_login_code\nfrom auth.views.external import external_login\nfrom auth.views.patreon import patreon_login, patreon_oauth_callback\nfrom bot.views import webhook_telegram, link_telegram\nfrom comments.views import create_comment, edit_comment, delete_comment, show_comment, upvote_comment, \\\n    retract_comment_vote, pin_comment\nfrom landing.views import landing, docs, god_settings\nfrom misc.views import achievements, network\nfrom notifications.views import weekly_digest, email_unsubscribe, email_confirm, daily_digest, email_digest_switch\nfrom payments.views import membership_expired, pay, done, stripe_webhook, stop_subscription\nfrom posts.api import md_show_post, api_show_post\nfrom posts.models.post import Post\nfrom posts.rss import NewPostsRss\nfrom posts.sitemaps import sitemaps\nfrom posts.views.admin import admin_post, announce_post\nfrom posts.views.api import toggle_post_bookmark\nfrom posts.views.feed import feed\nfrom posts.views.posts import show_post, edit_post, upvote_post, retract_post_vote, compose, compose_type, \\\n    toggle_post_subscription\nfrom bookmarks.views import bookmarks\nfrom search.views import search\nfrom users.api import api_profile\nfrom users.views.delete_account import request_delete_account, confirm_delete_account\nfrom users.views.messages import on_review, rejected, banned\nfrom users.views.profile import profile, toggle_tag, add_expertise, delete_expertise\nfrom users.views.settings import profile_settings, edit_profile, edit_account, edit_notifications, edit_payments, \\\n    edit_bot, edit_data, request_data\nfrom users.views.intro import intro\nfrom users.views.admin import admin_profile\nfrom users.views.people import people\n\nPOST_TYPE_RE = r\"(?P<post_type>(all|{}))\".format(\"|\".join(dict(Post.TYPES).keys()))\nORDERING_RE = r\"(?P<ordering>(activity|new|top|top_week|top_month))\"\n\nurlpatterns = [\n    path(\"\", auth_switch(landing, feed), name=\"index\"),\n\n    path(\"join/\", join, name=\"join\"),\n    path(\"auth/login/\", login, name=\"login\"),\n    path(\"auth/logout/\", logout, name=\"logout\"),\n    path(\"auth/patreon/\", patreon_login, name=\"patreon_login\"),\n    path(\"auth/patreon_callback/\", patreon_oauth_callback, name=\"patreon_oauth_callback\"),\n    path(\"auth/email/\", email_login, name=\"email_login\"),\n    path(\"auth/email/code/\", email_login_code, name=\"email_login_code\"),\n    path(\"auth/external/\", external_login, name=\"external_login\"),\n\n    path(\"monies/\", pay, name=\"pay\"),\n    path(\"monies/done/\", done, name=\"done\"),\n    path(\"monies/membership_expired/\", membership_expired, name=\"membership_expired\"),\n    path(\"monies/stripe/webhook/\", stripe_webhook, name=\"stripe_webhook\"),\n    path(\"monies/subscription/<str:subscription_id>/stop/\", stop_subscription, name=\"stop_subscription\"),\n\n    path(\"user/<slug:user_slug>/\", profile, name=\"profile\"),\n    path(\"user/<slug:user_slug>.json\", api_profile, name=\"api_profile\"),\n    path(\"user/<slug:user_slug>/edit/\", profile_settings, name=\"profile_settings\"),\n    path(\"user/<slug:user_slug>/edit/profile/\", edit_profile, name=\"edit_profile\"),\n    path(\"user/<slug:user_slug>/edit/account/\", edit_account, name=\"edit_account\"),\n    path(\"user/<slug:user_slug>/edit/bot/\", edit_bot, name=\"edit_bot\"),\n    path(\"user/<slug:user_slug>/edit/notifications/\", edit_notifications, name=\"edit_notifications\"),\n    path(\"user/<slug:user_slug>/edit/monies/\", edit_payments, name=\"edit_payments\"),\n    path(\"user/<slug:user_slug>/edit/data/\", edit_data, name=\"edit_data\"),\n    path(\"user/<slug:user_slug>/edit/data/request/\", request_data, name=\"request_user_data\"),\n    path(\"user/<slug:user_slug>/admin/\", admin_profile, name=\"admin_profile\"),\n    path(\"user/<slug:user_slug>/delete/\", request_delete_account, name=\"request_delete_account\"),\n    path(\"user/<slug:user_slug>/delete/confirm/\", confirm_delete_account, name=\"confirm_delete_account\"),\n\n    path(\"intro/\", intro, name=\"intro\"),\n    path(\"people/\", people, name=\"people\"),\n    path(\"achievements/\", achievements, name=\"achievements\"),\n    path(\"profile/tag/<slug:tag_code>/toggle/\", toggle_tag, name=\"toggle_tag\"),\n    path(\"profile/expertise/add/\", add_expertise, name=\"add_expertise\"),\n    path(\"profile/expertise/<slug:expertise>/delete/\", delete_expertise, name=\"delete_expertise\"),\n    path(\"profile/on_review/\", on_review, name=\"on_review\"),\n    path(\"profile/rejected/\", rejected, name=\"rejected\"),\n    path(\"profile/banned/\", banned, name=\"banned\"),\n\n    path(\"create/\", compose, name=\"compose\"),\n    path(\"create/<slug:post_type>/\", compose_type, name=\"compose_type\"),\n    path(\"post/<slug:post_slug>/edit/\", edit_post, name=\"edit_post\"),\n    path(\"post/<slug:post_slug>/bookmark/\", toggle_post_bookmark, name=\"toggle_post_bookmark\"),\n    path(\"post/<slug:post_slug>/upvote/\", upvote_post, name=\"upvote_post\"),\n    path(\"post/<slug:post_slug>/retract_vote/\", retract_post_vote, name=\"retract_post_vote\"),\n    path(\"post/<slug:post_slug>/subscription/\", toggle_post_subscription, name=\"toggle_post_subscription\"),\n    path(\"post/<slug:post_slug>/admin/\", admin_post, name=\"admin_post\"),\n    path(\"post/<slug:post_slug>/announce/\", announce_post, name=\"announce_post\"),\n    path(\"post/<slug:post_slug>/comment/create/\", create_comment, name=\"create_comment\"),\n    path(\"post/<slug:post_slug>/comment/<uuid:comment_id>/\", show_comment, name=\"show_comment\", ),\n\n    path(\"bookmarks/\", bookmarks, name=\"bookmarks\"),\n\n    path(\"search/\", search, name=\"search\"),\n    path(\"room/<slug:topic_slug>/\", feed, name=\"feed_topic\"),\n    path(\"room/<slug:topic_slug>/<slug:ordering>/\", feed, name=\"feed_topic_ordering\"),\n\n    path(\"comment/<uuid:comment_id>/upvote/\", upvote_comment, name=\"upvote_comment\"),\n    path(\"comment/<uuid:comment_id>/retract_vote/\", retract_comment_vote, name=\"retract_comment_vote\"),\n    path(\"comment/<uuid:comment_id>/edit/\", edit_comment, name=\"edit_comment\"),\n    path(\"comment/<uuid:comment_id>/pin/\", pin_comment, name=\"pin_comment\"),\n    path(\"comment/<uuid:comment_id>/delete/\", delete_comment, name=\"delete_comment\"),\n\n    path(\"telegram/link/\", link_telegram, name=\"link_telegram\"),\n    path(\"telegram/webhook/<str:token>/\", webhook_telegram, name=\"webhook_telegram\"),\n\n    path(\"notifications/confirm/<str:secret>/\", email_confirm, name=\"email_confirm\"),\n    path(\"notifications/confirm/<str:secret>/<str:legacy_code>/\", email_confirm, name=\"email_confirm_legacy\"),\n    path(\"notifications/unsubscribe/<str:user_id>/<str:secret>/\", email_unsubscribe, name=\"email_unsubscribe\"),\n    path(\"notifications/switch/<str:digest_type>/<str:user_id>/<str:secret>/\", email_digest_switch,\n         name=\"email_digest_switch\"),\n    path(\"notifications/renderer/digest/weekly/\", weekly_digest, name=\"render_weekly_digest\"),\n    path(\"notifications/renderer/digest/daily/<slug:user_slug>/\", daily_digest, name=\"render_daily_digest\"),\n\n    path(\"docs/<slug:doc_slug>/\", docs, name=\"docs\"),\n\n    path(\"network/\", network, name=\"network\"),\n\n    path(\"godmode/\", god_settings, name=\"god_settings\"),\n    path(\"godmode/dev_login/\", debug_dev_login, name=\"debug_dev_login\"),\n    path(\"godmode/random_login/\", debug_random_login, name=\"debug_random_login\"),\n\n    # feeds\n    path(\"sitemap.xml\", sitemap, {\"sitemaps\": sitemaps}, name=\"sitemap\"),\n    path(\"posts.rss\", NewPostsRss(), name=\"rss\"),\n\n    # keep these guys at the bottom\n    re_path(r\"^{}/$\".format(POST_TYPE_RE), feed, name=\"feed_type\"),\n    re_path(r\"^{}/{}/$\".format(POST_TYPE_RE, ORDERING_RE), feed, name=\"feed_ordering\"),\n    path(\"<slug:post_type>/<slug:post_slug>/\", show_post, name=\"show_post\"),\n    path(\"<slug:post_type>/<slug:post_slug>.md\", md_show_post, name=\"md_show_post\"),\n    path(\"<slug:post_type>/<slug:post_slug>.json\", api_show_post, name=\"api_show_post\"),\n]\n\nif settings.DEBUG:\n    import debug_toolbar\n\n    urlpatterns = [path(\"__debug__/\", include(debug_toolbar.urls))] + urlpatterns\n\n# According to django doc: https://docs.djangoproject.com/en/3.1/topics/testing/overview/#other-test-conditions\n# Regardless of the value of the DEBUG setting in your configuration file, all Django tests run with DEBUG=False\n# so we use separate special var instead of settings.DEBUG\nif settings.TESTS_RUN:\n    from debug.api import api_me\n\n    urlpatterns.append(path(\"debug/me\", api_me, name=\"debug_api_me\"))\n", "path": "club/urls.py"}], "after_files": [{"content": "from django.http import HttpResponse\nfrom django.shortcuts import render\nfrom django.views.decorators.http import require_GET\n\nfrom auth.helpers import auth_required\nfrom landing.models import GodSettings\nfrom users.models.achievements import Achievement\n\n\n@auth_required\ndef achievements(request):\n    achievements = Achievement.objects.filter(is_visible=True)\n    return render(request, \"pages/achievements.html\", {\n        \"achievements\": achievements\n    })\n\n\n@auth_required\ndef network(request):\n    secret_page_html = GodSettings.objects.first().network_page\n    return render(request, \"pages/network.html\", {\n        \"page_html\": secret_page_html,\n    })\n\n@require_GET\ndef robots(request):\n    lines = [\n        \"User-agent: *\",\n        \"Sitemap: https://vas3k.club/sitemap.xml\",\n        \"Host: https://vas3k.club\",\n    ]\n    return HttpResponse(\"\\n\".join(lines), content_type=\"text/plain\")\n", "path": "misc/views.py"}, {"content": "from django.conf import settings\nfrom django.contrib.sitemaps.views import sitemap\nfrom django.urls import path, include, re_path\n\nfrom auth.helpers import auth_switch\nfrom auth.views.auth import login, logout, debug_dev_login, debug_random_login, join\nfrom auth.views.email import email_login, email_login_code\nfrom auth.views.external import external_login\nfrom auth.views.patreon import patreon_login, patreon_oauth_callback\nfrom bot.views import webhook_telegram, link_telegram\nfrom comments.views import create_comment, edit_comment, delete_comment, show_comment, upvote_comment, \\\n    retract_comment_vote, pin_comment\nfrom landing.views import landing, docs, god_settings\nfrom misc.views import achievements, network, robots\nfrom notifications.views import weekly_digest, email_unsubscribe, email_confirm, daily_digest, email_digest_switch\nfrom payments.views import membership_expired, pay, done, stripe_webhook, stop_subscription\nfrom posts.api import md_show_post, api_show_post\nfrom posts.models.post import Post\nfrom posts.rss import NewPostsRss\nfrom posts.sitemaps import sitemaps\nfrom posts.views.admin import admin_post, announce_post\nfrom posts.views.api import toggle_post_bookmark\nfrom posts.views.feed import feed\nfrom posts.views.posts import show_post, edit_post, upvote_post, retract_post_vote, compose, compose_type, \\\n    toggle_post_subscription\nfrom bookmarks.views import bookmarks\nfrom search.views import search\nfrom users.api import api_profile\nfrom users.views.delete_account import request_delete_account, confirm_delete_account\nfrom users.views.messages import on_review, rejected, banned\nfrom users.views.profile import profile, toggle_tag, add_expertise, delete_expertise\nfrom users.views.settings import profile_settings, edit_profile, edit_account, edit_notifications, edit_payments, \\\n    edit_bot, edit_data, request_data\nfrom users.views.intro import intro\nfrom users.views.admin import admin_profile\nfrom users.views.people import people\n\nPOST_TYPE_RE = r\"(?P<post_type>(all|{}))\".format(\"|\".join(dict(Post.TYPES).keys()))\nORDERING_RE = r\"(?P<ordering>(activity|new|top|top_week|top_month))\"\n\nurlpatterns = [\n    path(\"\", auth_switch(landing, feed), name=\"index\"),\n\n    path(\"join/\", join, name=\"join\"),\n    path(\"auth/login/\", login, name=\"login\"),\n    path(\"auth/logout/\", logout, name=\"logout\"),\n    path(\"auth/patreon/\", patreon_login, name=\"patreon_login\"),\n    path(\"auth/patreon_callback/\", patreon_oauth_callback, name=\"patreon_oauth_callback\"),\n    path(\"auth/email/\", email_login, name=\"email_login\"),\n    path(\"auth/email/code/\", email_login_code, name=\"email_login_code\"),\n    path(\"auth/external/\", external_login, name=\"external_login\"),\n\n    path(\"monies/\", pay, name=\"pay\"),\n    path(\"monies/done/\", done, name=\"done\"),\n    path(\"monies/membership_expired/\", membership_expired, name=\"membership_expired\"),\n    path(\"monies/stripe/webhook/\", stripe_webhook, name=\"stripe_webhook\"),\n    path(\"monies/subscription/<str:subscription_id>/stop/\", stop_subscription, name=\"stop_subscription\"),\n\n    path(\"user/<slug:user_slug>/\", profile, name=\"profile\"),\n    path(\"user/<slug:user_slug>.json\", api_profile, name=\"api_profile\"),\n    path(\"user/<slug:user_slug>/edit/\", profile_settings, name=\"profile_settings\"),\n    path(\"user/<slug:user_slug>/edit/profile/\", edit_profile, name=\"edit_profile\"),\n    path(\"user/<slug:user_slug>/edit/account/\", edit_account, name=\"edit_account\"),\n    path(\"user/<slug:user_slug>/edit/bot/\", edit_bot, name=\"edit_bot\"),\n    path(\"user/<slug:user_slug>/edit/notifications/\", edit_notifications, name=\"edit_notifications\"),\n    path(\"user/<slug:user_slug>/edit/monies/\", edit_payments, name=\"edit_payments\"),\n    path(\"user/<slug:user_slug>/edit/data/\", edit_data, name=\"edit_data\"),\n    path(\"user/<slug:user_slug>/edit/data/request/\", request_data, name=\"request_user_data\"),\n    path(\"user/<slug:user_slug>/admin/\", admin_profile, name=\"admin_profile\"),\n    path(\"user/<slug:user_slug>/delete/\", request_delete_account, name=\"request_delete_account\"),\n    path(\"user/<slug:user_slug>/delete/confirm/\", confirm_delete_account, name=\"confirm_delete_account\"),\n\n    path(\"intro/\", intro, name=\"intro\"),\n    path(\"people/\", people, name=\"people\"),\n    path(\"achievements/\", achievements, name=\"achievements\"),\n    path(\"profile/tag/<slug:tag_code>/toggle/\", toggle_tag, name=\"toggle_tag\"),\n    path(\"profile/expertise/add/\", add_expertise, name=\"add_expertise\"),\n    path(\"profile/expertise/<slug:expertise>/delete/\", delete_expertise, name=\"delete_expertise\"),\n    path(\"profile/on_review/\", on_review, name=\"on_review\"),\n    path(\"profile/rejected/\", rejected, name=\"rejected\"),\n    path(\"profile/banned/\", banned, name=\"banned\"),\n\n    path(\"create/\", compose, name=\"compose\"),\n    path(\"create/<slug:post_type>/\", compose_type, name=\"compose_type\"),\n    path(\"post/<slug:post_slug>/edit/\", edit_post, name=\"edit_post\"),\n    path(\"post/<slug:post_slug>/bookmark/\", toggle_post_bookmark, name=\"toggle_post_bookmark\"),\n    path(\"post/<slug:post_slug>/upvote/\", upvote_post, name=\"upvote_post\"),\n    path(\"post/<slug:post_slug>/retract_vote/\", retract_post_vote, name=\"retract_post_vote\"),\n    path(\"post/<slug:post_slug>/subscription/\", toggle_post_subscription, name=\"toggle_post_subscription\"),\n    path(\"post/<slug:post_slug>/admin/\", admin_post, name=\"admin_post\"),\n    path(\"post/<slug:post_slug>/announce/\", announce_post, name=\"announce_post\"),\n    path(\"post/<slug:post_slug>/comment/create/\", create_comment, name=\"create_comment\"),\n    path(\"post/<slug:post_slug>/comment/<uuid:comment_id>/\", show_comment, name=\"show_comment\", ),\n\n    path(\"bookmarks/\", bookmarks, name=\"bookmarks\"),\n\n    path(\"search/\", search, name=\"search\"),\n    path(\"room/<slug:topic_slug>/\", feed, name=\"feed_topic\"),\n    path(\"room/<slug:topic_slug>/<slug:ordering>/\", feed, name=\"feed_topic_ordering\"),\n\n    path(\"comment/<uuid:comment_id>/upvote/\", upvote_comment, name=\"upvote_comment\"),\n    path(\"comment/<uuid:comment_id>/retract_vote/\", retract_comment_vote, name=\"retract_comment_vote\"),\n    path(\"comment/<uuid:comment_id>/edit/\", edit_comment, name=\"edit_comment\"),\n    path(\"comment/<uuid:comment_id>/pin/\", pin_comment, name=\"pin_comment\"),\n    path(\"comment/<uuid:comment_id>/delete/\", delete_comment, name=\"delete_comment\"),\n\n    path(\"telegram/link/\", link_telegram, name=\"link_telegram\"),\n    path(\"telegram/webhook/<str:token>/\", webhook_telegram, name=\"webhook_telegram\"),\n\n    path(\"notifications/confirm/<str:secret>/\", email_confirm, name=\"email_confirm\"),\n    path(\"notifications/confirm/<str:secret>/<str:legacy_code>/\", email_confirm, name=\"email_confirm_legacy\"),\n    path(\"notifications/unsubscribe/<str:user_id>/<str:secret>/\", email_unsubscribe, name=\"email_unsubscribe\"),\n    path(\"notifications/switch/<str:digest_type>/<str:user_id>/<str:secret>/\", email_digest_switch,\n         name=\"email_digest_switch\"),\n    path(\"notifications/renderer/digest/weekly/\", weekly_digest, name=\"render_weekly_digest\"),\n    path(\"notifications/renderer/digest/daily/<slug:user_slug>/\", daily_digest, name=\"render_daily_digest\"),\n\n    path(\"docs/<slug:doc_slug>/\", docs, name=\"docs\"),\n\n    path(\"network/\", network, name=\"network\"),\n\n    path(\"godmode/\", god_settings, name=\"god_settings\"),\n    path(\"godmode/dev_login/\", debug_dev_login, name=\"debug_dev_login\"),\n    path(\"godmode/random_login/\", debug_random_login, name=\"debug_random_login\"),\n\n    # feeds\n    path(\"sitemap.xml\", sitemap, {\"sitemaps\": sitemaps}, name=\"sitemap\"),\n    path(\"posts.rss\", NewPostsRss(), name=\"rss\"),\n\n    path(\"robots.txt\", robots, name=\"robots\"),\n\n    # keep these guys at the bottom\n    re_path(r\"^{}/$\".format(POST_TYPE_RE), feed, name=\"feed_type\"),\n    re_path(r\"^{}/{}/$\".format(POST_TYPE_RE, ORDERING_RE), feed, name=\"feed_ordering\"),\n    path(\"<slug:post_type>/<slug:post_slug>/\", show_post, name=\"show_post\"),\n    path(\"<slug:post_type>/<slug:post_slug>.md\", md_show_post, name=\"md_show_post\"),\n    path(\"<slug:post_type>/<slug:post_slug>.json\", api_show_post, name=\"api_show_post\"),\n]\n\nif settings.DEBUG:\n    import debug_toolbar\n\n    urlpatterns = [path(\"__debug__/\", include(debug_toolbar.urls))] + urlpatterns\n\n# According to django doc: https://docs.djangoproject.com/en/3.1/topics/testing/overview/#other-test-conditions\n# Regardless of the value of the DEBUG setting in your configuration file, all Django tests run with DEBUG=False\n# so we use separate special var instead of settings.DEBUG\nif settings.TESTS_RUN:\n    from debug.api import api_me\n\n    urlpatterns.append(path(\"debug/me\", api_me, name=\"debug_api_me\"))\n", "path": "club/urls.py"}]}