total = sum(prices)
@@ -34,15 +34,14 @@ Traceback (most recent call last):
TypeError: unsupported operand type(s) for +: 'int' and 'str'
```
-That tells a helper the bug is in your `sum`, that one of your prices is a
-string, and which line to look at. "I get a TypeError" tells them nothing.
+That tells a helper the bug is in your `sum`, that one of your prices is a string, and which line to
+look at. "I get a TypeError" tells them nothing.
## Format your code
-Use a fenced block with a language tag. In Discord, three backticks and the
-language:
+Use a fenced block with a language tag. In Discord, three backticks and the language:
-````text
+````
```python
prices = ["4.99", 3.50]
print(sum(prices))
@@ -51,18 +50,18 @@ print(sum(prices))
!!! failure "Not screenshots"
- [Rule 7](../rules/index.md#7-ask-effective-questions) asks for code as text
- because helpers need to run your code. Nobody is retyping your program from a
- photograph, and screen readers can't read it at all.
+ [Rule 7](../rules/index.md#7-ask-effective-questions) asks for code as text because helpers need to
+ run your code. Nobody is retyping your program from a photograph, and screen readers can't read it
+ at all.
## Cut it down first
-Post the smallest program that still shows the problem. Deleting code until the
-bug disappears tells you where the bug is — you'll often solve it yourself before
-you finish, which is the best possible outcome.
+Post the smallest program that still shows the problem. Deleting code until the bug disappears tells
+you where the bug is — you'll often solve it yourself before you finish, which is the best possible
+outcome.
-If your file is 400 lines and you don't know which part is broken, say so, and
-post the part you suspect.
+If your file is 400 lines and you don't know which part is broken, say so, and post the part you
+suspect.
??? example "Before and after"
@@ -82,22 +81,21 @@ post the part you suspect.
## Say what you already tried
-It stops people suggesting it again, and it tells them how you think. "I checked
-the type with `print(type(prices[0]))` and it's a string, but I don't see where it
-became one" is a question someone will enjoy answering.
+It stops people suggesting it again, and it tells them how you think. "I checked the type with
+`print(type(prices[0]))` and it's a string, but I don't see where it became one" is a question
+someone will enjoy answering.
## Things that slow you down
-| Don't | Why |
-|-------|-----|
-| "Does anyone know Python?" | Obviously not, this is a server about snakes after all. Ask the actual question. Get on with it. |
-| "Can someone DM me?" | No, that's so much mmore effort than just asking the question. |
-| Pinging a specific person | Are you in a conversation with that person? Do you know them? No? Don't ping. |
-| Deleting your question after it's solved | The next person with your bug wanted to read it, and it makes the chat lame. |
+| Don't | Why |
+|------------------------------------------|--------------------------------------------------------------------------------------------------|
+| "Does anyone know Python?" | Obviously not, this is a server about snakes after all. Ask the actual question. Get on with it. |
+| "Can someone DM me?" | No, that's so much more effort than just asking the question. |
+| Pinging a specific person | Are you in a conversation with that person? Do you know them? No? Don't ping. |
+| Deleting your question after it's solved | The next person with your bug wanted to read it, and it makes the chat lame. |
## After you get an answer
-Say whether it worked. Helpers are debugging blind, and "that fixed it" is the
-only signal they get.
+Say whether it worked. Helpers are debugging blind, and "that fixed it" is the only signal they get.
If it didn't work, say what happened instead.
diff --git a/docs/resources/cheat-sheets.md b/docs/resources/cheat-sheets.md
index 534f74a..26b748e 100644
--- a/docs/resources/cheat-sheets.md
+++ b/docs/resources/cheat-sheets.md
@@ -4,8 +4,8 @@ description: Quick references and small tools worth keeping in a browser tab.
# Cheat sheets and tools
-Things you look at for thirty seconds and then close. None of this teaches you
-Python — it saves you from re-learning the same syntax every few weeks.
+Things you look at for thirty seconds and then close. None of this teaches you Python — it saves you
+from re-learning the same syntax every few weeks.
## Quick reference
@@ -32,22 +32,21 @@ Python — it saves you from re-learning the same syntax every few weeks.
| [pyreadiness.org](https://pyreadiness.org/) | A package won't install and you suspect your Python version is too new |
| [Visual TK](https://visualtk.com/) | Laying out a `tkinter` window by dragging, then taking the generated code as a starting point |
-Treat generated GUI code as a first draft. It gets a window on screen; it won't
-be organised the way you'd organise it.
+Treat generated GUI code as a first draft. It gets a window on screen; it won't be organised the way
+you'd organise it.
## Learning git
Git isn't Python, and it will still take up a week of your life eventually.
-[Learn Git Branching](https://learngitbranching.js.org/) is the best free
-introduction we know of. It draws the commit graph as you type real commands,
-which turns `rebase` and `merge` from incantations into something you can see.
+[Learn Git Branching](https://learngitbranching.js.org/) is the best free introduction we know of.
+It draws the commit graph as you type real commands, which turns `rebase` and `merge` from
+incantations into something you can see.
-Do the "Introduction Sequence" before your first pull request and most of the
-scary parts of git stop being scary.
+Do the "Introduction Sequence" before your first pull request and most of the scary parts of git
+stop being scary.
## Where to go next
The [learning path](learning-path.md) has material sorted by level, and the
-[project briefs](../projects/build-something/index.md) give you something to
-point all this at.
+[project briefs](../projects/build-something/index.md) give you something to point all this at.
diff --git a/docs/resources/getting-started.md b/docs/resources/getting-started.md
index acf0a5c..b9d427c 100644
--- a/docs/resources/getting-started.md
+++ b/docs/resources/getting-started.md
@@ -4,18 +4,18 @@ description: Install Python, pick an editor, and understand virtual environments
# Getting started
-Get a working Python and an editor that helps you. Half the questions in the help
-channels are environment problems wearing a costume.
+Get a working Python and an editor that helps you. Half the questions in the help channels are
+environment problems wearing a costume.
## Install Python
-Get 3.12 or newer. I'd avoid any version of python that isn't in the [latest stable release](https://devguide.python.org/versions/).
+Get 3.12 or newer. I'd avoid any version of python that isn't in the
+[latest stable release](https://devguide.python.org/versions/).
=== "Windows"
- Install from [python.org](https://www.python.org/downloads/). Tick **Add
- python.exe to PATH** in the installer — it's off by default and it's the
- single most common cause of "python is not recognized".
+ Install from [python.org](https://www.python.org/downloads/). Tick **Add python.exe to PATH** in the
+ installer — it's off by default and it's the single most common cause of "python is not recognized".
Verify it, using the `py` launcher that ships with the Windows installer:
@@ -26,8 +26,8 @@ Get 3.12 or newer. I'd avoid any version of python that isn't in the [latest sta
!!! warning "Skip the Microsoft Store version"
- It works, mostly, until it doesn't. Its sandboxing breaks tools that
- expect to write next to the interpreter.
+ It works, mostly, until it doesn't. Its sandboxing breaks tools that expect to write next to the
+ interpreter.
=== "macOS"
@@ -40,28 +40,26 @@ Get 3.12 or newer. I'd avoid any version of python that isn't in the [latest sta
Python 3.13.14
```
- Or download the installer from
- [python.org](https://www.python.org/downloads/) if you'd rather not add a
- package manager.
+ Or download the installer from [python.org](https://www.python.org/downloads/) if you'd rather not
+ add a package manager.
=== "Linux"
- Your distribution has a Python, and it's probably fine for scripts. For
- anything you plan to keep, install a version you control:
+ Your distribution has a Python, and it's probably fine for scripts. For anything you plan to keep,
+ install a version you control:
```console
$ sudo apt install python3.13 python3.13-venv # Debian, Ubuntu
$ sudo dnf install python3.13 # Fedora
```
- The `-venv` package is separate on Debian and Ubuntu, and leaving it out
- breaks virtual environments with a genuinely baffling error.
+ The `-venv` package is separate on Debian and Ubuntu, and leaving it out breaks virtual environments
+ with a genuinely baffling error.
## Pick an editor
-No editor here is better than the others — more features is not the same as more
-suitable. Pick one that fits what you're doing now and change later if it starts
-getting in the way.
+No editor here is better than the others — more features is not the same as more suitable. Pick one
+that fits what you're doing now and change later if it starts getting in the way.
=== "Barely any setup"
@@ -89,8 +87,7 @@ getting in the way.
=== "Full IDE"
- Refactoring, debugging and project tooling built in. Heavier to start, worth
- it on anything large.
+ Refactoring, debugging and project tooling built in. Heavier to start, worth it on anything large.
| Editor | Notes |
|--------|-------|
@@ -100,14 +97,14 @@ getting in the way.
!!! tip "Don't shop for long"
- An hour comparing editors is an hour not spent writing Python. Take VS Code
- if you have no opinion yet.
+ An hour comparing editors is an hour not spent writing Python. Take VS Code if you have no opinion
+ yet.
## Virtual environments
-A virtual environment is a per-project copy of Python's package directory.
-Without one, every project shares one set of packages, and two projects that need
-different versions of the same library can't both work.
+A virtual environment is a per-project copy of Python's package directory. Without one, every
+project shares one set of packages, and two projects that need different versions of the same
+library can't both work.
=== "venv (built in)"
@@ -118,13 +115,13 @@ different versions of the same library can't both work.
(.venv) $ pip install requests
```
- The `(.venv)` prefix means it's active. If it isn't there, `pip install` is
- installing somewhere you didn't intend.
+ The `(.venv)` prefix means it's active. If it isn't there, `pip install` is installing somewhere you
+ didn't intend.
=== "uv (faster)"
- [uv](https://docs.astral.sh/uv/) replaces `pip` and `venv` with one much
- faster tool, and it manages Python versions too:
+ [uv](https://docs.astral.sh/uv/) replaces `pip` and `venv` with one much faster tool, and it manages
+ Python versions too:
```console
$ uv init myproject
@@ -133,17 +130,16 @@ different versions of the same library can't both work.
$ uv run main.py
```
- `uv run` activates the environment for you, so there's nothing to forget.
- Our own projects use it — see [Eos](../projects/our-projects/eos.md).
+ `uv run` activates the environment for you, so there's nothing to forget. Our own projects use it —
+ see [Eos](../projects/our-projects/eos.md).
!!! tip "Add .venv to .gitignore"
- A virtual environment is build output. It's large, it's platform-specific,
- and committing it will earn you comments on your first pull request.
+ A virtual environment is build output. It's large, it's platform-specific, and committing it will
+ earn you comments on your first pull request.
## Where to go next
The [learning path](learning-path.md) has material sorted by level, and the
-[cheat sheets and tools](cheat-sheets.md) page has the things worth keeping in a
-browser tab. If you're already stuck on something,
-[ask well](asking-good-questions.md) and you'll get an answer.
+[cheat sheets and tools](cheat-sheets.md) page has the things worth keeping in a browser tab. If
+you're already stuck on something, [ask well](asking-good-questions.md) and you'll get an answer.
diff --git a/docs/resources/index.md b/docs/resources/index.md
index 24a9621..37f79b9 100644
--- a/docs/resources/index.md
+++ b/docs/resources/index.md
@@ -4,8 +4,8 @@ description: Curated Python learning material, vetted by people who answer quest
# Resources
-Material we recommend often enough to write down. Everything here has been read
-by someone in the community who then said it was worth your time.
+Material we recommend often enough to write down. Everything here has been read by someone in the
+community who then said it was worth your time.
@@ -49,13 +49,13 @@ by someone in the community who then said it was worth your time.
## Suggesting a resource
-Open a pull request against this site. Say what the resource is, who it's for,
-and why you're recommending it over the obvious alternative.
+Open a pull request against this site. Say what the resource is, who it's for, and why you're
+recommending it over the obvious alternative.
-We reject more suggestions than we accept, usually because the list is already
-long enough at that level. Nothing personal.
+We reject more suggestions than we accept, usually because the list is already long enough at that
+level. Nothing personal.
!!! note "No affiliate links"
- Recommendations here are unpaid. If you have a financial interest in
- something you're suggesting, say so in the pull request.
+ Recommendations here are unpaid. If you have a financial interest in something you're suggesting,
+ say so in the pull request.
diff --git a/docs/resources/learning-path.md b/docs/resources/learning-path.md
index e7a1861..a6495d2 100644
--- a/docs/resources/learning-path.md
+++ b/docs/resources/learning-path.md
@@ -4,8 +4,8 @@ description: Books, courses and exercises sorted by level rather than by fame.
# Learning path
-Pick one thing from your level and finish it. Collecting resources is a
-procrastination technique with excellent branding.
+Pick one thing from your level and finish it. Collecting resources is a procrastination technique
+with excellent branding.
## Complete beginner
@@ -24,19 +24,17 @@ You've never written code, or you've written a little and it didn't stick.
Don't copy-paste them. The typos you make while typing are the lesson.
-If you'd rather see the whole route before you start,
-[roadmap.sh/python](https://roadmap.sh/python) lays the topics out as a map. Read
-it once for orientation, then close it — the map isn't the walk.
+If you'd rather see the whole route before you start, [roadmap.sh/python](https://roadmap.sh/python)
+lays the topics out as a map. Read it once for orientation, then close it — the map isn't the walk.
### An hour of video first
-Not a substitute for a course, but a decent way to find out whether the syntax
-scares you.
+Not a substitute for a course, but a decent way to find out whether the syntax scares you.
-- [Python in one hour](https://www.youtube.com/watch?v=8KCuHHeC_M0) — current,
- and a reasonable tour of the basics.
-- [An older one-hour crash course](https://www.youtube.com/watch?v=kqtD5dpn9C8)
- — some details have dated, the concepts haven't.
+- [Python in one hour](https://www.youtube.com/watch?v=8KCuHHeC_M0) — current, and a reasonable tour
+ of the basics.
+- [An older one-hour crash course](https://www.youtube.com/watch?v=kqtD5dpn9C8) — some details have
+ dated, the concepts haven't.
## Getting comfortable
@@ -51,9 +49,9 @@ You can write a script. You're unsure whether you're writing it well.
!!! note "Paid courses, without paying"
- [Courson](https://courson.xyz/) collects 100%-off vouchers for Udemy
- courses. The vouchers expire quickly and the quality varies as much as Udemy
- does, so check the reviews before you spend an evening on one.
+ [Courson](https://courson.xyz/) collects 100%-off vouchers for Udemy courses. The vouchers expire
+ quickly and the quality varies as much as Udemy does, so check the reviews before you spend an
+ evening on one.
## Building things
@@ -66,9 +64,9 @@ You can build something that works. You want it to be good.
## Practice between sessions
-Short problems keep the syntax in your fingers on the days you don't have an
-evening to spend. They're a supplement to building things, not a replacement —
-nobody ever shipped anything by grinding exercises.
+Short problems keep the syntax in your fingers on the days you don't have an evening to spend.
+They're a supplement to building things, not a replacement — nobody ever shipped anything by
+grinding exercises.
| Site | Shape | Notes |
|------|-------|-------|
@@ -80,31 +78,30 @@ nobody ever shipped anything by grinding exercises.
!!! tip "Read someone else's answer afterwards"
- Solve it yourself first, then look. The gap between your version and a good
- one is the part worth studying.
+ Solve it yourself first, then look. The gap between your version and a good one is the part worth
+ studying.
## Reference
-Worth bookmarking rather than reading start to finish. There's more of this on
-the [cheat sheets and tools](cheat-sheets.md) page.
+Worth bookmarking rather than reading start to finish. There's more of this on the
+[cheat sheets and tools](cheat-sheets.md) page.
-- [The standard library index](https://docs.python.org/3/library/) — read this
- before installing a dependency. The answer is often already installed.
-- [PEP 8](https://peps.python.org/pep-0008/) — the style guide. Most of it is
- handled by a formatter now.
-- [PEP 20](https://peps.python.org/pep-0020/) — the Zen of Python. Quoted more
- often than it's followed.
+- [The standard library index](https://docs.python.org/3/library/) — read this before installing a
+ dependency. The answer is often already installed.
+- [PEP 8](https://peps.python.org/pep-0008/) — the style guide. Most of it is handled by a formatter
+ now.
+- [PEP 20](https://peps.python.org/pep-0020/) — the Zen of Python. Quoted more often than it's
+ followed.
## What we don't recommend
-Tutorials older than about five years, unless they're teaching something that
-hasn't changed. Python 2 material, obviously. Anything promising fluency in a
-weekend.
+Tutorials older than about five years, unless they're teaching something that hasn't changed. Python
+2 material, obviously. Anything promising fluency in a weekend.
-Video playlists that never build anything are also a trap — you'll feel
-productive and retain very little. If a course has no exercises, add your own.
+Video playlists that never build anything are also a trap — you'll feel productive and retain very
+little. If a course has no exercises, add your own.
!!! question "Stuck choosing?"
- Ask in the help channels and say what you've already tried. Someone will
- have an opinion, and probably a better one than this page.
+ Ask in the help channels and say what you've already tried. Someone will have an opinion, and
+ probably a better one than this page.
diff --git a/docs/rules/channels.md b/docs/rules/channels.md
index b0855ec..bda8f80 100644
--- a/docs/rules/channels.md
+++ b/docs/rules/channels.md
@@ -4,9 +4,8 @@ description: Which channel your message belongs in.
# Channels
-Post in the right place and you'll get an answer faster. Post in the wrong place
-and maybe someone will move you, or your question won't get seen.
-
+Post in the right place and you'll get an answer faster. Post in the wrong place and maybe someone
+will move you, or your question won't get seen.
## Getting help
@@ -21,24 +20,22 @@ half-answers and an irritated moderator.
## Everything else
-| Channel type | For |
-|--------------|-----|
-| General chat | Anything not a support request |
-| Off-topic | Not Python. Still covered by [the rules](index.md) |
-| Voice | Pair programming, study sessions, quiet co-working |
+| Channel type | For |
+|--------------|----------------------------------------------------|
+| General chat | Anything not a support request |
+| Off-topic | Not Python. Still covered by [the rules](index.md) |
+| Voice | Pair programming, study sessions, quiet co-working |
## Threads
-Use a thread when a conversation outlives its usefulness to the channel — a long
-debugging session, a tangent, a design argument. Start one, don't apologise for
-it.
+Use a thread when a conversation outlives its usefulness to the channel — a long debugging session,
+a tangent, a design argument. Start one, don't apologise for it.
Threads inherit the rules of their parent channel.
## Bot commands
-Commands work in most channels, but check before filling a help channel with bot
-output.
+Commands work in most channels, but check before filling a help channel with bot output.
=== "Slash commands"
@@ -55,7 +52,6 @@ output.
The full list, with permissions and arguments, is in the
[Eos documentation](../projects/our-projects/eos.md).
-
=== "Run code in the chat!"
`>run` executes a Python code-block and replies with the output.
@@ -64,7 +60,4 @@ output.
````text
>run
- ```py
- print("oh wow!")
- ```
- ````
+ ```py print("oh wow!") ``` ````
diff --git a/docs/rules/code-of-conduct.md b/docs/rules/code-of-conduct.md
index d7c1562..3ff6073 100644
--- a/docs/rules/code-of-conduct.md
+++ b/docs/rules/code-of-conduct.md
@@ -4,8 +4,8 @@ description: What counts as harassment here, and what staff do about it.
# Code of conduct
-[Rule 1](index.md#1-be-kind-and-respectful) says be kind and respectful. This
-page explains what that means and what staff do about it.
+[Rule 1](index.md#1-be-kind-and-respectful) says be kind and respectful. This page explains what
+that means and what staff do about it.
## Expected behaviour
@@ -16,37 +16,34 @@ page explains what that means and what staff do about it.
## Unacceptable behaviour
-The following gets you removed, and the [moderation ladder](moderation.md#the-ladder) doesn't necessarily apply:
+The following gets you removed, and the [moderation ladder](moderation.md#the-ladder) doesn't
+necessarily apply:
-- Slurs or harassment based on race, sex, gender, sexuality, disability, religion
- or nationality.
+- Slurs or harassment based on race, sex, gender, sexuality, disability, religion or nationality.
- Sexual attention or content directed at a member, including in DMs.
- Threats, stalking, or posting someone's personal information.
- Sustained disruption after being asked to stop.
!!! danger "Minors"
- Discord's terms require members to be 13 or older, and older still in some
- countries. Any sexual conduct directed at someone who is or appears to be a
- minor results in an immediate ban and a report to Discord's Trust & Safety
- team. There is no appeal.
+ Discord's terms require members to be 13 or older, and older still in some countries. Any sexual
+ conduct directed at someone who is or appears to be a minor results in an immediate ban and a report
+ to Discord's Trust & Safety team. There is no appeal.
## Grey areas
-Some things aren't in either list. Heated technical arguments, sarcasm and
-swearing are all normal here. The line is whether a reasonable person would read
-it as aimed at humiliating someone.
+Some things aren't in either list. Heated technical arguments, sarcasm and swearing are all normal
+here. The line is whether a reasonable person would read it as aimed at humiliating someone.
-If you're not sure whether something crosses the line, it probably does, and
-asking a moderator first costs nothing.
+If you're not sure whether something crosses the line, it probably does, and asking a moderator
+first costs nothing.
## Enforcement
-Reports go to staff, who decide together where possible. A moderator involved in
-the incident doesn't rule on it unless nobody else is around.
+Reports go to staff, who decide together where possible. A moderator involved in the incident
+doesn't rule on it unless nobody else is around.
-Staff will tell you what rule you broke and what happens next. They won't share
-who reported you.
+Staff will tell you what rule you broke and what happens next. They won't share who reported you.
## Staff have the final say
diff --git a/docs/rules/index.md b/docs/rules/index.md
index fb05be6..61a37f5 100644
--- a/docs/rules/index.md
+++ b/docs/rules/index.md
@@ -18,90 +18,85 @@ Seven rules. Read them once and you'll be fine.
## 1. Be kind and respectful
-Treat others the way you'd like to be treated. No mean-spirited comments or
-behaviour — keep conversations positive and constructive.
+Treat others the way you'd like to be treated. No mean-spirited comments or behaviour — keep
+conversations positive and constructive.
-Disagree as much as you like, but direct it at the code, the approach or the
-claim, never at the person holding it. Condescension counts, and "just being
-blunt" isn't a defence.
+Disagree as much as you like, but direct it at the code, the approach or the claim, never at the
+person holding it. Condescension counts, and "just being blunt" isn't a defense.
Harassment, slurs and bigotry get you removed without a warning ladder. See
[Code of conduct](code-of-conduct.md) for what that covers.
## 2. Stay on topic
-Stick to the subject of the channel you're posting in. If your question doesn't
-fit anywhere obvious, ask anyway — we'd rather help you find your way then you not ask because you didn't know where to ask.
+Stick to the subject of the channel you're posting in. If your question doesn't fit anywhere
+obvious, ask anyway — we'd rather help you find your way then you not ask because you didn't know
+where to ask.
[Channels](channels.md) says what goes where.
## 3. Share responsibly
-No self-promotion or unsolicited ads. Sharing a personal project is welcome and
-encouraged, as long as you aren't looking to sign people up for something.
+No self-promotion or unsolicited ads. Sharing a personal project is welcome and encouraged, as long
+as you aren't looking to sign people up for something.
When you share something you built:
- **Always include the source code.** A repository, a gist, or a fenced block.
-- **Never post an `.exe`**, or any other compiled binary. Nobody can read it,
- and nobody should run it. Ever.
+- **Never post an `.exe`**, or any other compiled binary. Nobody can read it, and nobody should run
+ it. Ever.
-Got something you genuinely need to advertise? Ask a moderator first through the
-**/ticket** system. If your heart is pure, and your intentions are good, we will probably let you do it!
+Got something you genuinely need to advertise? Ask a moderator first through the **/ticket** system.
+If your heart is pure, and your intentions are good, we will probably let you do it!
!!! tip "Nobody from staff will DM you first"
- Staff open a thread or use the ticket system. A DM claiming to be staff and
- asking you for anything is a scam. Report it.
+ Staff open a thread or use the ticket system. A DM claiming to be staff and asking you for anything
+ is a scam. Report it.
## 4. Ethical coding only
-Learning and exploring are the point of this server. Hacking and other unethical
-practices are not.
+Learning and exploring are the point of this server. Hacking and other unethical practices are not.
-White hat work is welcome as long as you're transparent about what you're doing
-and why. If you can't say who authorised it, don't ask about it here.
+White hat work is welcome as long as you're transparent about what you're doing and why. If you
+can't say who authorised it, don't ask about it here.
## 5. Moderators have final say
-If you have a concern or a dispute, the moderators have the final word. They work
-hard to keep this place safe and enjoyable, so trust their judgement — they're
-here to help.
+If you have a concern or a dispute, the moderators have the final word. They work hard to keep this
+place safe and enjoyable, so trust their judgement — they're here to help.
Arguing a decision in public channels after it's been made is itself a problem.
[Moderation](moderation.md) explains how to appeal properly.
## 6. No jobs or employment advertising
-Discord isn't where you'll find work — use a real job board. Job posts and
-recruitment pitches get deleted, and you'll be warned or banned depending on how
-we feel about it. See rule 5.
+Discord isn't where you'll find work — use a real job board. Job posts and recruitment pitches get
+deleted, and you'll be warned or banned depending on how we feel about it. See rule 5.
## 7. Ask effective questions
When you want help, give people something to work with:
- Describe the problem clearly and concisely.
-- Include the relevant code, the full error message, and screenshots where they
- actually add something.
+- Include the relevant code, the full error message, and screenshots where they actually add
+ something.
- Say what you've already tried and what you're trying to achieve.
- Be patient and open to guidance. We're here to help you grow.
-Paste code as text in a fenced block — not a screenshot of it, not a photo of
-your monitor. Helpers need to copy and run your code, and they can't copy a JPEG.
+Paste code as text in a fenced block — not a screenshot of it, not a photo of your monitor. Helpers
+need to copy and run your code, and they can't copy a JPEG.
-[Asking good questions](../resources/asking-good-questions.md) covers this in
-detail, with examples.
+[Asking good questions](../resources/asking-good-questions.md) covers this in detail, with examples.
## Reporting something
-Use the **/ticket** system. It reaches the moderators without putting the
-incident in a public channel.
+Use the **/ticket** system. It reaches the moderators without putting the incident in a public
+channel.
-Ping staff directly when something needs a moderator *now* — a raid, a scam, or
-someone in crisis.
+Ping staff directly when something needs a moderator *now* — a raid, a scam, or someone in crisis.
## What happens if you break a rule
-[Moderation](moderation.md) sets out the enforcement ladder, what the bot does
-automatically, and how to appeal.
+[Moderation](moderation.md) sets out the enforcement ladder, what the bot does automatically, and
+how to appeal.
diff --git a/docs/rules/moderation.md b/docs/rules/moderation.md
index 67d5239..8d7647d 100644
--- a/docs/rules/moderation.md
+++ b/docs/rules/moderation.md
@@ -8,14 +8,14 @@ What happens when a rule gets broken
## The ladder
-| Step | Action | Typically triggered by |
-|------|--------|------------------------|
-| 1 | Informal nudge in channel | First minor slip, you'll get notified |
-| 2 | Formal warning, logged | Repeat of the same slip, or ignoring a moderator |
-| 3 | Timeout, minutes to hours | Heated argument or overexcitment that won't cool down |
-| 4 | Quarantine | Spam, suspected compromised account. Step into our office. |
-| 5 | Kick | Pattern of warnings with no change |
-| 6 | Ban | Code of conduct breach, scams, ban evasion |
+| Step | Action | Typically triggered by |
+|------|---------------------------|------------------------------------------------------------|
+| 1 | Informal nudge in channel | First minor slip, you'll get notified |
+| 2 | Formal warning, logged | Repeat of the same slip, or ignoring a moderator |
+| 3 | Timeout, minutes to hours | Heated argument or overexcitment that won't cool down |
+| 4 | Quarantine | Spam, suspected compromised account. Step into our office. |
+| 5 | Kick | Pattern of warnings with no change |
+| 6 | Ban | Code of conduct breach, scams, ban evasion |
Steps aren't mandatory stops, and moderators get the final say.
@@ -23,23 +23,22 @@ Steps aren't mandatory stops, and moderators get the final say.
Some of this is handled by the bot, with no moderator involved.
-| Behaviour | Trigger | Action |
-|-----------|---------|--------|
-| Spam detection | Same message sent 3 or more times | Warns at 3, quarantines at 4, deletes the messages |
-| Verification | Joining the server | You must confirm you're not a robot to get the verified role |
-| Points | Sending or deleting a message | Adjusts your score — see [the leaderboard](../projects/our-projects/eos.md#points) |
+| Behaviour | Trigger | Action |
+|----------------|-----------------------------------|------------------------------------------------------------------------------------|
+| Spam detection | Same message sent 3 or more times | Warns at 3, quarantines at 4, deletes the messages |
+| Verification | Joining the server | You must confirm you're not a robot to get the verified role |
+| Points | Sending or deleting a message | Adjusts your score — see [the leaderboard](../projects/our-projects/eos.md#points) |
!!! info "Quarantine isn't a ban"
- Quarantine removes your verified role and hides the server's channels. It's
- what happens when the bot or a mod thinks your account is compromised, spamming or annoying.
- A moderator can release you in seconds once it's sorted.
+ Quarantine removes your verified role and hides the server's channels. It's what happens when the
+ bot or a mod thinks your account is compromised, spamming or annoying. A moderator can release you
+ in seconds once it's sorted.
## What moderators can see
-Message edits and deletions are logged to a staff-only channel, along with name
-changes, avatar changes, role changes, and joins and leaves. Your deleted
-messages are already logged.
+Message edits and deletions are logged to a staff-only channel, along with name changes, avatar
+changes, role changes, and joins and leaves. Your deleted messages are already logged.
Staff cannot read your DMs with other members.
@@ -47,14 +46,13 @@ Staff cannot read your DMs with other members.
=== "Timeout or warning"
- Wait for it to expire, then take it up with the moderator who issued it. If
- you think they got it wrong, ask another moderator to review.
+ Wait for it to expire, then take it up with the moderator who issued it. If you think they got it
+ wrong, ask another moderator to review.
=== "Kick"
- Rejoin with the invite. A kick isn't a ban — it's a firm request to reset
- your behaviour. Come back and pick up where you left off, minus the
- behaviour.
+ Rejoin with the invite. A kick isn't a ban — it's a firm request to reset your behaviour. Come back
+ and pick up where you left off, minus the behaviour.
=== "Ban"
diff --git a/requirements.txt b/requirements.txt
deleted file mode 100644
index 5a257e8..0000000
--- a/requirements.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-# This file was autogenerated by uv via the following command:
-# uv export --no-dev --no-hashes --no-emit-project -o requirements.txt
-click==8.4.2
- # via zensical
-colorama==0.4.6 ; sys_platform == 'win32'
- # via click
-deepmerge==2.1.0
- # via zensical
-jinja2==3.1.6
- # via zensical
-markdown==3.10.2
- # via
- # pymdown-extensions
- # zensical
-markupsafe==3.0.3
- # via jinja2
-pygments==2.20.0
- # via zensical
-pymdown-extensions==11.0.1
- # via zensical
-pyyaml==6.0.3
- # via
- # pymdown-extensions
- # zensical
-tomli==2.4.1
- # via zensical
-zensical==0.0.51
- # via practical-python-docs