CINXE.COM

Quick Ops Guide | Libera Chat

<!DOCTYPE html> <html lang="en"><head> <link rel="preload" href="/static/fonts/comfortaa-v30-subset-regular.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/static/fonts/ubuntu-v15-latin-regular.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/static/fonts/ubuntu-v15-subset-500.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/static/img/libera-color.svg" as="image" type="image/svg+xml"> <meta charset="utf-8"> <meta content="IE=edge" http-equiv="X-UA-Compatible"> <meta content="width=device-width, initial-scale=1" name="viewport"><!-- Begin Jekyll SEO tag v2.7.1 --> <title>Quick Ops Guide | Libera Chat</title> <meta name="generator" content="Jekyll v4.3.0" /> <meta property="og:title" content="Quick Ops Guide" /> <meta property="og:locale" content="en_GB" /> <meta name="description" content="This guide aims to cover the basics you need to know to manage who is in your channel. For permissions like operator or voice, we have a guide that covers setting up permissions." /> <meta property="og:description" content="This guide aims to cover the basics you need to know to manage who is in your channel. For permissions like operator or voice, we have a guide that covers setting up permissions." /> <link rel="canonical" href="https://libera.chat/guides/quickops" /> <meta property="og:url" content="https://libera.chat/guides/quickops" /> <meta property="og:site_name" content="Libera Chat" /> <meta property="og:type" content="article" /> <meta property="article:published_time" content="2025-04-02T18:04:34+00:00" /> <meta name="twitter:card" content="summary" /> <meta property="twitter:title" content="Quick Ops Guide" /> <script type="application/ld+json"> {"description":"This guide aims to cover the basics you need to know to manage who is in your channel. For permissions like operator or voice, we have a guide that covers setting up permissions.","@type":"TechArticle","url":"https://libera.chat/guides/quickops","headline":"Quick Ops Guide","dateModified":"2025-04-02T18:04:34+00:00","datePublished":"2025-04-02T18:04:34+00:00","@context":"https://schema.org"}</script> <!-- End Jekyll SEO tag --> <link rel="alternate" type="application/atom+xml" title="Libera Chat News" href="/atom.xml"> <link rel="icon" type="image/svg+xml" href="/static/img/libera-color.svg"> <link rel="alternate icon" href="/favicon.ico"> <!-- Stylesheets --> <style>/*! modern-normalize v1.0.0 | MIT License | https://github.com/sindresorhus/modern-normalize */ *,::after,::before{box-sizing:border-box}:root{-moz-tab-size:4;tab-size:4}html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}body{font-family:system-ui,-apple-system,'Segoe UI',Roboto,Helvetica,Arial,sans-serif,'Apple Color Emoji','Segoe UI Emoji'}hr{height:0;color:inherit}abbr[title]{text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Consolas,'Liberation Mono',Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}::-moz-focus-inner{border-style:none;padding:0}:-moz-focusring{outline:1px dotted ButtonText}:-moz-ui-invalid{box-shadow:none}legend{padding:0}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}</style> <style>@font-face { /* comfortaa-regular - subset */ font-family: 'Comfortaa'; src: url('/static/fonts/comfortaa-v30-subset-regular.woff2') format('woff2'), url('/static/fonts/comfortaa-v30-subset-regular.woff') format('woff'), url('/static/fonts/comfortaa-v30-subset-regular.ttf') format('truetype'); font-style: normal; font-weight: 400; font-display: swap; /* . C L a b e h i r t */ unicode-range: U+002E, U+0043, U+004C, U+0061-0062, U+0065, U+0068-0069, U+0072, U+0074; } @font-face { /* ubuntu-regular - latin */ font-family: 'Ubuntu'; src: local(''), url('/static/fonts/ubuntu-v15-latin-regular.woff2') format('woff2'), url('/static/fonts/ubuntu-v15-latin-regular.woff') format('woff'), url('/static/fonts/ubuntu-v15-latin-regular.ttf') format('truetype'); font-style: normal; font-weight: 400; font-display: swap; } @font-face { /* ubuntu-500 - subset */ font-family: 'Ubuntu'; src: local(''), url('/static/fonts/ubuntu-v15-subset-500.woff2') format('woff2'), url('/static/fonts/ubuntu-v15-subset-500.woff') format('woff'), url('/static/fonts/ubuntu-v15-subset-500.ttf') format('truetype'); font-style: normal; font-weight: 500; font-display: swap; /* C c e n o t */ unicode-range: U+0043 U+0063 U+0065 U+006E U+006F U+0074; } :root { --header-height: 4rem; --content-inline-padding: 1.3rem; --content-max-width: 80ch; /* define our palette for all themes */ --white: #fff; --gray-100: #f3f4f6; --gray-200: #e5e7eb; --gray-300: #d1d5db; --gray-400: #9ca3af; --gray-800: #1f2937; --gray-900: #111827; --brand-purple: #5555ff; --brand-pink: #ff55dd; /* light-theme vars */ --c-bg: var(--gray-100); --c-bg-secondary: var(--white); --c-text: var(--gray-800); --c-border: var(--gray-300); --c-hl: var(--brand-pink); --c-hl-secondary: var(--brand-purple); --c-text-on-hl: var(--gray-800); --c-text-on-hl-secondary: var(--white); } @media (prefers-color-scheme: dark) { :root { --c-bg: var(--gray-800); --c-bg-secondary: var(--gray-900); --c-text: var(--gray-200); --c-border: var(--gray-400); } } * { color: var(--c-text); box-sizing: border-box; font-family: Ubuntu, sans-serif; letter-spacing: .1ch; } main *, .hero * { line-height: 1.5; } body { background-color: var(--c-bg); min-height: 100vh; display: grid; grid-template-rows: var(--header-height) min-content auto auto min-content; grid-template-columns: 1fr; grid-template-areas: "header" "hero" "main" "aside" "footer"; } a { text-decoration: underline; text-underline-offset: .05rem; } a:hover { text-underline-offset: .25rem; color: var(--c-hl); } h1, h2, h3, h4, h5, h6, p { word-break: break-word; scroll-margin-block-start: 4.5rem; } h1, h2, h3, h4, h5, h6, strong { font-weight: 500; } em { font-style: italic; } h1, h2, h3, h4, h5, h6 { margin-block-end: 0; text-wrap: balance; } h1+*, h2+*, h3+*, h4+*, h5+*, h6+* { margin-block-start: 0; } main h1 { font-size: 2.25rem; } main h2 { font-size: 1.5rem; } main h3 { font-size: 1.25rem; } main :is(h2, h3, h4, h5, h6) a { text-decoration: none; position: relative; } main :is(h2, h3, h4, h5, h6) a:hover::before { content: '#'; position: absolute; left: -1.5ch; bottom: 0; font-weight: normal; font-size: 1rem; } @media screen and (min-width: 800px) { body { grid-template-columns: min-content 8fr; grid-template-rows: 4rem min-content auto min-content; grid-template-areas: "header header" "hero hero" "aside main" "footer footer"; } } .skiplink { z-index: 9999; transform: translateY(calc(-100% - 1rem)); display: block; position: absolute; height: 4rem; padding: var(--content-inline-padding); background-color: var(--c-bg); border-inline-end: 1px solid var(--c-border); border-block-end: 1px solid var(--c-border); } .skiplink:focus { z-index: 9999; transform: translateY(0); } header { grid-area: header; height: var(--header-height); border-block-end: 1px solid var(--c-border); background-color: var(--c-bg-secondary); position: sticky; top: 0; z-index: 1000; display: flex; flex-direction: row; flex-wrap: nowrap; justify-content: space-between; } header a { text-decoration: none; } header .logo { display: flex; flex-wrap: nowrap; align-items: center; height: 100%; padding-inline-start: var(--content-inline-padding); } header .logo img { padding-block-end: .3rem; } header .logo h1 { margin: 0; margin-bottom: -.4rem; font-size: 1.7rem; line-height: 1; font-family: Comfortaa, Ubuntu, sans-serif; font-weight: bold; } header .nav-toggle { display: block; border-inline-start: 1px solid var(--c-border); padding: 0 1rem; display: flex; align-items: center; cursor: pointer; } header nav details summary, header nav a { border-block-end: 1px solid var(--c-border); padding: 1rem; display: flex; align-items: center; cursor: pointer; white-space: nowrap; } header nav details summary::before { content: "►"; padding-inline-end: .3rem; } header nav details[open] summary::before { content: "▼"; } header nav .nav-close { display: none; } header nav.show .nav-close { display: flex; } header nav { transform: translateY(calc(-100% - 1rem)); display: flex; flex-direction: column; justify-content: flex-start; position: fixed; right: 0; top: 0; bottom: 0; background-color: var(--c-bg-secondary); min-width: 20rem; max-width: 30rem; border-inline-start: 1px solid var(--c-border); z-index: 10000; } header nav.show, header nav:focus-within { transform: translateY(0); } header nav details summary.highlight, header nav a.highlight { background-color: var(--c-hl); color: var(--c-text-on-hl); font-weight: 500; } header nav details summary:hover, header nav a:hover { background-color: var(--c-bg); } header nav details summary.highlight:hover, header nav a.highlight:hover { background-color: var(--c-hl-secondary); color: var(--c-text-on-hl-secondary); } header nav details { display: flex; flex-direction: column; position: relative; } header nav details a { padding-inline-start: 2.5rem; } @media screen and (min-width: 950px) { header .nav-toggle, header .nav-close, header nav.show .nav-close { display: none; } header nav { transform: initial; display: flex; flex-direction: row; justify-content: flex-end; position: initial; background-color: initial; min-width: unset; max-width: unset; border-inline-start: none; } header nav.show, header nav:focus-within { transform: initial; } header nav details summary, header nav a { border-block-end: none; border-inline-start: 1px solid var(--c-border); border-inline-end: 1px solid var(--c-border); padding: 0 1rem; display: flex; margin-inline-start: -1px; align-items: center; height: 100%; } header nav details:last-of-type summary { border-inline-end: none; } header nav details[open] summary { border-block-end: 1px solid var(--c-border); height: calc(100% + 1px); } header nav details div { position: absolute; right: 0; } header nav details div a { background-color: var(--c-bg-secondary); border-block-end: 1px solid var(--c-border); padding: 1rem; } } main { grid-area: main; padding: 0 var(--content-inline-padding); max-width: var(--content-max-width); min-width: 0; width: 100%; margin: 2rem auto; } nav.article-nav { display: flex; flex-direction: row; justify-content: center; } nav.article-nav div { width: 33%; text-align: center; } footer { grid-area: footer; align-self: end; background-color: var(--c-bg-secondary); border-block-start: 1px solid var(--c-border); padding: .5rem var(--content-inline-padding); display: flex; flex-direction: row; flex-wrap: wrap; justify-content: space-between; } footer div { line-height: 2; } footer div .mobile-hide { display: none; } footer div a { white-space: nowrap; } footer div a:not([rel*=license]), footer div .copyright { display: block; } @media screen and (min-width: 800px) { footer div { line-height: 1.5; } footer div:last-of-type { padding-inline-start: 1rem; } footer div .mobile-hide { display: inline; } footer div a:not([rel*=license]), footer div .copyright { display: initial; } } </style> <style>aside { grid-area: aside; background-color: var(--c-bg-secondary); /* padding: var(--content-inline-padding); */ border-block-start: 1px solid var(--c-border); width: 100%; height: min-content; align-self: end; display: flex; flex-direction: column; justify-content: flex-start; min-width: 30ch; overflow-y: auto; } aside .title { margin-block-end: 0; margin-inline: var(--content-inline-padding); margin-block-start: 1rem; margin-block-end: .5rem; font-size: 2rem; font-weight: 500; } aside details:not(:last-child) { border-block-end: 1px solid var(--c-border); } aside details summary, aside a { padding: 1rem; display: flex; align-items: center; cursor: pointer; white-space: nowrap; } aside a { text-decoration: none; } aside details summary::before { content: "►"; padding-inline-end: .3rem; } aside details[open] summary::before { content: "▼"; } aside details summary:hover, aside a:hover, aside a.active { background-color: var(--c-bg); } aside details { display: flex; flex-direction: column; position: relative; } aside details a { padding-inline-start: 2.5rem; } @media screen and (min-width: 800px) { aside { border-block-start: none; border-inline-end: 1px solid var(--c-border); width: max-content; height: 100%; } } </style> <link rel="stylesheet" href="/static/css/additional-styles.css"> <script src="/static/js/header-links.js" defer></script> </head> <body><a class="skiplink" href="#main">Skip to content</a> <header> <a class="logo" href="https://libera.chat" aria-label="Libera Chat, back to start page"> <img alt="" src="/static/img/libera-color.svg" height="48px" data-proofer-ignore> <h1>Libera.&ZeroWidthSpace;Chat</h1> </a> <a id="nav-toggle" class="nav-toggle hidden" aria-controls="main-nav"><span>Navigation</span></a> <nav class="" id="main-nav" aria-labelledby="nav-toggle" role="menubar"> <a id="nav-close" class="nav-close hidden" aria-controls="main-nav"><span>Close</span></a> <details name="main-navigation"> <summary >About</summary> <div> <a role="menuitem" href="/policies" ><span>Network Policies</span></a> <a role="menuitem" href="/guidelines" ><span>Channel Guidelines</span></a> <a role="menuitem" href="/news" ><span>Blog & News</span></a> <a role="menuitem" href="/about" ><span>About Libera Chat</span></a> <a role="menuitem" href="/bylaws" ><span>Bylaws</span></a> <a role="menuitem" href="/minutes" ><span>Meeting Minutes</span></a> <a role="menuitem" href="/annual-reports" ><span>Annual Reports</span></a> <a role="menuitem" href="/sponsors" ><span>Sponsors</span></a> </div> </details> <details name="main-navigation"> <summary >Contribute</summary> <div> <a role="menuitem" href="/contributing/donate" ><span>Donate</span></a> <a role="menuitem" href="/contributing/merch" ><span>Buy merch</span></a> <a role="menuitem" href="/contributing/sponsor" ><span>Sponsor Us</span></a> <a role="menuitem" href="/contributing/development" ><span>Development</span></a> </div> </details> <a role="menuitem" href="/chanreg"><span>Channel Namespaces</span></a> <a role="menuitem" href="/guides"><span>Guides</span></a> <a role="menuitem" href="/guides/faq"><span>FAQ</span></a> <details name="main-navigation"> <summary class="highlight" >Connect</summary> <div> <a role="menuitem" href="https://web.libera.chat" rel="noopener noreferrer" ><span>Webchat</span></a> <a role="menuitem" href="ircs://irc.libera.chat:6697" ><span>irc.libera.chat:6697 (TLS)</span></a> <a role="menuitem" href="/guides/connect" ><span>How to Connect</span></a> </div> </details> </nav> </header> <script async> const navToggle = document.querySelector('#nav-toggle') const navClose = document.querySelector('#nav-close') const mainNav = document.querySelector('#main-nav') // progressive enhancement! navToggle.classList.remove('hidden') navClose.classList.remove('hidden') navToggle.addEventListener('click', event => { event.preventDefault() mainNav.classList.toggle('show') }) navClose.addEventListener('click', event => { event.preventDefault() mainNav.classList.remove('show') }) </script> <aside role="menu"> <span class="title">Guides</span> <details open> <summary>About IRC</summary> <div> <a role="menuitem" href="/guides/basics" ><span>Basics of IRC</span></a> <a role="menuitem" href="/guides/faq" ><span>Frequently Asked Questions</span></a> <a role="menuitem" href="/guides/clients" ><span>Choosing an IRC client</span></a> </div> </details> <details open> <summary>Helping you connect</summary> <div> <a role="menuitem" href="/guides/connect" ><span>Connecting to Libera.Chat</span></a> <a role="menuitem" href="/guides/webchat" ><span>Using Our Webchat</span></a> <a role="menuitem" href="/guides/sasl" ><span>Using SASL</span></a> <a role="menuitem" href="/guides/certfp" ><span>Using CertFP</span></a> </div> </details> <details open> <summary>Using the network</summary> <div> <a role="menuitem" href="/guides/registration" ><span>Nickname Registration</span></a> <a role="menuitem" href="/guides/sendpass" ><span>Resetting your Password</span></a> <a role="menuitem" href="/guides/account" ><span>Manage Your Account</span></a> <a role="menuitem" href="/guides/cloaks" ><span>Cloaks</span></a> <a role="menuitem" href="/guides/findingchannels" ><span>Finding Channels</span></a> <a role="menuitem" href="/guides/channels" ><span>Using Channels</span></a> <a role="menuitem" href="/guides/usermodes" ><span>User Modes</span></a> <a role="menuitem" href="/guides/memo" ><span>Memos</span></a> </div> </details> <details open> <summary>Running a channel</summary> <div> <a role="menuitem" href="/guides/creatingchannels" ><span>Creating Channels</span></a> <a role="menuitem" href="/guides/channelmodes" ><span>Channel Modes</span></a> <a role="menuitem" class="active" href="/guides/quickops" ><span>Quick Ops Guide</span></a> <a role="menuitem" href="/guides/bots" ><span>Network bots</span></a> <a role="menuitem" href="/guides/groupcontacts" ><span>Managing Groups</span></a> <a role="menuitem" href="/guides/catalyst" ><span>Catalysing and De-escalation</span></a> <a role="menuitem" href="/guides/helpers" ><span>Advice for Helpers</span></a> </div> </details> </aside> <main id="main"> <h1>Quick Ops Guide</h1> <p>This guide aims to cover the basics you need to know to manage who is in your channel. For permissions like operator or voice, we have a guide that covers <a href="creatingchannels#setting-up-permissions">setting up permissions</a>.</p> <p>Before using force, please attempt to resolve conflicts using de-escalation and/or warnings. Doing so generally leads to healthier communities. See <a href="catalyst">our guide on catalysis</a>. Additionally, if your channel is being spammed/flooded or is dealing with a repeat ban evader, please contact staff by joining <code class="language-plaintext highlighter-rouge">#libera-hotline</code> and sending us a message there.</p> <p>All of the following assumes that you are currently opped-up in your channel (i.e. that you have a <code class="language-plaintext highlighter-rouge">@</code> in front of your name in that channel). If you aren’t, you can op up using <code class="language-plaintext highlighter-rouge">/msg chanserv op #channelname</code>.</p> <h2 id="removing-someone-from-your-channel">Removing someone from your channel</h2> <p>To remove someone from a channel, use the command <code class="language-plaintext highlighter-rouge">/kick nickname</code> where <code class="language-plaintext highlighter-rouge">nickname</code> is the nickname of the person to remove. You can optionally supply a reason for the kick which will be shown to the person being kicked and everyone else in the channel, like so:</p> <pre><code class="language-irc">/kick someone Come back when you've calmed down. </code></pre> <p>Under normal circumstances, this will not prevent someone from rejoining the channel. To stop someone from being able to join a channel, you will need to set specific channel modes.</p> <h2 id="restricting-access-with-channel-modes">Restricting access with channel modes</h2> <p>Setting channel modes is done with the <code class="language-plaintext highlighter-rouge">/mode</code> command, which takes one or more arguments depending on the mode you wish to set. For instance, setting the channel mode <code class="language-plaintext highlighter-rouge">C</code> (which blocks channel-wide queries of client info) is done with:</p> <pre><code class="language-irc">/mode +C </code></pre> <p>Some common modes for restricting access include:</p> <ul> <li><code class="language-plaintext highlighter-rouge">+i</code>: Require an invite to join this channel. Used for private channels.</li> <li><code class="language-plaintext highlighter-rouge">+m</code>: Require users to be voiced or opped to talk in this channel.</li> <li><code class="language-plaintext highlighter-rouge">+r</code>: Require an account to join this channel.</li> <li><code class="language-plaintext highlighter-rouge">+R</code>: Require an account to talk in this channel.</li> <li><code class="language-plaintext highlighter-rouge">+b mask</code>: Prevent anyone matching <code class="language-plaintext highlighter-rouge">mask</code> from joining or talking in this channel or changing their nickname while in that channel. Voiced and opped users can still talk. This is known as a “ban”.</li> <li><code class="language-plaintext highlighter-rouge">+b mask$#channelname</code>: As <code class="language-plaintext highlighter-rouge">+b</code>, but additionally forward users affected by this ban to the provided channel when they try to join. This is known as a “ban forward”. To set this, you must additionally be opped in the provided channel, or the provided channel must have channel mode <code class="language-plaintext highlighter-rouge">+F</code>.</li> <li><code class="language-plaintext highlighter-rouge">+q mask</code>: Prevent anyone matching <code class="language-plaintext highlighter-rouge">mask</code> from talking in this channel or changing their nickname while in that channel. Voiced and opped users can still talk. This is known as a “quiet”.</li> </ul> <h2 id="about-masks">About masks</h2> <p>The <a href="channelmodes#masks"><code class="language-plaintext highlighter-rouge">mask</code></a> parameter of <code class="language-plaintext highlighter-rouge">b</code> and <code class="language-plaintext highlighter-rouge">q</code> controls who is affected by the ban/quiet. Masks have the format <code class="language-plaintext highlighter-rouge">nick!user@host</code>, where <code class="language-plaintext highlighter-rouge">nick</code> is a nickname, <code class="language-plaintext highlighter-rouge">user</code> is a username/ident, and <code class="language-plaintext highlighter-rouge">host</code> is a hostmask. The hostmask can be:</p> <ul> <li>an IP address,</li> <li>an IP address range in <a href="https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation">CIDR notation</a>,</li> <li>a domain name, or</li> <li>a <a href="/guides/cloaks">cloak</a>.</li> </ul> <p>Masks take wildcards. You can use the <code class="language-plaintext highlighter-rouge">*</code> wildcard to represent strings of zero or more characters, or the <code class="language-plaintext highlighter-rouge">?</code> wildcard to represent exactly one character. The <code class="language-plaintext highlighter-rouge">?</code> wildcard is rarely used in practice.</p> <p>For example, the following would ban everyone with a nick ending with “bot”:</p> <pre><code class="language-irc">/mode +b *bot!*@* </code></pre> <p>The following bans everyone from a channel (hint: don’t do this):</p> <pre><code class="language-irc">/mode +b *!*@* </code></pre> <p>Note that masks are always matched case-insensitively. Additionally, they cannot “see through” cloaks; an IP address ban will never match a cloaked user.</p> <h2 id="choosing-a-mask">Choosing a mask</h2> <p>Masks offer a lot of flexibility in determining who to ban, and unfortunately that flexibility can make it very easy to ban innocents or be completely ineffective. The following are patterns that are good enough for most cases.</p> <h3 id="nick-masks">Nick masks</h3> <p>Nick ban masks are generally of the form <code class="language-plaintext highlighter-rouge">nick!*@*</code> or <code class="language-plaintext highlighter-rouge">nick*!*@*</code>.</p> <p>Nick bans are trivially easy to circumvent, but generally such circumvention will not happen accidentally (as can happen with some other bans). This is sometimes a good thing; a common use for this kind of ban is to temporarily remove someone whose connection is “flappy” (repeatedly auto-connecting and disconnecting). For example, to ban someone whose nick is “flappyperson” and redirect them to a channel where they will be told why they were banned:</p> <pre><code class="language-irc">/mode +b flappyperson*!*@*$##fix_your_connection </code></pre> <h3 id="account-extbans">Account extbans</h3> <p>You can also ban people by the account they are currently identified to. This makes use of the “account name” extban, which has the syntax <code class="language-plaintext highlighter-rouge">$a:accountname</code>.</p> <p>For example, to ban someone with the account name “naughty1”, use:</p> <pre><code class="language-irc">/mode +b $a:naughty1 </code></pre> <p>These are a safe default for people with accounts. While they can be bypassed by logging out, this happens rarely.</p> <h3 id="host-masks">Host masks</h3> <p>Host ban masks are generally of the form <code class="language-plaintext highlighter-rouge">*!*@host</code> or <code class="language-plaintext highlighter-rouge">*!ident@host</code>.</p> <p>This is the most common means of keeping a troublemaker out of a channel. Some clients have a <code class="language-plaintext highlighter-rouge">/kickban</code> command which usually creates a ban with one of these automatically in addition to kicking the target from the channel.</p> <p>For instance, to ban someone connecting from the IP address “1.2.3.4”, you would do the following:</p> <pre><code class="language-irc">/mode +b *!*@1.2.3.4 </code></pre> <p>This type of ban may hit others connecting from the same IP address. If the username of the person you wish to ban does NOT start with a <code class="language-plaintext highlighter-rouge">~</code>, it is strongly recommended to include it in the mask, like so:</p> <pre><code class="language-irc">/mode +b *!username@1.2.3.4 </code></pre> <h2 id="invexes-and-exemptions">Invexes and exemptions</h2> <p>Channel modes <code class="language-plaintext highlighter-rouge">+r</code> and <code class="language-plaintext highlighter-rouge">+i</code> are very wide-reaching, and sometimes it is necessary to carve out exemptions to them.</p> <p>Invite exemptions (or “invexes”) use the channel mode <code class="language-plaintext highlighter-rouge">I</code>. They take a mask like bans and quiets, but allow people to join a channel that they otherwise couldn’t due to <code class="language-plaintext highlighter-rouge">+r</code> or <code class="language-plaintext highlighter-rouge">+i</code>. For instance, if a channel is <code class="language-plaintext highlighter-rouge">+i</code> but you want to allow someone with the account name “accountname” to join freely, you would use:</p> <pre><code class="language-irc">/mode +I $a:accountname </code></pre> <p>In rare cases, it may be necessary to set exemptions for people to bypass bans or quiets that affect them. Exemptions use channel mode <code class="language-plaintext highlighter-rouge">e</code> and are like invexes. Use sparingly; exemptions can get confusing if you later need to remove those people from the channel and have forgotten about the exemption!</p> <h2 id="querying-and-removing-bansquietsinvexesexemptions">Querying and removing bans/quiets/invexes/exemptions</h2> <p>To view a list of bans, quiets, invexes, or exemptions (or “list modes”), use <code class="language-plaintext highlighter-rouge">/mode =b</code>, <code class="language-plaintext highlighter-rouge">/mode =q</code>, <code class="language-plaintext highlighter-rouge">/mode =I</code>, or <code class="language-plaintext highlighter-rouge">/mode =e</code> respectively. Bans and quiets for a channel may be viewed by anyone, even if they aren’t in that channel. Invexes and exemptions require the viewer to be opped up.</p> <p>Unsetting any mode is done by using a <code class="language-plaintext highlighter-rouge">-</code> instead of a <code class="language-plaintext highlighter-rouge">+</code> in the <code class="language-plaintext highlighter-rouge">/mode</code> command, and list modes are no different. For example, <code class="language-plaintext highlighter-rouge">/mode +b bot*!*@*</code> would be removed by <code class="language-plaintext highlighter-rouge">/mode -b bot*!*@*</code>.</p> </main><footer> <div> <span class="copyright">&copy; Libera Chat's contributors 2021</span> (<a rel="license noopener noreferrer" href="/LICENSE-content.txt">Content CC BY-NC-SA</a>, <a rel="license noopener noreferrer" href="/LICENSE-code.txt">Code MIT</a>) <span class="mobile-hide">/</span> <a href="/atom.xml">Feed (atom)</a> <span class="mobile-hide">/</span> <a href="/privacy">Privacy</a> </div> <div> <a rel="me noopener noreferrer" href="https://fosstodon.org/@liberachat">Mastodon</a> <span class="mobile-hide">/</span> <a href="https://github.com/Libera-Chat/libera-chat.github.io" rel="noopener noreferrer">GitHub</a> <span class="mobile-hide">/</span> <a href="https://bsky.app/profile/libera.chat" rel="noopener noreferrer">Bluesky</a> </div> </footer>

Pages: 1 2 3 4 5 6 7 8 9 10