<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.supershiritori.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=The+CodeGhost</id>
	<title>Super Shiritori Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.supershiritori.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=The+CodeGhost"/>
	<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/wiki/Special:Contributions/The_CodeGhost"/>
	<updated>2026-09-05T13:49:24Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=MediaWiki:Cosmos.css&amp;diff=6270</id>
		<title>MediaWiki:Cosmos.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=MediaWiki:Cosmos.css&amp;diff=6270"/>
		<updated>2026-09-05T08:20:50Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: Fix two real SocialProfile layout bugs: undefined .visualClear utility class (squished Personal information/Real name), and eye-container privacy pill overlapping field labels&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ==========================================================================&lt;br /&gt;
   SocialProfile dark-theme fixes&lt;br /&gt;
   --------------------------------------------------------------------------&lt;br /&gt;
   SocialProfile&#039;s bundled CSS (UserProfile.css, ProfileTabs.css,&lt;br /&gt;
   SpecialUpdateProfile.css) was written for a white-background wiki: it sets&lt;br /&gt;
   dark-gray text with NO background of its own (relying on the page being&lt;br /&gt;
   white) and hardcodes a green/orange brand palette from Wikia&#039;s old look.&lt;br /&gt;
   On this wiki&#039;s dark #401901 page background that produces near-invisible&lt;br /&gt;
   text and off-brand green tabs/buttons. This overrides just those rules --&lt;br /&gt;
   layout/spacing from the original files is untouched.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
&lt;br /&gt;
/* --- Profile tabs (View profile / Edit profile bar) --- */&lt;br /&gt;
.profile-tab {&lt;br /&gt;
	background-color: rgba(241, 144, 0, 0.12);&lt;br /&gt;
	border: 1px solid #F19000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.profile-tab-on {&lt;br /&gt;
	background-color: #F19000;&lt;br /&gt;
	border: 1px solid #F19000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.profile-tab a {&lt;br /&gt;
	color: #F19000 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.profile-tab a:hover {&lt;br /&gt;
	color: #ffffff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.profile-tab-on a,&lt;br /&gt;
.profile-tab-on a:visited {&lt;br /&gt;
	color: #2a0f00 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Save/update button on Special:UpdateProfile --- */&lt;br /&gt;
.profile-update-button {&lt;br /&gt;
	background-color: #F19000;&lt;br /&gt;
	border: 1px solid #F19000;&lt;br /&gt;
	color: #2a0f00;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Section headings that relied on a white page background --- */&lt;br /&gt;
#user-page-left h2,&lt;br /&gt;
#user-page-right h2,&lt;br /&gt;
.profile-update-title {&lt;br /&gt;
	color: #F19000;&lt;br /&gt;
	border-bottom-color: rgba(255, 255, 255, 0.2);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Body text that relied on a white page background --- */&lt;br /&gt;
.item-small,&lt;br /&gt;
.item,&lt;br /&gt;
.vote-text,&lt;br /&gt;
.profile-update-unit-left,&lt;br /&gt;
.profile-update-unit-small,&lt;br /&gt;
.profile-update-row,&lt;br /&gt;
.profile-board-message-type,&lt;br /&gt;
table.avatar-success-page td.title-cell,&lt;br /&gt;
.user-board-message-time,&lt;br /&gt;
.profile-info-container b,&lt;br /&gt;
.profile-info-container div {&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Cards that set their own pale/white background (looked like leftover&lt;br /&gt;
   white boxes on the dark page) -- keep them as cards, just re-themed --- */&lt;br /&gt;
.no-info-container,&lt;br /&gt;
.no-pictures-container,&lt;br /&gt;
.user-board-message-from {&lt;br /&gt;
	background-color: rgba(255, 255, 255, 0.06);&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Dividers that were near-invisible pale-gray-on-dark-brown --- */&lt;br /&gt;
#user-page-left h2,&lt;br /&gt;
#user-page-right h2,&lt;br /&gt;
.user-section-heading,&lt;br /&gt;
#profile-top,&lt;br /&gt;
.user-board-message,&lt;br /&gt;
.activity-item,&lt;br /&gt;
.casual-game-container p,&lt;br /&gt;
.article-item {&lt;br /&gt;
	border-color: rgba(255, 255, 255, 0.15);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- &amp;quot;Add points&amp;quot;-style badge on the toggle button: brand orange stays,&lt;br /&gt;
   just make sure the text stays legible --- */&lt;br /&gt;
#profile-toggle-button {&lt;br /&gt;
	background-color: #F19000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#profile-toggle-button a {&lt;br /&gt;
	color: #2a0f00 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   Mobile / tablet fixes&lt;br /&gt;
   --------------------------------------------------------------------------&lt;br /&gt;
   Reported by a wiki editor via Discord: on a tablet, the notifications&lt;br /&gt;
   (bell/envelope) flyout &amp;quot;takes up nearly half my screen&amp;quot;. Root cause: Echo&#039;s&lt;br /&gt;
   popup has no max-height or scroll of its own -- it just grows one row per&lt;br /&gt;
   notification forever. Capping it and giving the list its own scrollbar&lt;br /&gt;
   fixes that regardless of how many notifications pile up.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* !important is required here: OOUI&#039;s JS computes its own clipping and sets&lt;br /&gt;
   max-height as an INLINE style on this element, which otherwise beats any&lt;br /&gt;
   plain rule in an external stylesheet regardless of selector specificity. */&lt;br /&gt;
.mw-echo-ui-notificationBadgeButtonPopupWidget-popup .oo-ui-popupWidget-body {&lt;br /&gt;
	max-height: 60vh !important;&lt;br /&gt;
	overflow-y: auto !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 900px) {&lt;br /&gt;
	.mw-echo-ui-notificationBadgeButtonPopupWidget-popup .oo-ui-popupWidget-body {&lt;br /&gt;
		max-height: 45vh !important;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.mw-echo-ui-notificationBadgeButtonPopupWidget-popup .oo-ui-popupWidget-popup {&lt;br /&gt;
		max-width: 92vw;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   Top-nav mega-menu + page-actions &amp;quot;...&amp;quot; menu (legacy Wikia &amp;quot;WDS&amp;quot; markup)&lt;br /&gt;
   --------------------------------------------------------------------------&lt;br /&gt;
   Cosmos ports this component straight from old Wikia CSS with its own&lt;br /&gt;
   light-theme colors baked in -- it was never re-themed, so every dropdown&lt;br /&gt;
   off the top nav renders as a plain white box with black text. This is most&lt;br /&gt;
   visible on mobile, where the hamburger button just toggles this same&lt;br /&gt;
   element to display:block (reported by a wiki editor: the menu &amp;quot;takes up&lt;br /&gt;
   nearly half my screen&amp;quot; and looks broken), but it&#039;s equally wrong on&lt;br /&gt;
   desktop. Colors match what the rest of the site already uses.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Selectors are doubled-up (.foo.foo) purely to raise specificity -- Cosmos&#039;s&lt;br /&gt;
   own CSS fights back here with both a 2-class selector (.cosmos-header&lt;br /&gt;
   .wds-dropdown__content) on desktop AND a 2-class !important rule forcing&lt;br /&gt;
   background-color: transparent on mobile, so a plain single-class rule&lt;br /&gt;
   (even with !important) loses to both. */&lt;br /&gt;
.wds-dropdown__content.wds-dropdown__content,&lt;br /&gt;
.wds-dropdown-level-2__content.wds-dropdown-level-2__content {&lt;br /&gt;
	background-color: #2a0f00 !important;&lt;br /&gt;
	border: 1px solid rgba(255, 255, 255, 0.15) !important;&lt;br /&gt;
	box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.wds-dropdown__content li,&lt;br /&gt;
.wds-dropdown-level-2__content li {&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
	border-color: rgba(255, 255, 255, 0.1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.wds-dropdown__content a,&lt;br /&gt;
.wds-dropdown-level-2__content a,&lt;br /&gt;
.wds-dropdown-level-2__toggle {&lt;br /&gt;
	color: #F27AEE !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.wds-dropdown__content a:hover,&lt;br /&gt;
.wds-dropdown-level-2__content a:hover,&lt;br /&gt;
.wds-dropdown-level-2__toggle:hover {&lt;br /&gt;
	color: #F19000 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.wds-dropdown-level-2__toggle .wds-dropdown-chevron {&lt;br /&gt;
	fill: #F27AEE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.wds-dropdown-level-2__toggle:hover .wds-dropdown-chevron {&lt;br /&gt;
	fill: #F19000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* On mobile the hamburger button toggles the whole .wds-tabs bar to&lt;br /&gt;
   display:block; without an explicit background it would otherwise rely on&lt;br /&gt;
   .wds-dropdown__content alone for color, so give the outer bar a matching&lt;br /&gt;
   dark backing and keep it from ever exceeding the viewport height. */&lt;br /&gt;
@media screen and (max-width: 1023px) {&lt;br /&gt;
	.wds-tabs {&lt;br /&gt;
		background-color: #1a0a00;&lt;br /&gt;
		max-height: 80vh;&lt;br /&gt;
		overflow-y: auto;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   Site notice (the dismissible &amp;quot;Welcome to Super-Shiritori!&amp;quot; rules banner)&lt;br /&gt;
   --------------------------------------------------------------------------&lt;br /&gt;
   Cosmos reuses its BUTTON theme colors for this box (@button-background-color&lt;br /&gt;
   / @button-font-color) -- on this wiki that resolves to solid brand-orange&lt;br /&gt;
   with bold white text, which is exactly what the &amp;quot;EDIT SOURCE&amp;quot; button looks&lt;br /&gt;
   like, so a rules notice ends up camouflaged as UI chrome instead of reading&lt;br /&gt;
   as a notice, and white-on-orange is borderline low-contrast besides.&lt;br /&gt;
   Restyled as a proper notice card: dark body, orange accent border --&lt;br /&gt;
   consistent with every other box on the site.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#cosmos-content-siteNotice {&lt;br /&gt;
	background-color: #2a0f00;&lt;br /&gt;
	border: 1px solid rgba(255, 255, 255, 0.15);&lt;br /&gt;
	border-left: 4px solid #F19000;&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#cosmos-content-siteNotice * {&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#cosmos-content-siteNotice b,&lt;br /&gt;
#cosmos-content-siteNotice strong {&lt;br /&gt;
	color: #F19000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#cosmos-siteNotice-closeButton svg,&lt;br /&gt;
#cosmos-siteNotice-closeButton path {&lt;br /&gt;
	fill: #D5D4D4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#cosmos-siteNotice-closeButton:hover svg,&lt;br /&gt;
#cosmos-siteNotice-closeButton:hover path {&lt;br /&gt;
	fill: #F19000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   Social profile layout fixes&lt;br /&gt;
   --------------------------------------------------------------------------&lt;br /&gt;
   Two separate real bugs on the user-profile / edit-profile pages.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
&lt;br /&gt;
/* 1. &amp;quot;.visualClear&amp;quot; is used throughout SocialProfile&#039;s markup to clear floats&lt;br /&gt;
   (e.g. after a floated section heading, before the section&#039;s actual&lt;br /&gt;
   content) -- but it&#039;s a bare Fandom/Wikia platform utility class that was&lt;br /&gt;
   never actually DEFINED anywhere: not in SocialProfile&#039;s own CSS, not in&lt;br /&gt;
   MediaWiki core, not in Cosmos. With no &amp;quot;clear&amp;quot; rule attached, the class&lt;br /&gt;
   does nothing, so floated headings (like &amp;quot;Personal information&amp;quot;) never get&lt;br /&gt;
   cleared and the next line&#039;s content (the &amp;quot;Real name&amp;quot; label/value) rises up&lt;br /&gt;
   and squishes into the same line as the heading instead of sitting below&lt;br /&gt;
   it. This one rule fixes every place that pattern shows up. */&lt;br /&gt;
.visualClear {&lt;br /&gt;
	clear: both;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 2. The privacy &amp;quot;Public&amp;quot;/&amp;quot;Friends&amp;quot;/&amp;quot;Hidden&amp;quot; toggle pill on Special:UpdateProfile&lt;br /&gt;
   is pulled up with fragile hardcoded negative offsets (top: -25px, tuned&lt;br /&gt;
   per-field) meant to tuck it next to Fandom&#039;s original field-label spacing.&lt;br /&gt;
   Cosmos&#039;s typography doesn&#039;t match those old measurements, so the pill&lt;br /&gt;
   lands on top of the label text instead (e.g. &amp;quot;Email&amp;quot; + the pill overlap&lt;br /&gt;
   into an unreadable &amp;quot;Emailublic&amp;quot;). Letting it sit in normal document flow&lt;br /&gt;
   below the field, instead of being pulled back up over it, can&#039;t overlap&lt;br /&gt;
   regardless of exact spacing. */&lt;br /&gt;
div.eye-container[fieldkey] {&lt;br /&gt;
	position: static !important;&lt;br /&gt;
	top: auto !important;&lt;br /&gt;
	margin: 4px 0 10px 0;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=MediaWiki:Cosmos.css&amp;diff=6269</id>
		<title>MediaWiki:Cosmos.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=MediaWiki:Cosmos.css&amp;diff=6269"/>
		<updated>2026-09-05T08:07:17Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: Restyle the site notice banner: dark card with orange accent border instead of solid brand-orange (was borderline low-contrast and camouflaged as a button)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ==========================================================================&lt;br /&gt;
   SocialProfile dark-theme fixes&lt;br /&gt;
   --------------------------------------------------------------------------&lt;br /&gt;
   SocialProfile&#039;s bundled CSS (UserProfile.css, ProfileTabs.css,&lt;br /&gt;
   SpecialUpdateProfile.css) was written for a white-background wiki: it sets&lt;br /&gt;
   dark-gray text with NO background of its own (relying on the page being&lt;br /&gt;
   white) and hardcodes a green/orange brand palette from Wikia&#039;s old look.&lt;br /&gt;
   On this wiki&#039;s dark #401901 page background that produces near-invisible&lt;br /&gt;
   text and off-brand green tabs/buttons. This overrides just those rules --&lt;br /&gt;
   layout/spacing from the original files is untouched.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
&lt;br /&gt;
/* --- Profile tabs (View profile / Edit profile bar) --- */&lt;br /&gt;
.profile-tab {&lt;br /&gt;
	background-color: rgba(241, 144, 0, 0.12);&lt;br /&gt;
	border: 1px solid #F19000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.profile-tab-on {&lt;br /&gt;
	background-color: #F19000;&lt;br /&gt;
	border: 1px solid #F19000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.profile-tab a {&lt;br /&gt;
	color: #F19000 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.profile-tab a:hover {&lt;br /&gt;
	color: #ffffff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.profile-tab-on a,&lt;br /&gt;
.profile-tab-on a:visited {&lt;br /&gt;
	color: #2a0f00 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Save/update button on Special:UpdateProfile --- */&lt;br /&gt;
.profile-update-button {&lt;br /&gt;
	background-color: #F19000;&lt;br /&gt;
	border: 1px solid #F19000;&lt;br /&gt;
	color: #2a0f00;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Section headings that relied on a white page background --- */&lt;br /&gt;
#user-page-left h2,&lt;br /&gt;
#user-page-right h2,&lt;br /&gt;
.profile-update-title {&lt;br /&gt;
	color: #F19000;&lt;br /&gt;
	border-bottom-color: rgba(255, 255, 255, 0.2);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Body text that relied on a white page background --- */&lt;br /&gt;
.item-small,&lt;br /&gt;
.item,&lt;br /&gt;
.vote-text,&lt;br /&gt;
.profile-update-unit-left,&lt;br /&gt;
.profile-update-unit-small,&lt;br /&gt;
.profile-update-row,&lt;br /&gt;
.profile-board-message-type,&lt;br /&gt;
table.avatar-success-page td.title-cell,&lt;br /&gt;
.user-board-message-time,&lt;br /&gt;
.profile-info-container b,&lt;br /&gt;
.profile-info-container div {&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Cards that set their own pale/white background (looked like leftover&lt;br /&gt;
   white boxes on the dark page) -- keep them as cards, just re-themed --- */&lt;br /&gt;
.no-info-container,&lt;br /&gt;
.no-pictures-container,&lt;br /&gt;
.user-board-message-from {&lt;br /&gt;
	background-color: rgba(255, 255, 255, 0.06);&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Dividers that were near-invisible pale-gray-on-dark-brown --- */&lt;br /&gt;
#user-page-left h2,&lt;br /&gt;
#user-page-right h2,&lt;br /&gt;
.user-section-heading,&lt;br /&gt;
#profile-top,&lt;br /&gt;
.user-board-message,&lt;br /&gt;
.activity-item,&lt;br /&gt;
.casual-game-container p,&lt;br /&gt;
.article-item {&lt;br /&gt;
	border-color: rgba(255, 255, 255, 0.15);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- &amp;quot;Add points&amp;quot;-style badge on the toggle button: brand orange stays,&lt;br /&gt;
   just make sure the text stays legible --- */&lt;br /&gt;
#profile-toggle-button {&lt;br /&gt;
	background-color: #F19000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#profile-toggle-button a {&lt;br /&gt;
	color: #2a0f00 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   Mobile / tablet fixes&lt;br /&gt;
   --------------------------------------------------------------------------&lt;br /&gt;
   Reported by a wiki editor via Discord: on a tablet, the notifications&lt;br /&gt;
   (bell/envelope) flyout &amp;quot;takes up nearly half my screen&amp;quot;. Root cause: Echo&#039;s&lt;br /&gt;
   popup has no max-height or scroll of its own -- it just grows one row per&lt;br /&gt;
   notification forever. Capping it and giving the list its own scrollbar&lt;br /&gt;
   fixes that regardless of how many notifications pile up.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* !important is required here: OOUI&#039;s JS computes its own clipping and sets&lt;br /&gt;
   max-height as an INLINE style on this element, which otherwise beats any&lt;br /&gt;
   plain rule in an external stylesheet regardless of selector specificity. */&lt;br /&gt;
.mw-echo-ui-notificationBadgeButtonPopupWidget-popup .oo-ui-popupWidget-body {&lt;br /&gt;
	max-height: 60vh !important;&lt;br /&gt;
	overflow-y: auto !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 900px) {&lt;br /&gt;
	.mw-echo-ui-notificationBadgeButtonPopupWidget-popup .oo-ui-popupWidget-body {&lt;br /&gt;
		max-height: 45vh !important;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.mw-echo-ui-notificationBadgeButtonPopupWidget-popup .oo-ui-popupWidget-popup {&lt;br /&gt;
		max-width: 92vw;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   Top-nav mega-menu + page-actions &amp;quot;...&amp;quot; menu (legacy Wikia &amp;quot;WDS&amp;quot; markup)&lt;br /&gt;
   --------------------------------------------------------------------------&lt;br /&gt;
   Cosmos ports this component straight from old Wikia CSS with its own&lt;br /&gt;
   light-theme colors baked in -- it was never re-themed, so every dropdown&lt;br /&gt;
   off the top nav renders as a plain white box with black text. This is most&lt;br /&gt;
   visible on mobile, where the hamburger button just toggles this same&lt;br /&gt;
   element to display:block (reported by a wiki editor: the menu &amp;quot;takes up&lt;br /&gt;
   nearly half my screen&amp;quot; and looks broken), but it&#039;s equally wrong on&lt;br /&gt;
   desktop. Colors match what the rest of the site already uses.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Selectors are doubled-up (.foo.foo) purely to raise specificity -- Cosmos&#039;s&lt;br /&gt;
   own CSS fights back here with both a 2-class selector (.cosmos-header&lt;br /&gt;
   .wds-dropdown__content) on desktop AND a 2-class !important rule forcing&lt;br /&gt;
   background-color: transparent on mobile, so a plain single-class rule&lt;br /&gt;
   (even with !important) loses to both. */&lt;br /&gt;
.wds-dropdown__content.wds-dropdown__content,&lt;br /&gt;
.wds-dropdown-level-2__content.wds-dropdown-level-2__content {&lt;br /&gt;
	background-color: #2a0f00 !important;&lt;br /&gt;
	border: 1px solid rgba(255, 255, 255, 0.15) !important;&lt;br /&gt;
	box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.wds-dropdown__content li,&lt;br /&gt;
.wds-dropdown-level-2__content li {&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
	border-color: rgba(255, 255, 255, 0.1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.wds-dropdown__content a,&lt;br /&gt;
.wds-dropdown-level-2__content a,&lt;br /&gt;
.wds-dropdown-level-2__toggle {&lt;br /&gt;
	color: #F27AEE !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.wds-dropdown__content a:hover,&lt;br /&gt;
.wds-dropdown-level-2__content a:hover,&lt;br /&gt;
.wds-dropdown-level-2__toggle:hover {&lt;br /&gt;
	color: #F19000 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.wds-dropdown-level-2__toggle .wds-dropdown-chevron {&lt;br /&gt;
	fill: #F27AEE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.wds-dropdown-level-2__toggle:hover .wds-dropdown-chevron {&lt;br /&gt;
	fill: #F19000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* On mobile the hamburger button toggles the whole .wds-tabs bar to&lt;br /&gt;
   display:block; without an explicit background it would otherwise rely on&lt;br /&gt;
   .wds-dropdown__content alone for color, so give the outer bar a matching&lt;br /&gt;
   dark backing and keep it from ever exceeding the viewport height. */&lt;br /&gt;
@media screen and (max-width: 1023px) {&lt;br /&gt;
	.wds-tabs {&lt;br /&gt;
		background-color: #1a0a00;&lt;br /&gt;
		max-height: 80vh;&lt;br /&gt;
		overflow-y: auto;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   Site notice (the dismissible &amp;quot;Welcome to Super-Shiritori!&amp;quot; rules banner)&lt;br /&gt;
   --------------------------------------------------------------------------&lt;br /&gt;
   Cosmos reuses its BUTTON theme colors for this box (@button-background-color&lt;br /&gt;
   / @button-font-color) -- on this wiki that resolves to solid brand-orange&lt;br /&gt;
   with bold white text, which is exactly what the &amp;quot;EDIT SOURCE&amp;quot; button looks&lt;br /&gt;
   like, so a rules notice ends up camouflaged as UI chrome instead of reading&lt;br /&gt;
   as a notice, and white-on-orange is borderline low-contrast besides.&lt;br /&gt;
   Restyled as a proper notice card: dark body, orange accent border --&lt;br /&gt;
   consistent with every other box on the site.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#cosmos-content-siteNotice {&lt;br /&gt;
	background-color: #2a0f00;&lt;br /&gt;
	border: 1px solid rgba(255, 255, 255, 0.15);&lt;br /&gt;
	border-left: 4px solid #F19000;&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#cosmos-content-siteNotice * {&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#cosmos-content-siteNotice b,&lt;br /&gt;
#cosmos-content-siteNotice strong {&lt;br /&gt;
	color: #F19000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#cosmos-siteNotice-closeButton svg,&lt;br /&gt;
#cosmos-siteNotice-closeButton path {&lt;br /&gt;
	fill: #D5D4D4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#cosmos-siteNotice-closeButton:hover svg,&lt;br /&gt;
#cosmos-siteNotice-closeButton:hover path {&lt;br /&gt;
	fill: #F19000;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=MediaWiki:Common.js&amp;diff=6268</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=MediaWiki:Common.js&amp;diff=6268"/>
		<updated>2026-09-05T05:25:47Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: Fix: use event delegation for gallery tab clicks -- direct listeners were being silently dropped, likely by MultimediaViewer touching the parser output after load&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Behavior for Template:Infobox_application. Lives in Common.js (not&lt;br /&gt;
 * Cosmos.js) so it keeps working regardless of which skin a reader/editor&lt;br /&gt;
 * has selected. */&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
	// Clickable tab bar for multi-image infoboxes (image1/caption1,&lt;br /&gt;
	// image2/caption2, ...). Delegated on document instead of bound directly&lt;br /&gt;
	// to each tab: something else on the page (MultimediaViewer&#039;s own image&lt;br /&gt;
	// handling is the prime suspect) touches the parser output shortly after&lt;br /&gt;
	// load and silently drops direct listeners, so binding to a stable&lt;br /&gt;
	// ancestor that&#039;s never replaced is what actually keeps working.&lt;br /&gt;
	function handleGalleryClick( e ) {&lt;br /&gt;
		var tab = e.target.closest( &#039;.infobox-application__gallery-tab&#039; );&lt;br /&gt;
		if ( !tab ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		var gallery = tab.closest( &#039;.infobox-application__gallery&#039; );&lt;br /&gt;
		if ( !gallery ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		var index = tab.getAttribute( &#039;data-ia-tab&#039; );&lt;br /&gt;
		gallery.querySelectorAll( &#039;.infobox-application__gallery-tab&#039; ).forEach( function ( t ) {&lt;br /&gt;
			t.classList.toggle( &#039;is-active&#039;, t === tab );&lt;br /&gt;
		} );&lt;br /&gt;
		gallery.querySelectorAll( &#039;.infobox-application__gallery-slide&#039; ).forEach( function ( slide ) {&lt;br /&gt;
			// A plain &amp;quot;hidden&amp;quot; attribute gets stripped by MediaWiki&#039;s&lt;br /&gt;
			// sanitizer, so a CSS class carries visibility instead.&lt;br /&gt;
			slide.classList.toggle( &#039;is-inactive&#039;, slide.getAttribute( &#039;data-ia-slide&#039; ) !== index );&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// On narrow screens the infobox drops its desktop float (see&lt;br /&gt;
	// Template:Infobox_application/styles.css) and becomes a full-width&lt;br /&gt;
	// block -- but it&#039;s still first in the wikitext/DOM, so without this it&lt;br /&gt;
	// would render ABOVE the lead paragraph instead of below it, the way&lt;br /&gt;
	// Wikipedia&#039;s mobile view places infoboxes. This moves it to just after&lt;br /&gt;
	// the first non-empty paragraph of the article (mirrors MobileFrontend&#039;s&lt;br /&gt;
	// own behavior, which Cosmos doesn&#039;t have).&lt;br /&gt;
	function relocateInfoboxOnMobile() {&lt;br /&gt;
		if ( window.innerWidth &amp;gt; 550 ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		document.querySelectorAll( &#039;.mw-parser-output &amp;gt; .infobox-application&#039; ).forEach( function ( box ) {&lt;br /&gt;
			if ( box.dataset.iaRelocated ) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
			var sib = box.nextElementSibling;&lt;br /&gt;
			while ( sib &amp;amp;&amp;amp; ( sib.tagName !== &#039;P&#039; || !sib.textContent.trim() ) ) {&lt;br /&gt;
				sib = sib.nextElementSibling;&lt;br /&gt;
			}&lt;br /&gt;
			if ( sib ) {&lt;br /&gt;
				sib.insertAdjacentElement( &#039;afterend&#039;, box );&lt;br /&gt;
				box.dataset.iaRelocated = &#039;1&#039;;&lt;br /&gt;
			}&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// Registered immediately (doesn&#039;t need the DOM to be ready) and on a&lt;br /&gt;
	// node that&#039;s never replaced, so this survives regardless of what else&lt;br /&gt;
	// on the page rebuilds the content area after load.&lt;br /&gt;
	document.addEventListener( &#039;click&#039;, handleGalleryClick );&lt;br /&gt;
&lt;br /&gt;
	function init() {&lt;br /&gt;
		relocateInfoboxOnMobile();&lt;br /&gt;
	}&lt;br /&gt;
	if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
		document.addEventListener( &#039;DOMContentLoaded&#039;, init );&lt;br /&gt;
	} else {&lt;br /&gt;
		init();&lt;br /&gt;
	}&lt;br /&gt;
	// Belt-and-suspenders: re-run once everything (including images) has&lt;br /&gt;
	// finished loading, in case something reflowed the lead section after&lt;br /&gt;
	// DOMContentLoaded. The dataset guard above makes this a no-op otherwise.&lt;br /&gt;
	window.addEventListener( &#039;load&#039;, relocateInfoboxOnMobile );&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=MediaWiki:Common.js&amp;diff=6267</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=MediaWiki:Common.js&amp;diff=6267"/>
		<updated>2026-09-05T05:21:33Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: Fix: toggle is-inactive class instead of .hidden property to match the sanitizer-safe markup&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Behavior for Template:Infobox_application. Lives in Common.js (not&lt;br /&gt;
 * Cosmos.js) so it keeps working regardless of which skin a reader/editor&lt;br /&gt;
 * has selected. */&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
	// Clickable tab bar for multi-image infoboxes (image1/caption1,&lt;br /&gt;
	// image2/caption2, ...). Without this, only the first &amp;lt;div data-ia-slide&amp;gt;&lt;br /&gt;
	// is visible -- everything still renders, it just can&#039;t be switched.&lt;br /&gt;
	function initInfoboxGalleries() {&lt;br /&gt;
		document.querySelectorAll( &#039;.infobox-application__gallery&#039; ).forEach( function ( gallery ) {&lt;br /&gt;
			var tabs = gallery.querySelectorAll( &#039;.infobox-application__gallery-tab&#039; );&lt;br /&gt;
			var slides = gallery.querySelectorAll( &#039;.infobox-application__gallery-slide&#039; );&lt;br /&gt;
			tabs.forEach( function ( tab ) {&lt;br /&gt;
				tab.addEventListener( &#039;click&#039;, function () {&lt;br /&gt;
					var index = tab.getAttribute( &#039;data-ia-tab&#039; );&lt;br /&gt;
					tabs.forEach( function ( t ) {&lt;br /&gt;
						t.classList.toggle( &#039;is-active&#039;, t === tab );&lt;br /&gt;
					} );&lt;br /&gt;
					slides.forEach( function ( slide ) {&lt;br /&gt;
						// A plain &amp;quot;hidden&amp;quot; attribute gets stripped by MediaWiki&#039;s&lt;br /&gt;
						// sanitizer, so a CSS class carries visibility instead.&lt;br /&gt;
						slide.classList.toggle( &#039;is-inactive&#039;, slide.getAttribute( &#039;data-ia-slide&#039; ) !== index );&lt;br /&gt;
					} );&lt;br /&gt;
				} );&lt;br /&gt;
			} );&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// On narrow screens the infobox drops its desktop float (see&lt;br /&gt;
	// Template:Infobox_application/styles.css) and becomes a full-width&lt;br /&gt;
	// block -- but it&#039;s still first in the wikitext/DOM, so without this it&lt;br /&gt;
	// would render ABOVE the lead paragraph instead of below it, the way&lt;br /&gt;
	// Wikipedia&#039;s mobile view places infoboxes. This moves it to just after&lt;br /&gt;
	// the first non-empty paragraph of the article (mirrors MobileFrontend&#039;s&lt;br /&gt;
	// own behavior, which Cosmos doesn&#039;t have).&lt;br /&gt;
	function relocateInfoboxOnMobile() {&lt;br /&gt;
		if ( window.innerWidth &amp;gt; 550 ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		document.querySelectorAll( &#039;.mw-parser-output &amp;gt; .infobox-application&#039; ).forEach( function ( box ) {&lt;br /&gt;
			var sib = box.nextElementSibling;&lt;br /&gt;
			while ( sib &amp;amp;&amp;amp; ( sib.tagName !== &#039;P&#039; || !sib.textContent.trim() ) ) {&lt;br /&gt;
				sib = sib.nextElementSibling;&lt;br /&gt;
			}&lt;br /&gt;
			if ( sib ) {&lt;br /&gt;
				sib.insertAdjacentElement( &#039;afterend&#039;, box );&lt;br /&gt;
			}&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function init() {&lt;br /&gt;
		initInfoboxGalleries();&lt;br /&gt;
		relocateInfoboxOnMobile();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
		document.addEventListener( &#039;DOMContentLoaded&#039;, init );&lt;br /&gt;
	} else {&lt;br /&gt;
		init();&lt;br /&gt;
	}&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=Template:Infobox_application&amp;diff=6266</id>
		<title>Template:Infobox application</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=Template:Infobox_application&amp;diff=6266"/>
		<updated>2026-09-05T05:21:32Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: Fix: use a CSS class instead of the hidden attribute, which MediaWiki sanitizer strips from raw HTML&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;templatestyles src=&amp;quot;Infobox application/styles.css&amp;quot;/&amp;gt;&amp;lt;div class=&amp;quot;infobox-application&amp;quot;{{#if:{{{color|}}}{{{bg|}}}| style=&amp;quot;{{#if:{{{color|}}}|--ia-accent: {{{color}}};}}{{#if:{{{bg|}}}| --ia-bg: {{{bg}}};}}&amp;quot;}}&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__title&amp;quot;&amp;gt;{{{name|{{PAGENAME}}}}}&amp;lt;/div&amp;gt;{{#if:{{{image2|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__gallery&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__gallery-tabs&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__gallery-tab is-active&amp;quot; data-ia-tab=&amp;quot;0&amp;quot;&amp;gt;{{{caption1|Image 1}}}&amp;lt;/div&amp;gt;{{#if:{{{image2|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-tab&amp;quot; data-ia-tab=&amp;quot;1&amp;quot;&amp;gt;{{{caption2|Image 2}}}&amp;lt;/div&amp;gt;}}{{#if:{{{image3|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-tab&amp;quot; data-ia-tab=&amp;quot;2&amp;quot;&amp;gt;{{{caption3|Image 3}}}&amp;lt;/div&amp;gt;}}{{#if:{{{image4|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-tab&amp;quot; data-ia-tab=&amp;quot;3&amp;quot;&amp;gt;{{{caption4|Image 4}}}&amp;lt;/div&amp;gt;}}{{#if:{{{image5|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-tab&amp;quot; data-ia-tab=&amp;quot;4&amp;quot;&amp;gt;{{{caption5|Image 5}}}&amp;lt;/div&amp;gt;}}{{#if:{{{image6|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-tab&amp;quot; data-ia-tab=&amp;quot;5&amp;quot;&amp;gt;{{{caption6|Image 6}}}&amp;lt;/div&amp;gt;}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__gallery-slide&amp;quot; data-ia-slide=&amp;quot;0&amp;quot;&amp;gt;{{{image1|}}}{{#if:{{{caption1|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-caption&amp;quot;&amp;gt;{{{caption1}}}&amp;lt;/div&amp;gt;}}&amp;lt;/div&amp;gt;{{#if:{{{image2|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-slide is-inactive&amp;quot; data-ia-slide=&amp;quot;1&amp;quot;&amp;gt;{{{image2}}}{{#if:{{{caption2|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-caption&amp;quot;&amp;gt;{{{caption2}}}&amp;lt;/div&amp;gt;}}&amp;lt;/div&amp;gt;}}{{#if:{{{image3|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-slide is-inactive&amp;quot; data-ia-slide=&amp;quot;2&amp;quot;&amp;gt;{{{image3}}}{{#if:{{{caption3|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-caption&amp;quot;&amp;gt;{{{caption3}}}&amp;lt;/div&amp;gt;}}&amp;lt;/div&amp;gt;}}{{#if:{{{image4|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-slide is-inactive&amp;quot; data-ia-slide=&amp;quot;3&amp;quot;&amp;gt;{{{image4}}}{{#if:{{{caption4|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-caption&amp;quot;&amp;gt;{{{caption4}}}&amp;lt;/div&amp;gt;}}&amp;lt;/div&amp;gt;}}{{#if:{{{image5|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-slide is-inactive&amp;quot; data-ia-slide=&amp;quot;4&amp;quot;&amp;gt;{{{image5}}}{{#if:{{{caption5|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-caption&amp;quot;&amp;gt;{{{caption5}}}&amp;lt;/div&amp;gt;}}&amp;lt;/div&amp;gt;}}{{#if:{{{image6|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-slide is-inactive&amp;quot; data-ia-slide=&amp;quot;5&amp;quot;&amp;gt;{{{image6}}}{{#if:{{{caption6|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-caption&amp;quot;&amp;gt;{{{caption6}}}&amp;lt;/div&amp;gt;}}&amp;lt;/div&amp;gt;}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|{{#if:{{{image|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__image&amp;quot;&amp;gt;{{{image}}}&amp;lt;/div&amp;gt;}}{{#if:{{{caption|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__caption&amp;quot;&amp;gt;{{{caption}}}&amp;lt;/div&amp;gt;}}}}{{#if:{{{type|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Type&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{type}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}{{#if:{{{function|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Function&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{function}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}{{#if:{{{aliases|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Aliases&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{aliases}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}{{#if:{{{platform|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Platform&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{platform}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}{{#if:{{{developer|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Developer&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{developer}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}{{#if:{{{language|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Language&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{language}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}{{#if:{{{status|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Status&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{status}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}{{#if:{{{launched|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Launched&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{launched}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}{{#if:{{{hosted|}}}|{{#if:{{{hosted_from|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Originally hosted&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{hosted_from}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Currently hosted&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{hosted}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Hosted in&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{hosted}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}}}{{#if:{{{access|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Access&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{access}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}{{#if:{{{counterparts|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Related bots&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{counterparts}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}&lt;br /&gt;
&amp;lt;/div&amp;gt;{{#ifeq: {{NAMESPACENUMBER}} | 0 | [[Category:Applications]]}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
== Description ==&lt;br /&gt;
A dark-themed infobox for the wiki&#039;s Discord bots/applications (Super-Shiritori, Word-Curatori, Vexitori). Replaces the old &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{Character}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; template, which was raw Fandom &amp;quot;Portable Infobox&amp;quot; markup (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;infobox type=&amp;quot;Character&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;) left over from the Fandom migration -- that extension was never self-hostable, so it rendered as literal unparsed tags rather than an actual infobox, and its fields (Species, Gender, Portrayed by, Marital status...) were built for fictional characters, not bots.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Infobox application&lt;br /&gt;
| name        =&lt;br /&gt;
| color       =&lt;br /&gt;
| bg          =&lt;br /&gt;
| image       = [[File:Example.png|250px]]&lt;br /&gt;
| caption     =&lt;br /&gt;
| image1      =&lt;br /&gt;
| caption1    =&lt;br /&gt;
| image2      =&lt;br /&gt;
| caption2    =&lt;br /&gt;
| type        = Discord Bot&lt;br /&gt;
| function    =&lt;br /&gt;
| aliases     =&lt;br /&gt;
| platform    = Discord&lt;br /&gt;
| developer   =&lt;br /&gt;
| language    =&lt;br /&gt;
| status      = Active&lt;br /&gt;
| launched    =&lt;br /&gt;
| hosted_from =&lt;br /&gt;
| hosted      =&lt;br /&gt;
| access      =&lt;br /&gt;
| counterparts =&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All fields are optional except &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; (which defaults to the page title). A blank/omitted field just doesn&#039;t render that row.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Single image:&#039;&#039;&#039; use &amp;lt;code&amp;gt;image&amp;lt;/code&amp;gt; (full wikitext, e.g. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[File:Example.png|250px]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;) and optionally &amp;lt;code&amp;gt;caption&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Multiple images (clickable tab bar):&#039;&#039;&#039; once &amp;lt;code&amp;gt;image2&amp;lt;/code&amp;gt; is set, the box switches to tabbed-gallery mode -- use &amp;lt;code&amp;gt;image1&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;caption1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;image2&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;caption2&amp;lt;/code&amp;gt;, up through &amp;lt;code&amp;gt;image6&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;caption6&amp;lt;/code&amp;gt;. Each caption becomes a tab label; clicking a tab swaps the picture. See [[Super-Shiritori]] for a live 4-image example. (Requires JavaScript -- with it off, only the first image shows.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Color scheme:&#039;&#039;&#039; &amp;lt;code&amp;gt;color&amp;lt;/code&amp;gt; sets the accent color (tab bar, labels, header text -- default site orange &amp;lt;code&amp;gt;#F19000&amp;lt;/code&amp;gt;); &amp;lt;code&amp;gt;bg&amp;lt;/code&amp;gt; sets the card&#039;s background (default &amp;lt;code&amp;gt;#2a0f00&amp;lt;/code&amp;gt;). Pick both to theme a box around its own images instead of the default orange/brown. Keep &amp;lt;code&amp;gt;bg&amp;lt;/code&amp;gt; dark -- body text is a fixed light gray and won&#039;t stay readable on a light background.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;hosted&amp;lt;/code&amp;gt; is always the &#039;&#039;&#039;current&#039;&#039;&#039; hosting location. Add &amp;lt;code&amp;gt;hosted_from&amp;lt;/code&amp;gt; only if that location has changed since launch -- doing so splits the single &amp;quot;Hosted in&amp;quot; row into &amp;quot;Originally hosted&amp;quot; / &amp;quot;Currently hosted&amp;quot; instead. Leave &amp;lt;code&amp;gt;hosted_from&amp;lt;/code&amp;gt; out for a bot that&#039;s never moved.&lt;br /&gt;
&lt;br /&gt;
[[Category:Infobox templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=Template:Infobox_application/styles.css&amp;diff=6265</id>
		<title>Template:Infobox application/styles.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=Template:Infobox_application/styles.css&amp;diff=6265"/>
		<updated>2026-09-05T05:21:30Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: Fix: use a CSS class instead of the hidden attribute, which MediaWiki sanitizer strips from raw HTML&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Colors come from --ia-accent / --ia-bg custom properties set inline by the&lt;br /&gt;
   template (see Template:Infobox_application `color=` / `bg=` params) so each&lt;br /&gt;
   page can theme its own infobox around its own images. The var() fallbacks&lt;br /&gt;
   below are what you get if a page doesn&#039;t set them -- the original orange/&lt;br /&gt;
   dark-brown look. */&lt;br /&gt;
&lt;br /&gt;
.infobox-application {&lt;br /&gt;
	float: right;&lt;br /&gt;
	clear: right;&lt;br /&gt;
	width: 300px;&lt;br /&gt;
	margin: 0 0 1em 1em;&lt;br /&gt;
	background-color: var(--ia-bg, #2a0f00);&lt;br /&gt;
	border: 1px solid rgba(255, 255, 255, 0.15);&lt;br /&gt;
	border-radius: 4px;&lt;br /&gt;
	box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);&lt;br /&gt;
	font-size: 88%;&lt;br /&gt;
	line-height: 1.4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__title {&lt;br /&gt;
	background-color: #1a0a00;&lt;br /&gt;
	color: var(--ia-accent, #F19000);&lt;br /&gt;
	font-size: 120%;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 8px;&lt;br /&gt;
	border-bottom: 1px solid rgba(255, 255, 255, 0.15);&lt;br /&gt;
	border-radius: 4px 4px 0 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__image {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 8px;&lt;br /&gt;
	border-bottom: 1px solid rgba(255, 255, 255, 0.1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__image img {&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__caption {&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
	font-size: 90%;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 4px 8px;&lt;br /&gt;
	border-bottom: 1px solid rgba(255, 255, 255, 0.1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__row {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	padding: 4px 8px;&lt;br /&gt;
	border-bottom: 1px solid rgba(255, 255, 255, 0.08);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__row:last-child {&lt;br /&gt;
	border-bottom: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__label {&lt;br /&gt;
	color: var(--ia-accent, #F19000);&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	width: 40%;&lt;br /&gt;
	flex-shrink: 0;&lt;br /&gt;
	padding-right: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__value {&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
	width: 60%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Multi-image tabbed gallery (image1/caption1, image2/caption2, ...) --- */&lt;br /&gt;
.infobox-application__gallery-tabs {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	overflow-x: auto;&lt;br /&gt;
	background-color: var(--ia-accent, #F19000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__gallery-tab {&lt;br /&gt;
	flex: 0 0 auto;&lt;br /&gt;
	color: #1a0a00;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	font-size: 90%;&lt;br /&gt;
	padding: 8px 10px;&lt;br /&gt;
	cursor: pointer;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
	border-bottom: 3px solid transparent;&lt;br /&gt;
	user-select: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__gallery-tab.is-active {&lt;br /&gt;
	background-color: rgba(0, 0, 0, 0.2);&lt;br /&gt;
	border-bottom-color: #1a0a00;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__gallery-tab:hover {&lt;br /&gt;
	background-color: rgba(0, 0, 0, 0.12);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__gallery-slide {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* A plain &amp;quot;hidden&amp;quot; attribute gets stripped by MediaWiki&#039;s HTML sanitizer&lt;br /&gt;
   (not on its allowlist for div), so visibility is tracked with this class&lt;br /&gt;
   instead -- toggled by MediaWiki:Common.js. */&lt;br /&gt;
.infobox-application__gallery-slide.is-inactive {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__gallery-slide img {&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__gallery-caption {&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
	font-size: 90%;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0 8px 8px;&lt;br /&gt;
	border-bottom: 1px solid rgba(255, 255, 255, 0.1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Below this, a 300px fixed-width float leaves almost no room for the&lt;br /&gt;
   article text beside it (down to a single-character-wide column on a&lt;br /&gt;
   phone) -- drop the float and let the box take the full column width. */&lt;br /&gt;
@media screen and (max-width: 550px) {&lt;br /&gt;
	.infobox-application {&lt;br /&gt;
		float: none;&lt;br /&gt;
		clear: both;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		margin: 0 0 1em 0;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=Super-Shiritori&amp;diff=6264</id>
		<title>Super-Shiritori</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=Super-Shiritori&amp;diff=6264"/>
		<updated>2026-09-05T05:19:46Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: Switch the 4 profile pictures to the new clickable tab-bar gallery; fix Hosted in to reflect the move to Hawaii&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox application&lt;br /&gt;
| name = Super-Shiritori&lt;br /&gt;
| image1 = [[File:Super Shiritori Bot (Discord).png|250px]]&lt;br /&gt;
| caption1 = Main profile picture&lt;br /&gt;
| image2 = [[File:Super-Merritori.png|250px]]&lt;br /&gt;
| caption2 = Holiday profile picture&lt;br /&gt;
| image3 = [[File:Halloween Shiritori PFP.png|250px]]&lt;br /&gt;
| caption3 = Halloween profile picture&lt;br /&gt;
| image4 = [[File:Original Super-Shiritori PFP.webp|250px]]&lt;br /&gt;
| caption4 = Original profile picture&lt;br /&gt;
| aliases = Super Shiritori, Shiritori&lt;br /&gt;
| type = Discord Bot&lt;br /&gt;
| function = Flagship word-chain game bot&lt;br /&gt;
| platform = Discord&lt;br /&gt;
| status = Active&lt;br /&gt;
| launched = November 22, 2024&lt;br /&gt;
| hosted_from = Washington State, USA (via Discord)&lt;br /&gt;
| hosted = Hawaii, USA (via Discord)&lt;br /&gt;
| counterparts = [[Word-Curatori]] (originally called &amp;quot;Super Shiritori (Test Edition)&amp;quot;)&amp;lt;br&amp;gt;[[Vexitori]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Super-Shiritori&#039;&#039;&#039; is the flagship Discord bot of the project, running a word-chain game in which players respond with a word beginning with the final letter of the previous word. Alongside its core game, it supports several related word-based modes, tracks detailed player statistics, and maintains the shared dictionary of over 1.6 million entries. It is one of [[Discord Bots|three separate bots]] that make up the project, running alongside [[Word-Curatori]] and [[Vexitori]].&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
* Multiplayer and solo word-chain gameplay, against other players or AI opponents with distinct personalities&lt;br /&gt;
* A dictionary exceeding 1.6 million entries, drawn from acronyms, user submissions, foreign-language borrowings, constructed languages, and established published dictionaries&lt;br /&gt;
* Additional game modes, including Word Bomb, Wordle, Anagram, and Protori&lt;br /&gt;
* A rarity-based word rolling and trading system&lt;br /&gt;
* Player statistics, leaderboards, and a leveling system with unlockable [[Achievements]] (formerly called titles)&lt;br /&gt;
* Deployable in any Discord server&lt;br /&gt;
* A small number of hidden text-trigger commands functioning as puzzle easter eggs&lt;br /&gt;
&lt;br /&gt;
== Bot Commands ==&lt;br /&gt;
&lt;br /&gt;
=== Multiplayer Shiritori ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/start_shiritori [#channel]&amp;lt;/code&amp;gt; || Starts a multiplayer game in the specified channel. Requires the Manage Messages permission or bot owner status.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/end_shiritori&amp;lt;/code&amp;gt; || Manually ends the current game and displays final statistics.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/invite_ai&amp;lt;/code&amp;gt; || Invites an AI opponent with a randomly assigned personality into the current game.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/murder_ai&amp;lt;/code&amp;gt; || Attempts to remove the current AI opponent from the game.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/leaderboard&amp;lt;/code&amp;gt; || Displays the server&#039;s multiplayer leaderboard by category.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/my_stats&amp;lt;/code&amp;gt; || Displays the player&#039;s personal global multiplayer statistics.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/levels_leaderboard&amp;lt;/code&amp;gt; || Displays the server&#039;s level leaderboard.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/level&amp;lt;/code&amp;gt; || Displays the player&#039;s current level and experience progress.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/restore_games&amp;lt;/code&amp;gt; || Restores active games after a bot restart or shutdown.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/global_stats&amp;lt;/code&amp;gt; || Displays aggregated multiplayer statistics across all servers.&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Multiplayer Shiritori]]&lt;br /&gt;
&lt;br /&gt;
=== Protori ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/start_protori [#channel]&amp;lt;/code&amp;gt; || Starts a Protori game in the specified channel. Requires the Manage Messages permission or bot owner/curator status.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/end_protori&amp;lt;/code&amp;gt; || Manually ends the current Protori game.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/protori_stats&amp;lt;/code&amp;gt; || Displays the player&#039;s Protori statistics, both globally and broken down per server.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/protori_leaderboard&amp;lt;/code&amp;gt; || Displays the Protori leaderboard, server or global.&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Protori]]&lt;br /&gt;
&lt;br /&gt;
=== Solo Shiritori ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/solo_shiritori&amp;lt;/code&amp;gt; || Starts a private solo game against the AI in a dedicated thread.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/solo_stats&amp;lt;/code&amp;gt; || Displays the player&#039;s solo statistics.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/solo_leaderboard&amp;lt;/code&amp;gt; || Displays the global solo leaderboard.&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Solo Shiritori]]&lt;br /&gt;
&lt;br /&gt;
=== Wordle ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/wordle&amp;lt;/code&amp;gt; || Starts a private Wordle game.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/wordle_leaderboard&amp;lt;/code&amp;gt; || Displays Wordle win streaks by word length and mode.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/wordle_stats&amp;lt;/code&amp;gt; || Displays the player&#039;s personal Wordle win streaks by mode.&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Wordle]]&lt;br /&gt;
&lt;br /&gt;
=== Word Bomb ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/wordbomb&amp;lt;/code&amp;gt; || Starts a Word Bomb game.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/wordbomb_leaderboard&amp;lt;/code&amp;gt; || Displays the server&#039;s Word Bomb leaderboard.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/wordbomb_stats&amp;lt;/code&amp;gt; || Displays the player&#039;s personal Word Bomb statistics.&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Wordbomb]]&lt;br /&gt;
&lt;br /&gt;
=== Anagram ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/anagram&amp;lt;/code&amp;gt; || Starts a private Anagram game.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/anagram_stats&amp;lt;/code&amp;gt; || Displays the player&#039;s personal Anagram statistics.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/anagram_leaderboard&amp;lt;/code&amp;gt; || Displays the server&#039;s Anagram leaderboard.&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Anagram]]&lt;br /&gt;
&lt;br /&gt;
=== Dictionary and Words ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/dictionaries&amp;lt;/code&amp;gt; || Checks the player&#039;s progress against specific themed word lists.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/check&amp;lt;/code&amp;gt; || Checks whether one or more words are in the dictionary.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/characters&amp;lt;/code&amp;gt; || Displays the character count of the given word or words.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/solve&amp;lt;/code&amp;gt; || Searches for words matching a given prompt, length, or other criteria.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/suggest&amp;lt;/code&amp;gt; || Suggests a word for addition to the dictionary, or proposes removal of an existing entry.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/define&amp;lt;/code&amp;gt; || Returns an AI-generated definition of a word.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/word_collection&amp;lt;/code&amp;gt; || Displays a player&#039;s collected words.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/random_word&amp;lt;/code&amp;gt; || Returns a random word that has not yet been played.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/wordhunt&amp;lt;/code&amp;gt; || A recurring personal challenge, refreshing every 12 hours, that prompts the player to find dictionary words they have not yet used.&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Dictionary Information]]&lt;br /&gt;
&lt;br /&gt;
=== Casino and RNG ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/roll&amp;lt;/code&amp;gt; || Rolls for a random word, weighted by rarity.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/set_casino&amp;lt;/code&amp;gt; || Sets or removes the channels where &amp;lt;code&amp;gt;/roll&amp;lt;/code&amp;gt; may be used.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/rng_draw&amp;lt;/code&amp;gt; || Spins for a chance at rarer rewards.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/rng_stats&amp;lt;/code&amp;gt; || Displays the player&#039;s personal rolling statistics.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/rng_global&amp;lt;/code&amp;gt; || Displays global rolling statistics.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/rng_set_luck&amp;lt;/code&amp;gt; || Sets the player&#039;s luck multiplier for rolls.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/word_trade&amp;lt;/code&amp;gt; || Trades a word with another player.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Achievements ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/achievements&amp;lt;/code&amp;gt; || Displays the player&#039;s unlocked and obtainable achievements. Public/Private visibility choice.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/set_achievement&amp;lt;/code&amp;gt; || Sets or clears the player&#039;s displayed achievement from among those unlocked.&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Achievements]]&lt;br /&gt;
&lt;br /&gt;
=== Configuration and Utility ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/toggle_corrections&amp;lt;/code&amp;gt; || Toggles whether invalid words are deleted and warned about, or only marked with a reaction. Requires the Manage Messages permission.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config_view&amp;lt;/code&amp;gt; || Displays the server&#039;s configuration for AI event logging and word suggestion notifications.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/server&amp;lt;/code&amp;gt; || Returns an invite link to the official support server.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/wiki&amp;lt;/code&amp;gt; || Returns a link to this wiki.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/curator_form&amp;lt;/code&amp;gt; || Returns a link to the Word Curator application form.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/help&amp;lt;/code&amp;gt; || Displays a list of all commands.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Quick Chat Commands ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!i&amp;lt;/code&amp;gt; || An expanded version of &amp;lt;code&amp;gt;/check&amp;lt;/code&amp;gt; with more detail.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!level&amp;lt;/code&amp;gt; || Quick view of the player&#039;s level and experience progress.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!achieve&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;!achievement&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;!achievements&amp;lt;/code&amp;gt; || Opens the player&#039;s list of unlocked and obtainable achievements. All three aliases work identically.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!check&amp;lt;/code&amp;gt; || Curator only. Checks the status of pending word suggestions and removals.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!status&amp;lt;/code&amp;gt; || Displays the current game&#039;s status, including words played, average word length, and the next required letter.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!longest&amp;lt;/code&amp;gt; || Displays the top five longest words played in the current game.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!rng &amp;lt;word&amp;gt;&amp;lt;/code&amp;gt; || Checks a word&#039;s rarity and global ownership.&lt;br /&gt;
|}&lt;br /&gt;
A small number of additional text-trigger commands exist as hidden puzzle easter eggs. Their exact triggers are not documented publicly here. Separately, a set of documented explainer commands — &amp;lt;code&amp;gt;!hyphens&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;!neoses&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;!aisource&amp;lt;/code&amp;gt;, and their aliases — answer common questions about dictionary rules; see [[Dictionary Information]].&lt;br /&gt;
&lt;br /&gt;
== AI Opponents ==&lt;br /&gt;
Multiplayer games may include an AI opponent, added either randomly through &amp;lt;code&amp;gt;/invite_ai&amp;lt;/code&amp;gt; or by summoning a specific personality with a text command. Each of the 19 personalities follows its own word-selection logic — NOOB favors short, simple words, PRO requires words of at least twelve letters, MIMIC attempts to answer with an anagram of the player&#039;s own last word, and so on. Two further AI types, Sniper and Assassin, layer additional mechanics — one-shot dramatic word plays and a hijack-and-silence risk/reward exchange, respectively — on top of the base system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[AI Bots]]&lt;br /&gt;
&lt;br /&gt;
== Game Modes ==&lt;br /&gt;
&lt;br /&gt;
=== Multiplayer Shiritori ===&lt;br /&gt;
The core game mode. Players take turns submitting words in a shared channel, each beginning with the final letter of the previous word. Repeated words, invalid characters, and words that do not follow the required letter all end a player&#039;s turn or the game, depending on server configuration.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Multiplayer Shiritori]]&lt;br /&gt;
&lt;br /&gt;
=== Protori ===&lt;br /&gt;
A scoring-based variant of multiplayer Shiritori. Rather than simply continuing the chain, every accepted word earns points from a flat per-letter point table, weighted by how rare each letter is in the dictionary rather than a standard Scrabble-style tile distribution; a word&#039;s base score is just the sum of its letters&#039; values. Continuing more deeply into the previous word than just its final letter — matching several trailing characters in a row — earns a chain bonus of roughly 1% of the word&#039;s base score per matched character, up to about +79% for a very deep match. Playing a word that has already been used ends the game immediately and costs the player a 250-point penalty.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Protori]]&lt;br /&gt;
&lt;br /&gt;
=== Solo Shiritori ===&lt;br /&gt;
A private word-chain match played against an adaptive AI opponent in a dedicated thread. The AI begins as ROOKIE and its behavior shifts over time based on the player&#039;s performance and random chance.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Solo Shiritori]]&lt;br /&gt;
&lt;br /&gt;
=== Word Bomb ===&lt;br /&gt;
An elimination game for up to 16 players, each starting with three lives. On each turn, a player must submit a valid dictionary word containing an assigned prompt string before a timer runs out; failing to do so costs a life. Games started through &amp;lt;code&amp;gt;/wordbomb&amp;lt;/code&amp;gt; are configurable across several options, including bomb speed, starting difficulty (one of sixteen named buckets, from Tranquil down to the single-word Singularity tier), prompt length, allowed special characters, and an optional themed category filter.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Wordbomb]]&lt;br /&gt;
&lt;br /&gt;
=== Wordle ===&lt;br /&gt;
A private word-guessing game with two modes: Standardized, which applies stricter word validity rules, and Full Dictionary, which allows any word in the bot&#039;s full dictionary. Players choose a target word length and may optionally allow hyphenated words as valid answers. Win streaks are tracked separately for each word length and mode.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Wordle]]&lt;br /&gt;
&lt;br /&gt;
=== Anagram ===&lt;br /&gt;
A private single-player game in which the bot selects a base word and the player attempts to find as many valid words as possible using only the letters available in it.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Anagram]]&lt;br /&gt;
&lt;br /&gt;
=== Dictionary Tools ===&lt;br /&gt;
Two related but separate features track a player&#039;s progress through the dictionary. &amp;lt;code&amp;gt;/dictionaries&amp;lt;/code&amp;gt; reports progress against specific themed word lists. &amp;lt;code&amp;gt;/wordhunt&amp;lt;/code&amp;gt; is a recurring personal challenge, refreshing every 12 hours, that surfaces dictionary words the player has not yet used.&lt;br /&gt;
&lt;br /&gt;
== Fool&#039;s Mode ==&lt;br /&gt;
A special, occasional state, traditionally run around April Fools&#039; Day, in which the bot&#039;s word validation is deliberately loosened for comedic effect — words with no spaces are accepted as playable regardless of dictionary membership, and several commands (&amp;lt;code&amp;gt;!i&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;!info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/check&amp;lt;/code&amp;gt;, the end-of-game summary) start returning deliberately unreliable or nonsensical output. It is toggled on and off manually by the bot&#039;s operator rather than being scheduled automatically by the code itself.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Fool&#039;s Mode]]&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&#039;&#039;Super-Shiritori&#039;&#039; has been developed and maintained by Ghost (no_where.ghost_002) since November 22, 2024, with administrative and moderation support from Kos (kos256) and GreenyMage (greenymage).&lt;br /&gt;
&lt;br /&gt;
The bot&#039;s dictionary began as a small curated word list originally compiled by OMG, creator of the Roblox game &#039;&#039;Word Bomb&#039;&#039;. It later expanded through a bulk import of 320,000 words, followed by ongoing contributions from users, dictionary scraping from sources such as Merriam-Webster and Oxford, and the inclusion of acronyms, constructed languages, and foreign-language borrowings. The dictionary now exceeds 1.6 million entries. There is no anti-cheat system in place; players are free to consult external dictionaries or search engines, though playing without assistance is encouraged.&lt;br /&gt;
&lt;br /&gt;
The bot runs on hardware maintained directly by its developer, [[Ghost (Owner)|Ghost]], rather than on any cloud hosting service. It went offline on April 27, 2026, at the start of a military [https://en.wikipedia.org/wiki/Permanent_change_of_station Permanent Change of Station] ({{wc|PCS}}) relocation that took Ghost from South Korea through Japan, Alaska, and Los Angeles, California, before he finally settled in Hawaii on June 8, 2026. A subsequent housing shortage there delayed the bot&#039;s return well past initial estimates; it came back online on August 10, 2026, after roughly three and a half months offline — the longest outage in the bot&#039;s history. Household expenses connected to the move, including hosting costs, were covered as part of U.S. government {{wc|PCS}} support.&lt;br /&gt;
&lt;br /&gt;
Since coming back online, an automatic restart-on-crash mechanism has been added, intended to make genuine 24/7 uptime realistic going forward; as of this writing, expected downtime is limited to maintenance, a crash severe enough to take the host machine itself down, or a power outage.&lt;br /&gt;
&lt;br /&gt;
Two further features followed directly from that same reality. A planned restart or shutdown can now carry a custom message to every active game instead of one of two generic canned notices, so players get an accurate heads-up — an estimated outage length, for example — rather than a vague &amp;quot;update&amp;quot; notice. For the opposite case, a total, zero-warning loss of power gives the bot no chance to warn anyone before going offline at all; there&#039;s no way around that physically. What it can do instead is explain itself retroactively: reconnecting after any outage it wasn&#039;t able to shut down cleanly for now posts a message acknowledging the unplanned downtime, noting that unannounced power loss is a real and recurring possibility given the host machine&#039;s location, and confirming that any interrupted games have already been restored.&lt;br /&gt;
&lt;br /&gt;
== Official Design ==&lt;br /&gt;
* The name is always spelled &amp;quot;Super-Shiritori&amp;quot;.&lt;br /&gt;
* The official color is hex #F91000, informally named &amp;quot;Shiritorier&#039;s-Orange&amp;quot; as of December 1st.&lt;br /&gt;
* The logo is a mahjong-style tile featuring the Japanese characters ボ (&amp;quot;bo&amp;quot;) and ツ (&amp;quot;tsu&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
* [https://discord.com/oauth2/authorize?client_id=1309504109308674089 Invite the bot to a server]&lt;br /&gt;
* [https://discord.gg/WahVXSkA7H Support server]&lt;br /&gt;
* [https://forms.gle/kUGHkSsxMH43iugb8 Word Curator Assessment Form]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Discord Bots]]&lt;br /&gt;
* [[AI Bots]]&lt;br /&gt;
* [[Multiplayer Shiritori]]&lt;br /&gt;
* [[Solo Shiritori]]&lt;br /&gt;
* [[Protori]]&lt;br /&gt;
* [[Anagram]]&lt;br /&gt;
* [[Wordbomb]]&lt;br /&gt;
* [[Wordle]]&lt;br /&gt;
* [[Achievements]]&lt;br /&gt;
* [[Fool&#039;s Mode]]&lt;br /&gt;
* [[Manual-Tori]]&lt;br /&gt;
* [[Dictionary Information]]&lt;br /&gt;
* [[Word-Curatori]]&lt;br /&gt;
* [[Vexitori]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Information]]&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=Vexitori&amp;diff=6263</id>
		<title>Vexitori</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=Vexitori&amp;diff=6263"/>
		<updated>2026-09-05T05:19:45Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: Give the box its own red/dark theme matching the profile picture&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox application&lt;br /&gt;
| name = Vexitori&lt;br /&gt;
| color = #E24C4C&lt;br /&gt;
| bg = #1a0808&lt;br /&gt;
| image = [[File:Vexitori.png|250px]]&lt;br /&gt;
| caption = Profile picture&lt;br /&gt;
| type = Discord Bot&lt;br /&gt;
| function = Vexillopedia flag-guessing game&lt;br /&gt;
| platform = Discord&lt;br /&gt;
| status = Active&lt;br /&gt;
| launched = August 12, 2026&lt;br /&gt;
| hosted = Hawaii, USA (via Discord)&lt;br /&gt;
| counterparts = [[Super-Shiritori]]&amp;lt;br&amp;gt;[[Word-Curatori]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vexitori&#039;&#039;&#039; is a Discord bot dedicated to running [[Vexillopedia]], a continuous, automatic flag-guessing game (vexillology, the study of flags). It runs as a fully independent bot process, one of [[Discord Bots|three separate bots]] alongside [[Super-Shiritori]] and [[Word-Curatori]] — all three operate in the same Discord server, but Vexitori&#039;s flag game has no dependency on Shiritori, Anagram, Word Bomb, or any other game&#039;s state.&lt;br /&gt;
&lt;br /&gt;
== Gameplay ==&lt;br /&gt;
Vexitori runs a continuous loop in a dedicated game channel: as soon as one round ends, a short pause is followed by the next flag spawning automatically, with no player action required to start a round.&lt;br /&gt;
&lt;br /&gt;
Each round posts an embed showing the flag&#039;s &#039;&#039;&#039;Location&#039;&#039;&#039;, &#039;&#039;&#039;Type&#039;&#039;&#039;, and &#039;&#039;&#039;Time Era&#039;&#039;&#039; alongside the flag image itself — but not its name. Players guess by clicking a &amp;quot;Click here to Guess?&amp;quot; button, which opens a text-entry popup; a submitted guess is checked against the flag&#039;s full list of accepted names (a flag can have more than one correct answer — alternate names, spellings, or former names all count).&lt;br /&gt;
&lt;br /&gt;
The first correct guess starts a &#039;&#039;&#039;15-second&#039;&#039;&#039; countdown before the round locks; anyone who guesses correctly before it ends is recorded as a winner, so a round is rarely a race to be first so much as a race to answer before the window closes. If nobody interacts with a round at all for &#039;&#039;&#039;5 minutes&#039;&#039;&#039;, it ends early on its own rather than waiting indefinitely.&lt;br /&gt;
&lt;br /&gt;
When a round ends, results are posted showing every winner, the exact name they typed, whether it was their first time correctly answering that flag with that specific name (marked 🆕) or a repeat, and their current win streak. Every &#039;&#039;&#039;50th consecutive round won&#039;&#039;&#039; by the same player triggers a bonus: a &amp;quot;Special Flag&amp;quot; spawns exclusively for that player for 20 seconds, drawn from a separate pool of flags reserved only for this purpose.&lt;br /&gt;
&lt;br /&gt;
A separate channel supports free-form regex search: typing a pattern directly into it (no command prefix) searches every flag&#039;s accepted names for a match and returns a paginated result list.&lt;br /&gt;
&lt;br /&gt;
== Commands ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/vexillum_information&amp;lt;/code&amp;gt; || Looks up a specific flag by name or ID, or shows overall database totals if no flag is given.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/vexillolist&amp;lt;/code&amp;gt; || A paginated, filterable list of every flag in the database, showing personal completion progress.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/vex_add&amp;lt;/code&amp;gt; || Curator-only. Adds a new flag (image, location, type, time era, and one or more accepted names) to the database.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/vex_edit&amp;lt;/code&amp;gt; || Curator-only. Edits an existing flag&#039;s image, names, location, type, time era, or displayed (&amp;quot;dominant&amp;quot;) name.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/vex_delete&amp;lt;/code&amp;gt; || Curator-only. Removes a flag from the database. Deletion is logged with an undo control.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!vexrgb&amp;lt;/code&amp;gt; || Curator-only. Randomizes the embed accent color of every flag in the database.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!id&amp;lt;/code&amp;gt; || Restricted to specific individuals. Lists all flag IDs currently in use, or renumbers a flag&#039;s ID.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Flag Pools ==&lt;br /&gt;
Flags are identified by a numeric ID. Ordinary rounds are drawn only from flags with a &#039;&#039;&#039;positive&#039;&#039;&#039; ID, and the game avoids repeating any flag that appeared in roughly the last 25 rounds. Flags with a &#039;&#039;&#039;negative&#039;&#039;&#039; ID are held back from normal rotation entirely and only ever appear as the 50-win-streak Special Flag reward.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
Vexitori runs as its own separate Discord bot process — a distinct login token and OS process from both [[Super-Shiritori]] and [[Word-Curatori]] — rather than as a module inside the main game bot. This was possible because the flag game touches none of Super-Shiritori&#039;s shared game state; its only real dependency, the flag database itself, is self-contained within Vexitori.&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
Vexillopedia (the flag database Vexitori runs) is still an actively developed, in-testing project, maintained separately from Super-Shiritori itself. As of a public announcement on August 8, 2026, its maintainer stated he is currently hospitalized, for reasons he has chosen not to disclose publicly, and that new flag submissions are paused with no set timeline until he returns.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Discord Bots]]&lt;br /&gt;
* [[Super-Shiritori]]&lt;br /&gt;
* [[Word-Curatori]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Information]]&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=Word-Curatori&amp;diff=6262</id>
		<title>Word-Curatori</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=Word-Curatori&amp;diff=6262"/>
		<updated>2026-09-05T05:19:43Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: Fix Hosted in (was showing the 2023 launch location, not current) and give the box its own cyan/dark theme&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox application&lt;br /&gt;
| name = Word-Curatori&lt;br /&gt;
| color = #5BC8F2&lt;br /&gt;
| bg = #081018&lt;br /&gt;
| image = [[File:Word-Curatori.png|250px]]&lt;br /&gt;
| caption = Profile picture&lt;br /&gt;
| type = Discord Bot&lt;br /&gt;
| function = Word curation &amp;amp; dictionary management&lt;br /&gt;
| platform = Discord&lt;br /&gt;
| status = Active&lt;br /&gt;
| launched = August 28, 2023&lt;br /&gt;
| hosted_from = Washington State, USA (via Discord)&lt;br /&gt;
| hosted = Hawaii, USA (via Discord)&lt;br /&gt;
| access = Dictionary write access (sole writer)&lt;br /&gt;
| counterparts = [[Super-Shiritori]]&amp;lt;br&amp;gt;[[Vexitori]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Word-Curatori&#039;&#039;&#039; is the Discord bot responsible for word curation: it is the only one of [[Discord Bots|three separate bots]] — alongside [[Super-Shiritori]] and [[Vexitori]] — that is allowed to write to the dictionary files. Curators use it directly to add or remove words, and it runs the review workflow behind [[Super-Shiritori]]&#039;s &amp;lt;code&amp;gt;/suggest&amp;lt;/code&amp;gt; command. For the standards curators actually apply when deciding whether a word belongs, see [[Dictionary Information]]; this page covers the bot itself.&lt;br /&gt;
&lt;br /&gt;
== Commands ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!add&amp;lt;/code&amp;gt; (alias &amp;lt;code&amp;gt;!a&amp;lt;/code&amp;gt;) || Curator only. Adds one word to a dictionary. Accepts a single typed word, an attached text file (one word per line), or a path to a text file on the bot&#039;s own machine. With no dictionary named, the word goes to a staging area and merges into the main dictionary shortly after.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!remove&amp;lt;/code&amp;gt; (alias &amp;lt;code&amp;gt;!r&amp;lt;/code&amp;gt;) || Curator only. Removes one word, the same three ways &amp;lt;code&amp;gt;!add&amp;lt;/code&amp;gt; accepts input. With no dictionary named, it&#039;s removed from the main dictionary and every themed category file it appears in.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!check&amp;lt;/code&amp;gt; || Curator only. Lists suggestions and removal requests (submitted elsewhere via &amp;lt;code&amp;gt;/suggest&amp;lt;/code&amp;gt;) still waiting for a curator to Accept or Reject.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!help&amp;lt;/code&amp;gt; || Shows the bot&#039;s own command list.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/suggest_ban&amp;lt;/code&amp;gt; || Bans a user from using &amp;lt;code&amp;gt;/suggest&amp;lt;/code&amp;gt;. Restricted to server mods, admins, and the bot owner — deliberately &#039;&#039;&#039;not&#039;&#039;&#039; gated on the word curator role, since who gets to submit suggestions is treated as a moderation decision rather than a curation one.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/suggest_unban&amp;lt;/code&amp;gt; || Reverses a &amp;lt;code&amp;gt;/suggest_ban&amp;lt;/code&amp;gt;. Same restriction as above.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/suggest&amp;lt;/code&amp;gt; itself is registered on [[Super-Shiritori]] (so it&#039;s discoverable from anywhere alongside every other player command), but everything that happens after it&#039;s invoked — validating the words, checking them against the live dictionary, posting the review embed, and handling the Accept/Review Manually/Reject/Cancel buttons — actually runs on Word-Curatori. The two bots talk over a small local-only connection for this purpose.&lt;br /&gt;
&lt;br /&gt;
== Background Tasks ==&lt;br /&gt;
Word-Curatori runs several tasks on its own schedule, independent of any command:&lt;br /&gt;
* &#039;&#039;&#039;Limbo merge&#039;&#039;&#039; — every 2 minutes, words accepted via &amp;lt;code&amp;gt;/suggest&amp;lt;/code&amp;gt; or added without a specific dictionary named are merged from a staging area into the live main dictionary.&lt;br /&gt;
* &#039;&#039;&#039;Dictionary backup&#039;&#039;&#039; — an hourly snapshot of the dictionary files.&lt;br /&gt;
* &#039;&#039;&#039;Auto-category backfill&#039;&#039;&#039; — runs once at startup, sorting words into a few automatically-derived categories (such as by length or palindrome status) rather than requiring a curator to do it by hand.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
Word-Curatori runs as a completely separate Discord bot process from [[Super-Shiritori]] and [[Vexitori]] — its own login token, its own OS process — specifically so that heavy curation work (bulk word additions, full dictionary rewrites) can never stall the game bot&#039;s responsiveness. Running two bots as threads or async tasks inside one process would still contend for the same CPU time under Python&#039;s GIL; a genuinely separate process gives real operating-system-level isolation instead.&lt;br /&gt;
&lt;br /&gt;
Word-Curatori is the &#039;&#039;&#039;sole writer&#039;&#039;&#039; of the dictionary files. [[Super-Shiritori]] only ever reads them, picking up whatever changes Word-Curatori has made within about 30 seconds.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Dictionary Information]]&lt;br /&gt;
* [[Super-Shiritori]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Information]]&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=MediaWiki:Common.js&amp;diff=6261</id>
		<title>MediaWiki:Common.js</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=MediaWiki:Common.js&amp;diff=6261"/>
		<updated>2026-09-05T05:18:43Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: Add infobox gallery tab-switching and mobile infobox reordering (below lead paragraph, Wikipedia-style)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Behavior for Template:Infobox_application. Lives in Common.js (not&lt;br /&gt;
 * Cosmos.js) so it keeps working regardless of which skin a reader/editor&lt;br /&gt;
 * has selected. */&lt;br /&gt;
( function () {&lt;br /&gt;
&lt;br /&gt;
	// Clickable tab bar for multi-image infoboxes (image1/caption1,&lt;br /&gt;
	// image2/caption2, ...). Without this, only the first &amp;lt;div data-ia-slide&amp;gt;&lt;br /&gt;
	// is visible -- everything still renders, it just can&#039;t be switched.&lt;br /&gt;
	function initInfoboxGalleries() {&lt;br /&gt;
		document.querySelectorAll( &#039;.infobox-application__gallery&#039; ).forEach( function ( gallery ) {&lt;br /&gt;
			var tabs = gallery.querySelectorAll( &#039;.infobox-application__gallery-tab&#039; );&lt;br /&gt;
			var slides = gallery.querySelectorAll( &#039;.infobox-application__gallery-slide&#039; );&lt;br /&gt;
			tabs.forEach( function ( tab ) {&lt;br /&gt;
				tab.addEventListener( &#039;click&#039;, function () {&lt;br /&gt;
					var index = tab.getAttribute( &#039;data-ia-tab&#039; );&lt;br /&gt;
					tabs.forEach( function ( t ) {&lt;br /&gt;
						t.classList.toggle( &#039;is-active&#039;, t === tab );&lt;br /&gt;
					} );&lt;br /&gt;
					slides.forEach( function ( slide ) {&lt;br /&gt;
						slide.hidden = slide.getAttribute( &#039;data-ia-slide&#039; ) !== index;&lt;br /&gt;
					} );&lt;br /&gt;
				} );&lt;br /&gt;
			} );&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// On narrow screens the infobox drops its desktop float (see&lt;br /&gt;
	// Template:Infobox_application/styles.css) and becomes a full-width&lt;br /&gt;
	// block -- but it&#039;s still first in the wikitext/DOM, so without this it&lt;br /&gt;
	// would render ABOVE the lead paragraph instead of below it, the way&lt;br /&gt;
	// Wikipedia&#039;s mobile view places infoboxes. This moves it to just after&lt;br /&gt;
	// the first non-empty paragraph of the article (mirrors MobileFrontend&#039;s&lt;br /&gt;
	// own behavior, which Cosmos doesn&#039;t have).&lt;br /&gt;
	function relocateInfoboxOnMobile() {&lt;br /&gt;
		if ( window.innerWidth &amp;gt; 550 ) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
		document.querySelectorAll( &#039;.mw-parser-output &amp;gt; .infobox-application&#039; ).forEach( function ( box ) {&lt;br /&gt;
			var sib = box.nextElementSibling;&lt;br /&gt;
			while ( sib &amp;amp;&amp;amp; ( sib.tagName !== &#039;P&#039; || !sib.textContent.trim() ) ) {&lt;br /&gt;
				sib = sib.nextElementSibling;&lt;br /&gt;
			}&lt;br /&gt;
			if ( sib ) {&lt;br /&gt;
				sib.insertAdjacentElement( &#039;afterend&#039;, box );&lt;br /&gt;
			}&lt;br /&gt;
		} );&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function init() {&lt;br /&gt;
		initInfoboxGalleries();&lt;br /&gt;
		relocateInfoboxOnMobile();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ( document.readyState === &#039;loading&#039; ) {&lt;br /&gt;
		document.addEventListener( &#039;DOMContentLoaded&#039;, init );&lt;br /&gt;
	} else {&lt;br /&gt;
		init();&lt;br /&gt;
	}&lt;br /&gt;
}() );&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=Template:Infobox_application&amp;diff=6260</id>
		<title>Template:Infobox application</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=Template:Infobox_application&amp;diff=6260"/>
		<updated>2026-09-05T05:18:41Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: Add per-bot color/bg theming, multi-image tab-bar gallery, and split hosted into origin/current&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;templatestyles src=&amp;quot;Infobox application/styles.css&amp;quot;/&amp;gt;&amp;lt;div class=&amp;quot;infobox-application&amp;quot;{{#if:{{{color|}}}{{{bg|}}}| style=&amp;quot;{{#if:{{{color|}}}|--ia-accent: {{{color}}};}}{{#if:{{{bg|}}}| --ia-bg: {{{bg}}};}}&amp;quot;}}&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__title&amp;quot;&amp;gt;{{{name|{{PAGENAME}}}}}&amp;lt;/div&amp;gt;{{#if:{{{image2|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__gallery&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__gallery-tabs&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__gallery-tab is-active&amp;quot; data-ia-tab=&amp;quot;0&amp;quot;&amp;gt;{{{caption1|Image 1}}}&amp;lt;/div&amp;gt;{{#if:{{{image2|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-tab&amp;quot; data-ia-tab=&amp;quot;1&amp;quot;&amp;gt;{{{caption2|Image 2}}}&amp;lt;/div&amp;gt;}}{{#if:{{{image3|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-tab&amp;quot; data-ia-tab=&amp;quot;2&amp;quot;&amp;gt;{{{caption3|Image 3}}}&amp;lt;/div&amp;gt;}}{{#if:{{{image4|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-tab&amp;quot; data-ia-tab=&amp;quot;3&amp;quot;&amp;gt;{{{caption4|Image 4}}}&amp;lt;/div&amp;gt;}}{{#if:{{{image5|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-tab&amp;quot; data-ia-tab=&amp;quot;4&amp;quot;&amp;gt;{{{caption5|Image 5}}}&amp;lt;/div&amp;gt;}}{{#if:{{{image6|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-tab&amp;quot; data-ia-tab=&amp;quot;5&amp;quot;&amp;gt;{{{caption6|Image 6}}}&amp;lt;/div&amp;gt;}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__gallery-slide&amp;quot; data-ia-slide=&amp;quot;0&amp;quot;&amp;gt;{{{image1|}}}{{#if:{{{caption1|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-caption&amp;quot;&amp;gt;{{{caption1}}}&amp;lt;/div&amp;gt;}}&amp;lt;/div&amp;gt;{{#if:{{{image2|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-slide&amp;quot; data-ia-slide=&amp;quot;1&amp;quot; hidden&amp;gt;{{{image2}}}{{#if:{{{caption2|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-caption&amp;quot;&amp;gt;{{{caption2}}}&amp;lt;/div&amp;gt;}}&amp;lt;/div&amp;gt;}}{{#if:{{{image3|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-slide&amp;quot; data-ia-slide=&amp;quot;2&amp;quot; hidden&amp;gt;{{{image3}}}{{#if:{{{caption3|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-caption&amp;quot;&amp;gt;{{{caption3}}}&amp;lt;/div&amp;gt;}}&amp;lt;/div&amp;gt;}}{{#if:{{{image4|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-slide&amp;quot; data-ia-slide=&amp;quot;3&amp;quot; hidden&amp;gt;{{{image4}}}{{#if:{{{caption4|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-caption&amp;quot;&amp;gt;{{{caption4}}}&amp;lt;/div&amp;gt;}}&amp;lt;/div&amp;gt;}}{{#if:{{{image5|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-slide&amp;quot; data-ia-slide=&amp;quot;4&amp;quot; hidden&amp;gt;{{{image5}}}{{#if:{{{caption5|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-caption&amp;quot;&amp;gt;{{{caption5}}}&amp;lt;/div&amp;gt;}}&amp;lt;/div&amp;gt;}}{{#if:{{{image6|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-slide&amp;quot; data-ia-slide=&amp;quot;5&amp;quot; hidden&amp;gt;{{{image6}}}{{#if:{{{caption6|}}}|&amp;lt;div class=&amp;quot;infobox-application__gallery-caption&amp;quot;&amp;gt;{{{caption6}}}&amp;lt;/div&amp;gt;}}&amp;lt;/div&amp;gt;}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|{{#if:{{{image|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__image&amp;quot;&amp;gt;{{{image}}}&amp;lt;/div&amp;gt;}}{{#if:{{{caption|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__caption&amp;quot;&amp;gt;{{{caption}}}&amp;lt;/div&amp;gt;}}}}{{#if:{{{type|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Type&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{type}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}{{#if:{{{function|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Function&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{function}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}{{#if:{{{aliases|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Aliases&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{aliases}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}{{#if:{{{platform|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Platform&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{platform}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}{{#if:{{{developer|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Developer&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{developer}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}{{#if:{{{language|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Language&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{language}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}{{#if:{{{status|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Status&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{status}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}{{#if:{{{launched|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Launched&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{launched}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}{{#if:{{{hosted|}}}|{{#if:{{{hosted_from|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Originally hosted&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{hosted_from}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Currently hosted&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{hosted}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Hosted in&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{hosted}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}}}{{#if:{{{access|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Access&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{access}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}{{#if:{{{counterparts|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Related bots&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{counterparts}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}&lt;br /&gt;
&amp;lt;/div&amp;gt;{{#ifeq: {{NAMESPACENUMBER}} | 0 | [[Category:Applications]]}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
== Description ==&lt;br /&gt;
A dark-themed infobox for the wiki&#039;s Discord bots/applications (Super-Shiritori, Word-Curatori, Vexitori). Replaces the old &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{Character}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; template, which was raw Fandom &amp;quot;Portable Infobox&amp;quot; markup (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;infobox type=&amp;quot;Character&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;) left over from the Fandom migration -- that extension was never self-hostable, so it rendered as literal unparsed tags rather than an actual infobox, and its fields (Species, Gender, Portrayed by, Marital status...) were built for fictional characters, not bots.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Infobox application&lt;br /&gt;
| name        =&lt;br /&gt;
| color       =&lt;br /&gt;
| bg          =&lt;br /&gt;
| image       = [[File:Example.png|250px]]&lt;br /&gt;
| caption     =&lt;br /&gt;
| image1      =&lt;br /&gt;
| caption1    =&lt;br /&gt;
| image2      =&lt;br /&gt;
| caption2    =&lt;br /&gt;
| type        = Discord Bot&lt;br /&gt;
| function    =&lt;br /&gt;
| aliases     =&lt;br /&gt;
| platform    = Discord&lt;br /&gt;
| developer   =&lt;br /&gt;
| language    =&lt;br /&gt;
| status      = Active&lt;br /&gt;
| launched    =&lt;br /&gt;
| hosted_from =&lt;br /&gt;
| hosted      =&lt;br /&gt;
| access      =&lt;br /&gt;
| counterparts =&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All fields are optional except &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; (which defaults to the page title). A blank/omitted field just doesn&#039;t render that row.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Single image:&#039;&#039;&#039; use &amp;lt;code&amp;gt;image&amp;lt;/code&amp;gt; (full wikitext, e.g. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;[[File:Example.png|250px]]&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;) and optionally &amp;lt;code&amp;gt;caption&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Multiple images (clickable tab bar):&#039;&#039;&#039; once &amp;lt;code&amp;gt;image2&amp;lt;/code&amp;gt; is set, the box switches to tabbed-gallery mode -- use &amp;lt;code&amp;gt;image1&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;caption1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;image2&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;caption2&amp;lt;/code&amp;gt;, up through &amp;lt;code&amp;gt;image6&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;caption6&amp;lt;/code&amp;gt;. Each caption becomes a tab label; clicking a tab swaps the picture. See [[Super-Shiritori]] for a live 4-image example. (Requires JavaScript -- with it off, only the first image shows.)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Color scheme:&#039;&#039;&#039; &amp;lt;code&amp;gt;color&amp;lt;/code&amp;gt; sets the accent color (tab bar, labels, header text -- default site orange &amp;lt;code&amp;gt;#F19000&amp;lt;/code&amp;gt;); &amp;lt;code&amp;gt;bg&amp;lt;/code&amp;gt; sets the card&#039;s background (default &amp;lt;code&amp;gt;#2a0f00&amp;lt;/code&amp;gt;). Pick both to theme a box around its own images instead of the default orange/brown. Keep &amp;lt;code&amp;gt;bg&amp;lt;/code&amp;gt; dark -- body text is a fixed light gray and won&#039;t stay readable on a light background.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;hosted&amp;lt;/code&amp;gt; is always the &#039;&#039;&#039;current&#039;&#039;&#039; hosting location. Add &amp;lt;code&amp;gt;hosted_from&amp;lt;/code&amp;gt; only if that location has changed since launch -- doing so splits the single &amp;quot;Hosted in&amp;quot; row into &amp;quot;Originally hosted&amp;quot; / &amp;quot;Currently hosted&amp;quot; instead. Leave &amp;lt;code&amp;gt;hosted_from&amp;lt;/code&amp;gt; out for a bot that&#039;s never moved.&lt;br /&gt;
&lt;br /&gt;
[[Category:Infobox templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=Template:Infobox_application/styles.css&amp;diff=6259</id>
		<title>Template:Infobox application/styles.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=Template:Infobox_application/styles.css&amp;diff=6259"/>
		<updated>2026-09-05T05:18:40Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: Add --ia-accent/--ia-bg custom-property support and multi-image tabbed gallery styles&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Colors come from --ia-accent / --ia-bg custom properties set inline by the&lt;br /&gt;
   template (see Template:Infobox_application `color=` / `bg=` params) so each&lt;br /&gt;
   page can theme its own infobox around its own images. The var() fallbacks&lt;br /&gt;
   below are what you get if a page doesn&#039;t set them -- the original orange/&lt;br /&gt;
   dark-brown look. */&lt;br /&gt;
&lt;br /&gt;
.infobox-application {&lt;br /&gt;
	float: right;&lt;br /&gt;
	clear: right;&lt;br /&gt;
	width: 300px;&lt;br /&gt;
	margin: 0 0 1em 1em;&lt;br /&gt;
	background-color: var(--ia-bg, #2a0f00);&lt;br /&gt;
	border: 1px solid rgba(255, 255, 255, 0.15);&lt;br /&gt;
	border-radius: 4px;&lt;br /&gt;
	box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);&lt;br /&gt;
	font-size: 88%;&lt;br /&gt;
	line-height: 1.4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__title {&lt;br /&gt;
	background-color: #1a0a00;&lt;br /&gt;
	color: var(--ia-accent, #F19000);&lt;br /&gt;
	font-size: 120%;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 8px;&lt;br /&gt;
	border-bottom: 1px solid rgba(255, 255, 255, 0.15);&lt;br /&gt;
	border-radius: 4px 4px 0 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__image {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 8px;&lt;br /&gt;
	border-bottom: 1px solid rgba(255, 255, 255, 0.1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__image img {&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__caption {&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
	font-size: 90%;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 4px 8px;&lt;br /&gt;
	border-bottom: 1px solid rgba(255, 255, 255, 0.1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__row {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	padding: 4px 8px;&lt;br /&gt;
	border-bottom: 1px solid rgba(255, 255, 255, 0.08);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__row:last-child {&lt;br /&gt;
	border-bottom: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__label {&lt;br /&gt;
	color: var(--ia-accent, #F19000);&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	width: 40%;&lt;br /&gt;
	flex-shrink: 0;&lt;br /&gt;
	padding-right: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__value {&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
	width: 60%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Multi-image tabbed gallery (image1/caption1, image2/caption2, ...) --- */&lt;br /&gt;
.infobox-application__gallery-tabs {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	overflow-x: auto;&lt;br /&gt;
	background-color: var(--ia-accent, #F19000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__gallery-tab {&lt;br /&gt;
	flex: 0 0 auto;&lt;br /&gt;
	color: #1a0a00;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	font-size: 90%;&lt;br /&gt;
	padding: 8px 10px;&lt;br /&gt;
	cursor: pointer;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
	border-bottom: 3px solid transparent;&lt;br /&gt;
	user-select: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__gallery-tab.is-active {&lt;br /&gt;
	background-color: rgba(0, 0, 0, 0.2);&lt;br /&gt;
	border-bottom-color: #1a0a00;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__gallery-tab:hover {&lt;br /&gt;
	background-color: rgba(0, 0, 0, 0.12);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__gallery-slide {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 8px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__gallery-slide[hidden] {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__gallery-slide img {&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__gallery-caption {&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
	font-size: 90%;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0 8px 8px;&lt;br /&gt;
	border-bottom: 1px solid rgba(255, 255, 255, 0.1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Below this, a 300px fixed-width float leaves almost no room for the&lt;br /&gt;
   article text beside it (down to a single-character-wide column on a&lt;br /&gt;
   phone) -- drop the float and let the box take the full column width. */&lt;br /&gt;
@media screen and (max-width: 550px) {&lt;br /&gt;
	.infobox-application {&lt;br /&gt;
		float: none;&lt;br /&gt;
		clear: both;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		margin: 0 0 1em 0;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=Template:Infobox_application/styles.css&amp;diff=6258</id>
		<title>Template:Infobox application/styles.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=Template:Infobox_application/styles.css&amp;diff=6258"/>
		<updated>2026-09-05T05:08:30Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: Fix mobile: drop the float below 550px, was squeezing article text into a 1-char-wide column&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.infobox-application {&lt;br /&gt;
	float: right;&lt;br /&gt;
	clear: right;&lt;br /&gt;
	width: 300px;&lt;br /&gt;
	margin: 0 0 1em 1em;&lt;br /&gt;
	background-color: #2a0f00;&lt;br /&gt;
	border: 1px solid rgba(255, 255, 255, 0.15);&lt;br /&gt;
	border-radius: 4px;&lt;br /&gt;
	box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);&lt;br /&gt;
	font-size: 88%;&lt;br /&gt;
	line-height: 1.4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__title {&lt;br /&gt;
	background-color: #1a0a00;&lt;br /&gt;
	color: #F19000;&lt;br /&gt;
	font-size: 120%;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 8px;&lt;br /&gt;
	border-bottom: 1px solid rgba(255, 255, 255, 0.15);&lt;br /&gt;
	border-radius: 4px 4px 0 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__image {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 8px;&lt;br /&gt;
	border-bottom: 1px solid rgba(255, 255, 255, 0.1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__image img {&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__caption {&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
	font-size: 90%;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 4px 8px;&lt;br /&gt;
	border-bottom: 1px solid rgba(255, 255, 255, 0.1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__row {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	padding: 4px 8px;&lt;br /&gt;
	border-bottom: 1px solid rgba(255, 255, 255, 0.08);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__row:last-child {&lt;br /&gt;
	border-bottom: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__label {&lt;br /&gt;
	color: #F19000;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	width: 40%;&lt;br /&gt;
	flex-shrink: 0;&lt;br /&gt;
	padding-right: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__value {&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
	width: 60%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Below this, a 300px fixed-width float leaves almost no room for the&lt;br /&gt;
   article text beside it (down to a single-character-wide column on a&lt;br /&gt;
   phone) -- drop the float and let the box take the full column width. */&lt;br /&gt;
@media screen and (max-width: 550px) {&lt;br /&gt;
	.infobox-application {&lt;br /&gt;
		float: none;&lt;br /&gt;
		clear: both;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		margin: 0 0 1em 0;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=Template:Character&amp;diff=6257</id>
		<title>Template:Character</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=Template:Character&amp;diff=6257"/>
		<updated>2026-09-05T05:06:25Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: Retire this template -- it was raw Fandom Portable-Infobox markup that never worked here; replaced by Template:Infobox application on all 3 pages that used it&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Template:Infobox application]]&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=Super-Shiritori&amp;diff=6256</id>
		<title>Super-Shiritori</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=Super-Shiritori&amp;diff=6256"/>
		<updated>2026-09-05T05:06:02Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: Switch to the new Infobox application template (old Character infobox was broken Fandom Portable-Infobox markup)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox application&lt;br /&gt;
| name = Super-Shiritori&lt;br /&gt;
| image = &amp;lt;gallery&amp;gt;&lt;br /&gt;
Super Shiritori Bot (Discord).png|Main profile picture&lt;br /&gt;
Super-Merritori.png|Holiday profile picture&lt;br /&gt;
Halloween Shiritori PFP.png|Halloween profile picture&lt;br /&gt;
Original Super-Shiritori PFP.webp|Original profile picture&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
| aliases = Super Shiritori, Shiritori&lt;br /&gt;
| type = Discord Bot&lt;br /&gt;
| function = Flagship word-chain game bot&lt;br /&gt;
| platform = Discord&lt;br /&gt;
| status = Active&lt;br /&gt;
| launched = November 22, 2024&lt;br /&gt;
| hosted = Washington State, USA (via Discord)&lt;br /&gt;
| counterparts = [[Word-Curatori]] (originally called &amp;quot;Super Shiritori (Test Edition)&amp;quot;)&amp;lt;br&amp;gt;[[Vexitori]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Super-Shiritori&#039;&#039;&#039; is the flagship Discord bot of the project, running a word-chain game in which players respond with a word beginning with the final letter of the previous word. Alongside its core game, it supports several related word-based modes, tracks detailed player statistics, and maintains the shared dictionary of over 1.6 million entries. It is one of [[Discord Bots|three separate bots]] that make up the project, running alongside [[Word-Curatori]] and [[Vexitori]].&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
* Multiplayer and solo word-chain gameplay, against other players or AI opponents with distinct personalities&lt;br /&gt;
* A dictionary exceeding 1.6 million entries, drawn from acronyms, user submissions, foreign-language borrowings, constructed languages, and established published dictionaries&lt;br /&gt;
* Additional game modes, including Word Bomb, Wordle, Anagram, and Protori&lt;br /&gt;
* A rarity-based word rolling and trading system&lt;br /&gt;
* Player statistics, leaderboards, and a leveling system with unlockable [[Achievements]] (formerly called titles)&lt;br /&gt;
* Deployable in any Discord server&lt;br /&gt;
* A small number of hidden text-trigger commands functioning as puzzle easter eggs&lt;br /&gt;
&lt;br /&gt;
== Bot Commands ==&lt;br /&gt;
&lt;br /&gt;
=== Multiplayer Shiritori ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/start_shiritori [#channel]&amp;lt;/code&amp;gt; || Starts a multiplayer game in the specified channel. Requires the Manage Messages permission or bot owner status.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/end_shiritori&amp;lt;/code&amp;gt; || Manually ends the current game and displays final statistics.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/invite_ai&amp;lt;/code&amp;gt; || Invites an AI opponent with a randomly assigned personality into the current game.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/murder_ai&amp;lt;/code&amp;gt; || Attempts to remove the current AI opponent from the game.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/leaderboard&amp;lt;/code&amp;gt; || Displays the server&#039;s multiplayer leaderboard by category.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/my_stats&amp;lt;/code&amp;gt; || Displays the player&#039;s personal global multiplayer statistics.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/levels_leaderboard&amp;lt;/code&amp;gt; || Displays the server&#039;s level leaderboard.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/level&amp;lt;/code&amp;gt; || Displays the player&#039;s current level and experience progress.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/restore_games&amp;lt;/code&amp;gt; || Restores active games after a bot restart or shutdown.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/global_stats&amp;lt;/code&amp;gt; || Displays aggregated multiplayer statistics across all servers.&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Multiplayer Shiritori]]&lt;br /&gt;
&lt;br /&gt;
=== Protori ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/start_protori [#channel]&amp;lt;/code&amp;gt; || Starts a Protori game in the specified channel. Requires the Manage Messages permission or bot owner/curator status.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/end_protori&amp;lt;/code&amp;gt; || Manually ends the current Protori game.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/protori_stats&amp;lt;/code&amp;gt; || Displays the player&#039;s Protori statistics, both globally and broken down per server.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/protori_leaderboard&amp;lt;/code&amp;gt; || Displays the Protori leaderboard, server or global.&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Protori]]&lt;br /&gt;
&lt;br /&gt;
=== Solo Shiritori ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/solo_shiritori&amp;lt;/code&amp;gt; || Starts a private solo game against the AI in a dedicated thread.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/solo_stats&amp;lt;/code&amp;gt; || Displays the player&#039;s solo statistics.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/solo_leaderboard&amp;lt;/code&amp;gt; || Displays the global solo leaderboard.&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Solo Shiritori]]&lt;br /&gt;
&lt;br /&gt;
=== Wordle ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/wordle&amp;lt;/code&amp;gt; || Starts a private Wordle game.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/wordle_leaderboard&amp;lt;/code&amp;gt; || Displays Wordle win streaks by word length and mode.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/wordle_stats&amp;lt;/code&amp;gt; || Displays the player&#039;s personal Wordle win streaks by mode.&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Wordle]]&lt;br /&gt;
&lt;br /&gt;
=== Word Bomb ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/wordbomb&amp;lt;/code&amp;gt; || Starts a Word Bomb game.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/wordbomb_leaderboard&amp;lt;/code&amp;gt; || Displays the server&#039;s Word Bomb leaderboard.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/wordbomb_stats&amp;lt;/code&amp;gt; || Displays the player&#039;s personal Word Bomb statistics.&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Wordbomb]]&lt;br /&gt;
&lt;br /&gt;
=== Anagram ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/anagram&amp;lt;/code&amp;gt; || Starts a private Anagram game.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/anagram_stats&amp;lt;/code&amp;gt; || Displays the player&#039;s personal Anagram statistics.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/anagram_leaderboard&amp;lt;/code&amp;gt; || Displays the server&#039;s Anagram leaderboard.&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Anagram]]&lt;br /&gt;
&lt;br /&gt;
=== Dictionary and Words ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/dictionaries&amp;lt;/code&amp;gt; || Checks the player&#039;s progress against specific themed word lists.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/check&amp;lt;/code&amp;gt; || Checks whether one or more words are in the dictionary.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/characters&amp;lt;/code&amp;gt; || Displays the character count of the given word or words.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/solve&amp;lt;/code&amp;gt; || Searches for words matching a given prompt, length, or other criteria.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/suggest&amp;lt;/code&amp;gt; || Suggests a word for addition to the dictionary, or proposes removal of an existing entry.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/define&amp;lt;/code&amp;gt; || Returns an AI-generated definition of a word.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/word_collection&amp;lt;/code&amp;gt; || Displays a player&#039;s collected words.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/random_word&amp;lt;/code&amp;gt; || Returns a random word that has not yet been played.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/wordhunt&amp;lt;/code&amp;gt; || A recurring personal challenge, refreshing every 12 hours, that prompts the player to find dictionary words they have not yet used.&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Dictionary Information]]&lt;br /&gt;
&lt;br /&gt;
=== Casino and RNG ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/roll&amp;lt;/code&amp;gt; || Rolls for a random word, weighted by rarity.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/set_casino&amp;lt;/code&amp;gt; || Sets or removes the channels where &amp;lt;code&amp;gt;/roll&amp;lt;/code&amp;gt; may be used.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/rng_draw&amp;lt;/code&amp;gt; || Spins for a chance at rarer rewards.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/rng_stats&amp;lt;/code&amp;gt; || Displays the player&#039;s personal rolling statistics.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/rng_global&amp;lt;/code&amp;gt; || Displays global rolling statistics.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/rng_set_luck&amp;lt;/code&amp;gt; || Sets the player&#039;s luck multiplier for rolls.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/word_trade&amp;lt;/code&amp;gt; || Trades a word with another player.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Achievements ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/achievements&amp;lt;/code&amp;gt; || Displays the player&#039;s unlocked and obtainable achievements. Public/Private visibility choice.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/set_achievement&amp;lt;/code&amp;gt; || Sets or clears the player&#039;s displayed achievement from among those unlocked.&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Achievements]]&lt;br /&gt;
&lt;br /&gt;
=== Configuration and Utility ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/toggle_corrections&amp;lt;/code&amp;gt; || Toggles whether invalid words are deleted and warned about, or only marked with a reaction. Requires the Manage Messages permission.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config_view&amp;lt;/code&amp;gt; || Displays the server&#039;s configuration for AI event logging and word suggestion notifications.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/server&amp;lt;/code&amp;gt; || Returns an invite link to the official support server.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/wiki&amp;lt;/code&amp;gt; || Returns a link to this wiki.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/curator_form&amp;lt;/code&amp;gt; || Returns a link to the Word Curator application form.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/help&amp;lt;/code&amp;gt; || Displays a list of all commands.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Quick Chat Commands ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!i&amp;lt;/code&amp;gt; || An expanded version of &amp;lt;code&amp;gt;/check&amp;lt;/code&amp;gt; with more detail.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!level&amp;lt;/code&amp;gt; || Quick view of the player&#039;s level and experience progress.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!achieve&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;!achievement&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;!achievements&amp;lt;/code&amp;gt; || Opens the player&#039;s list of unlocked and obtainable achievements. All three aliases work identically.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!check&amp;lt;/code&amp;gt; || Curator only. Checks the status of pending word suggestions and removals.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!status&amp;lt;/code&amp;gt; || Displays the current game&#039;s status, including words played, average word length, and the next required letter.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!longest&amp;lt;/code&amp;gt; || Displays the top five longest words played in the current game.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!rng &amp;lt;word&amp;gt;&amp;lt;/code&amp;gt; || Checks a word&#039;s rarity and global ownership.&lt;br /&gt;
|}&lt;br /&gt;
A small number of additional text-trigger commands exist as hidden puzzle easter eggs. Their exact triggers are not documented publicly here. Separately, a set of documented explainer commands — &amp;lt;code&amp;gt;!hyphens&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;!neoses&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;!aisource&amp;lt;/code&amp;gt;, and their aliases — answer common questions about dictionary rules; see [[Dictionary Information]].&lt;br /&gt;
&lt;br /&gt;
== AI Opponents ==&lt;br /&gt;
Multiplayer games may include an AI opponent, added either randomly through &amp;lt;code&amp;gt;/invite_ai&amp;lt;/code&amp;gt; or by summoning a specific personality with a text command. Each of the 19 personalities follows its own word-selection logic — NOOB favors short, simple words, PRO requires words of at least twelve letters, MIMIC attempts to answer with an anagram of the player&#039;s own last word, and so on. Two further AI types, Sniper and Assassin, layer additional mechanics — one-shot dramatic word plays and a hijack-and-silence risk/reward exchange, respectively — on top of the base system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[AI Bots]]&lt;br /&gt;
&lt;br /&gt;
== Game Modes ==&lt;br /&gt;
&lt;br /&gt;
=== Multiplayer Shiritori ===&lt;br /&gt;
The core game mode. Players take turns submitting words in a shared channel, each beginning with the final letter of the previous word. Repeated words, invalid characters, and words that do not follow the required letter all end a player&#039;s turn or the game, depending on server configuration.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Multiplayer Shiritori]]&lt;br /&gt;
&lt;br /&gt;
=== Protori ===&lt;br /&gt;
A scoring-based variant of multiplayer Shiritori. Rather than simply continuing the chain, every accepted word earns points from a flat per-letter point table, weighted by how rare each letter is in the dictionary rather than a standard Scrabble-style tile distribution; a word&#039;s base score is just the sum of its letters&#039; values. Continuing more deeply into the previous word than just its final letter — matching several trailing characters in a row — earns a chain bonus of roughly 1% of the word&#039;s base score per matched character, up to about +79% for a very deep match. Playing a word that has already been used ends the game immediately and costs the player a 250-point penalty.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Protori]]&lt;br /&gt;
&lt;br /&gt;
=== Solo Shiritori ===&lt;br /&gt;
A private word-chain match played against an adaptive AI opponent in a dedicated thread. The AI begins as ROOKIE and its behavior shifts over time based on the player&#039;s performance and random chance.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Solo Shiritori]]&lt;br /&gt;
&lt;br /&gt;
=== Word Bomb ===&lt;br /&gt;
An elimination game for up to 16 players, each starting with three lives. On each turn, a player must submit a valid dictionary word containing an assigned prompt string before a timer runs out; failing to do so costs a life. Games started through &amp;lt;code&amp;gt;/wordbomb&amp;lt;/code&amp;gt; are configurable across several options, including bomb speed, starting difficulty (one of sixteen named buckets, from Tranquil down to the single-word Singularity tier), prompt length, allowed special characters, and an optional themed category filter.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Wordbomb]]&lt;br /&gt;
&lt;br /&gt;
=== Wordle ===&lt;br /&gt;
A private word-guessing game with two modes: Standardized, which applies stricter word validity rules, and Full Dictionary, which allows any word in the bot&#039;s full dictionary. Players choose a target word length and may optionally allow hyphenated words as valid answers. Win streaks are tracked separately for each word length and mode.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Wordle]]&lt;br /&gt;
&lt;br /&gt;
=== Anagram ===&lt;br /&gt;
A private single-player game in which the bot selects a base word and the player attempts to find as many valid words as possible using only the letters available in it.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Anagram]]&lt;br /&gt;
&lt;br /&gt;
=== Dictionary Tools ===&lt;br /&gt;
Two related but separate features track a player&#039;s progress through the dictionary. &amp;lt;code&amp;gt;/dictionaries&amp;lt;/code&amp;gt; reports progress against specific themed word lists. &amp;lt;code&amp;gt;/wordhunt&amp;lt;/code&amp;gt; is a recurring personal challenge, refreshing every 12 hours, that surfaces dictionary words the player has not yet used.&lt;br /&gt;
&lt;br /&gt;
== Fool&#039;s Mode ==&lt;br /&gt;
A special, occasional state, traditionally run around April Fools&#039; Day, in which the bot&#039;s word validation is deliberately loosened for comedic effect — words with no spaces are accepted as playable regardless of dictionary membership, and several commands (&amp;lt;code&amp;gt;!i&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;!info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/check&amp;lt;/code&amp;gt;, the end-of-game summary) start returning deliberately unreliable or nonsensical output. It is toggled on and off manually by the bot&#039;s operator rather than being scheduled automatically by the code itself.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Fool&#039;s Mode]]&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&#039;&#039;Super-Shiritori&#039;&#039; has been developed and maintained by Ghost (no_where.ghost_002) since November 22, 2024, with administrative and moderation support from Kos (kos256) and GreenyMage (greenymage).&lt;br /&gt;
&lt;br /&gt;
The bot&#039;s dictionary began as a small curated word list originally compiled by OMG, creator of the Roblox game &#039;&#039;Word Bomb&#039;&#039;. It later expanded through a bulk import of 320,000 words, followed by ongoing contributions from users, dictionary scraping from sources such as Merriam-Webster and Oxford, and the inclusion of acronyms, constructed languages, and foreign-language borrowings. The dictionary now exceeds 1.6 million entries. There is no anti-cheat system in place; players are free to consult external dictionaries or search engines, though playing without assistance is encouraged.&lt;br /&gt;
&lt;br /&gt;
The bot runs on hardware maintained directly by its developer, [[Ghost (Owner)|Ghost]], rather than on any cloud hosting service. It went offline on April 27, 2026, at the start of a military [https://en.wikipedia.org/wiki/Permanent_change_of_station Permanent Change of Station] ({{wc|PCS}}) relocation that took Ghost from South Korea through Japan, Alaska, and Los Angeles, California, before he finally settled in Hawaii on June 8, 2026. A subsequent housing shortage there delayed the bot&#039;s return well past initial estimates; it came back online on August 10, 2026, after roughly three and a half months offline — the longest outage in the bot&#039;s history. Household expenses connected to the move, including hosting costs, were covered as part of U.S. government {{wc|PCS}} support.&lt;br /&gt;
&lt;br /&gt;
Since coming back online, an automatic restart-on-crash mechanism has been added, intended to make genuine 24/7 uptime realistic going forward; as of this writing, expected downtime is limited to maintenance, a crash severe enough to take the host machine itself down, or a power outage.&lt;br /&gt;
&lt;br /&gt;
Two further features followed directly from that same reality. A planned restart or shutdown can now carry a custom message to every active game instead of one of two generic canned notices, so players get an accurate heads-up — an estimated outage length, for example — rather than a vague &amp;quot;update&amp;quot; notice. For the opposite case, a total, zero-warning loss of power gives the bot no chance to warn anyone before going offline at all; there&#039;s no way around that physically. What it can do instead is explain itself retroactively: reconnecting after any outage it wasn&#039;t able to shut down cleanly for now posts a message acknowledging the unplanned downtime, noting that unannounced power loss is a real and recurring possibility given the host machine&#039;s location, and confirming that any interrupted games have already been restored.&lt;br /&gt;
&lt;br /&gt;
== Official Design ==&lt;br /&gt;
* The name is always spelled &amp;quot;Super-Shiritori&amp;quot;.&lt;br /&gt;
* The official color is hex #F91000, informally named &amp;quot;Shiritorier&#039;s-Orange&amp;quot; as of December 1st.&lt;br /&gt;
* The logo is a mahjong-style tile featuring the Japanese characters ボ (&amp;quot;bo&amp;quot;) and ツ (&amp;quot;tsu&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
* [https://discord.com/oauth2/authorize?client_id=1309504109308674089 Invite the bot to a server]&lt;br /&gt;
* [https://discord.gg/WahVXSkA7H Support server]&lt;br /&gt;
* [https://forms.gle/kUGHkSsxMH43iugb8 Word Curator Assessment Form]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Discord Bots]]&lt;br /&gt;
* [[AI Bots]]&lt;br /&gt;
* [[Multiplayer Shiritori]]&lt;br /&gt;
* [[Solo Shiritori]]&lt;br /&gt;
* [[Protori]]&lt;br /&gt;
* [[Anagram]]&lt;br /&gt;
* [[Wordbomb]]&lt;br /&gt;
* [[Wordle]]&lt;br /&gt;
* [[Achievements]]&lt;br /&gt;
* [[Fool&#039;s Mode]]&lt;br /&gt;
* [[Manual-Tori]]&lt;br /&gt;
* [[Dictionary Information]]&lt;br /&gt;
* [[Word-Curatori]]&lt;br /&gt;
* [[Vexitori]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Information]]&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=Vexitori&amp;diff=6255</id>
		<title>Vexitori</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=Vexitori&amp;diff=6255"/>
		<updated>2026-09-05T05:05:58Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: Switch to the new Infobox application template (old Character infobox was broken Fandom Portable-Infobox markup)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox application&lt;br /&gt;
| name = Vexitori&lt;br /&gt;
| image = [[File:Vexitori.png|250px]]&lt;br /&gt;
| caption = Profile picture&lt;br /&gt;
| type = Discord Bot&lt;br /&gt;
| function = Vexillopedia flag-guessing game&lt;br /&gt;
| platform = Discord&lt;br /&gt;
| status = Active&lt;br /&gt;
| launched = August 12, 2026&lt;br /&gt;
| hosted = Hawaii, USA (via Discord)&lt;br /&gt;
| counterparts = [[Super-Shiritori]]&amp;lt;br&amp;gt;[[Word-Curatori]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vexitori&#039;&#039;&#039; is a Discord bot dedicated to running [[Vexillopedia]], a continuous, automatic flag-guessing game (vexillology, the study of flags). It runs as a fully independent bot process, one of [[Discord Bots|three separate bots]] alongside [[Super-Shiritori]] and [[Word-Curatori]] — all three operate in the same Discord server, but Vexitori&#039;s flag game has no dependency on Shiritori, Anagram, Word Bomb, or any other game&#039;s state.&lt;br /&gt;
&lt;br /&gt;
== Gameplay ==&lt;br /&gt;
Vexitori runs a continuous loop in a dedicated game channel: as soon as one round ends, a short pause is followed by the next flag spawning automatically, with no player action required to start a round.&lt;br /&gt;
&lt;br /&gt;
Each round posts an embed showing the flag&#039;s &#039;&#039;&#039;Location&#039;&#039;&#039;, &#039;&#039;&#039;Type&#039;&#039;&#039;, and &#039;&#039;&#039;Time Era&#039;&#039;&#039; alongside the flag image itself — but not its name. Players guess by clicking a &amp;quot;Click here to Guess?&amp;quot; button, which opens a text-entry popup; a submitted guess is checked against the flag&#039;s full list of accepted names (a flag can have more than one correct answer — alternate names, spellings, or former names all count).&lt;br /&gt;
&lt;br /&gt;
The first correct guess starts a &#039;&#039;&#039;15-second&#039;&#039;&#039; countdown before the round locks; anyone who guesses correctly before it ends is recorded as a winner, so a round is rarely a race to be first so much as a race to answer before the window closes. If nobody interacts with a round at all for &#039;&#039;&#039;5 minutes&#039;&#039;&#039;, it ends early on its own rather than waiting indefinitely.&lt;br /&gt;
&lt;br /&gt;
When a round ends, results are posted showing every winner, the exact name they typed, whether it was their first time correctly answering that flag with that specific name (marked 🆕) or a repeat, and their current win streak. Every &#039;&#039;&#039;50th consecutive round won&#039;&#039;&#039; by the same player triggers a bonus: a &amp;quot;Special Flag&amp;quot; spawns exclusively for that player for 20 seconds, drawn from a separate pool of flags reserved only for this purpose.&lt;br /&gt;
&lt;br /&gt;
A separate channel supports free-form regex search: typing a pattern directly into it (no command prefix) searches every flag&#039;s accepted names for a match and returns a paginated result list.&lt;br /&gt;
&lt;br /&gt;
== Commands ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/vexillum_information&amp;lt;/code&amp;gt; || Looks up a specific flag by name or ID, or shows overall database totals if no flag is given.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/vexillolist&amp;lt;/code&amp;gt; || A paginated, filterable list of every flag in the database, showing personal completion progress.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/vex_add&amp;lt;/code&amp;gt; || Curator-only. Adds a new flag (image, location, type, time era, and one or more accepted names) to the database.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/vex_edit&amp;lt;/code&amp;gt; || Curator-only. Edits an existing flag&#039;s image, names, location, type, time era, or displayed (&amp;quot;dominant&amp;quot;) name.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/vex_delete&amp;lt;/code&amp;gt; || Curator-only. Removes a flag from the database. Deletion is logged with an undo control.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!vexrgb&amp;lt;/code&amp;gt; || Curator-only. Randomizes the embed accent color of every flag in the database.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!id&amp;lt;/code&amp;gt; || Restricted to specific individuals. Lists all flag IDs currently in use, or renumbers a flag&#039;s ID.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Flag Pools ==&lt;br /&gt;
Flags are identified by a numeric ID. Ordinary rounds are drawn only from flags with a &#039;&#039;&#039;positive&#039;&#039;&#039; ID, and the game avoids repeating any flag that appeared in roughly the last 25 rounds. Flags with a &#039;&#039;&#039;negative&#039;&#039;&#039; ID are held back from normal rotation entirely and only ever appear as the 50-win-streak Special Flag reward.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
Vexitori runs as its own separate Discord bot process — a distinct login token and OS process from both [[Super-Shiritori]] and [[Word-Curatori]] — rather than as a module inside the main game bot. This was possible because the flag game touches none of Super-Shiritori&#039;s shared game state; its only real dependency, the flag database itself, is self-contained within Vexitori.&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
Vexillopedia (the flag database Vexitori runs) is still an actively developed, in-testing project, maintained separately from Super-Shiritori itself. As of a public announcement on August 8, 2026, its maintainer stated he is currently hospitalized, for reasons he has chosen not to disclose publicly, and that new flag submissions are paused with no set timeline until he returns.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Discord Bots]]&lt;br /&gt;
* [[Super-Shiritori]]&lt;br /&gt;
* [[Word-Curatori]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Information]]&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=Word-Curatori&amp;diff=6254</id>
		<title>Word-Curatori</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=Word-Curatori&amp;diff=6254"/>
		<updated>2026-09-05T05:05:53Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: Switch to the new Infobox application template (old Character infobox was broken Fandom Portable-Infobox markup)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox application&lt;br /&gt;
| name = Word-Curatori&lt;br /&gt;
| image = [[File:Word-Curatori.png|250px]]&lt;br /&gt;
| caption = Profile picture&lt;br /&gt;
| type = Discord Bot&lt;br /&gt;
| function = Word curation &amp;amp; dictionary management&lt;br /&gt;
| platform = Discord&lt;br /&gt;
| status = Active&lt;br /&gt;
| launched = August 28, 2023&lt;br /&gt;
| hosted = Washington State, USA (via Discord)&lt;br /&gt;
| access = Dictionary write access (sole writer)&lt;br /&gt;
| counterparts = [[Super-Shiritori]]&amp;lt;br&amp;gt;[[Vexitori]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Word-Curatori&#039;&#039;&#039; is the Discord bot responsible for word curation: it is the only one of [[Discord Bots|three separate bots]] — alongside [[Super-Shiritori]] and [[Vexitori]] — that is allowed to write to the dictionary files. Curators use it directly to add or remove words, and it runs the review workflow behind [[Super-Shiritori]]&#039;s &amp;lt;code&amp;gt;/suggest&amp;lt;/code&amp;gt; command. For the standards curators actually apply when deciding whether a word belongs, see [[Dictionary Information]]; this page covers the bot itself.&lt;br /&gt;
&lt;br /&gt;
== Commands ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!add&amp;lt;/code&amp;gt; (alias &amp;lt;code&amp;gt;!a&amp;lt;/code&amp;gt;) || Curator only. Adds one word to a dictionary. Accepts a single typed word, an attached text file (one word per line), or a path to a text file on the bot&#039;s own machine. With no dictionary named, the word goes to a staging area and merges into the main dictionary shortly after.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!remove&amp;lt;/code&amp;gt; (alias &amp;lt;code&amp;gt;!r&amp;lt;/code&amp;gt;) || Curator only. Removes one word, the same three ways &amp;lt;code&amp;gt;!add&amp;lt;/code&amp;gt; accepts input. With no dictionary named, it&#039;s removed from the main dictionary and every themed category file it appears in.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!check&amp;lt;/code&amp;gt; || Curator only. Lists suggestions and removal requests (submitted elsewhere via &amp;lt;code&amp;gt;/suggest&amp;lt;/code&amp;gt;) still waiting for a curator to Accept or Reject.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!help&amp;lt;/code&amp;gt; || Shows the bot&#039;s own command list.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/suggest_ban&amp;lt;/code&amp;gt; || Bans a user from using &amp;lt;code&amp;gt;/suggest&amp;lt;/code&amp;gt;. Restricted to server mods, admins, and the bot owner — deliberately &#039;&#039;&#039;not&#039;&#039;&#039; gated on the word curator role, since who gets to submit suggestions is treated as a moderation decision rather than a curation one.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/suggest_unban&amp;lt;/code&amp;gt; || Reverses a &amp;lt;code&amp;gt;/suggest_ban&amp;lt;/code&amp;gt;. Same restriction as above.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/suggest&amp;lt;/code&amp;gt; itself is registered on [[Super-Shiritori]] (so it&#039;s discoverable from anywhere alongside every other player command), but everything that happens after it&#039;s invoked — validating the words, checking them against the live dictionary, posting the review embed, and handling the Accept/Review Manually/Reject/Cancel buttons — actually runs on Word-Curatori. The two bots talk over a small local-only connection for this purpose.&lt;br /&gt;
&lt;br /&gt;
== Background Tasks ==&lt;br /&gt;
Word-Curatori runs several tasks on its own schedule, independent of any command:&lt;br /&gt;
* &#039;&#039;&#039;Limbo merge&#039;&#039;&#039; — every 2 minutes, words accepted via &amp;lt;code&amp;gt;/suggest&amp;lt;/code&amp;gt; or added without a specific dictionary named are merged from a staging area into the live main dictionary.&lt;br /&gt;
* &#039;&#039;&#039;Dictionary backup&#039;&#039;&#039; — an hourly snapshot of the dictionary files.&lt;br /&gt;
* &#039;&#039;&#039;Auto-category backfill&#039;&#039;&#039; — runs once at startup, sorting words into a few automatically-derived categories (such as by length or palindrome status) rather than requiring a curator to do it by hand.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
Word-Curatori runs as a completely separate Discord bot process from [[Super-Shiritori]] and [[Vexitori]] — its own login token, its own OS process — specifically so that heavy curation work (bulk word additions, full dictionary rewrites) can never stall the game bot&#039;s responsiveness. Running two bots as threads or async tasks inside one process would still contend for the same CPU time under Python&#039;s GIL; a genuinely separate process gives real operating-system-level isolation instead.&lt;br /&gt;
&lt;br /&gt;
Word-Curatori is the &#039;&#039;&#039;sole writer&#039;&#039;&#039; of the dictionary files. [[Super-Shiritori]] only ever reads them, picking up whatever changes Word-Curatori has made within about 30 seconds.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Dictionary Information]]&lt;br /&gt;
* [[Super-Shiritori]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Information]]&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=Template:Infobox_application&amp;diff=6253</id>
		<title>Template:Infobox application</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=Template:Infobox_application&amp;diff=6253"/>
		<updated>2026-09-05T05:04:31Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: Replace broken Fandom Portable-Infobox character template with a working, bot-focused infobox&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;templatestyles src=&amp;quot;Infobox application/styles.css&amp;quot;/&amp;gt;&amp;lt;div class=&amp;quot;infobox-application&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__title&amp;quot;&amp;gt;{{{name|{{PAGENAME}}}}}&amp;lt;/div&amp;gt;{{#if:{{{image|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__image&amp;quot;&amp;gt;{{{image}}}&amp;lt;/div&amp;gt;}}{{#if:{{{caption|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__caption&amp;quot;&amp;gt;{{{caption}}}&amp;lt;/div&amp;gt;}}{{#if:{{{type|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Type&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{type}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}{{#if:{{{function|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Function&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{function}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}{{#if:{{{aliases|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Aliases&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{aliases}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}{{#if:{{{platform|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Platform&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{platform}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}{{#if:{{{developer|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Developer&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{developer}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}{{#if:{{{language|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Language&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{language}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}{{#if:{{{status|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Status&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{status}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}{{#if:{{{launched|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Launched&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{launched}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}{{#if:{{{hosted|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Hosted in&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{hosted}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}{{#if:{{{access|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Access&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{access}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}{{#if:{{{counterparts|}}}|&lt;br /&gt;
&amp;lt;div class=&amp;quot;infobox-application__row&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__label&amp;quot;&amp;gt;Related bots&amp;lt;/div&amp;gt;&amp;lt;div class=&amp;quot;infobox-application__value&amp;quot;&amp;gt;{{{counterparts}}}&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;}}&lt;br /&gt;
&amp;lt;/div&amp;gt;{{#ifeq: {{NAMESPACENUMBER}} | 0 | [[Category:Applications]]}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
== Description ==&lt;br /&gt;
A dark-themed infobox for the wiki&#039;s Discord bots/applications (Super-Shiritori, Word-Curatori, Vexitori). Replaces the old &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{Character}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; template, which was raw Fandom &amp;quot;Portable Infobox&amp;quot; markup (&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;infobox type=&amp;quot;Character&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;) left over from the Fandom migration -- that extension was never self-hostable, so it rendered as literal unparsed tags rather than an actual infobox, and its fields (Species, Gender, Portrayed by, Marital status...) were built for fictional characters, not bots.&lt;br /&gt;
&lt;br /&gt;
== Syntax ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{{Infobox application&lt;br /&gt;
| name        =&lt;br /&gt;
| image       = [[File:Example.png|250px]]&lt;br /&gt;
| caption     =&lt;br /&gt;
| type        = Discord Bot&lt;br /&gt;
| function    =&lt;br /&gt;
| aliases     =&lt;br /&gt;
| platform    = Discord&lt;br /&gt;
| developer   =&lt;br /&gt;
| language    =&lt;br /&gt;
| status      = Active&lt;br /&gt;
| launched    =&lt;br /&gt;
| hosted      =&lt;br /&gt;
| access      =&lt;br /&gt;
| counterparts =&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All fields are optional except &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; (which defaults to the page title). A blank/omitted field just doesn&#039;t render that row. &amp;lt;code&amp;gt;image&amp;lt;/code&amp;gt; takes full wikitext, so a &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;gallery&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; block works too (see [[Super-Shiritori]] for an example with multiple profile pictures).&lt;br /&gt;
&lt;br /&gt;
[[Category:Infobox templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=Template:Infobox_application/styles.css&amp;diff=6252</id>
		<title>Template:Infobox application/styles.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=Template:Infobox_application/styles.css&amp;diff=6252"/>
		<updated>2026-09-05T05:04:29Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: Create TemplateStyles for the new Infobox application template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.infobox-application {&lt;br /&gt;
	float: right;&lt;br /&gt;
	clear: right;&lt;br /&gt;
	width: 300px;&lt;br /&gt;
	margin: 0 0 1em 1em;&lt;br /&gt;
	background-color: #2a0f00;&lt;br /&gt;
	border: 1px solid rgba(255, 255, 255, 0.15);&lt;br /&gt;
	border-radius: 4px;&lt;br /&gt;
	box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);&lt;br /&gt;
	font-size: 88%;&lt;br /&gt;
	line-height: 1.4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__title {&lt;br /&gt;
	background-color: #1a0a00;&lt;br /&gt;
	color: #F19000;&lt;br /&gt;
	font-size: 120%;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 8px;&lt;br /&gt;
	border-bottom: 1px solid rgba(255, 255, 255, 0.15);&lt;br /&gt;
	border-radius: 4px 4px 0 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__image {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 8px;&lt;br /&gt;
	border-bottom: 1px solid rgba(255, 255, 255, 0.1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__image img {&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__caption {&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
	font-size: 90%;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 4px 8px;&lt;br /&gt;
	border-bottom: 1px solid rgba(255, 255, 255, 0.1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__row {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	padding: 4px 8px;&lt;br /&gt;
	border-bottom: 1px solid rgba(255, 255, 255, 0.08);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__row:last-child {&lt;br /&gt;
	border-bottom: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__label {&lt;br /&gt;
	color: #F19000;&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	width: 40%;&lt;br /&gt;
	flex-shrink: 0;&lt;br /&gt;
	padding-right: 6px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.infobox-application__value {&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
	width: 60%;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=MediaWiki:Cosmos.css&amp;diff=6251</id>
		<title>MediaWiki:Cosmos.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=MediaWiki:Cosmos.css&amp;diff=6251"/>
		<updated>2026-09-05T04:20:32Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: Raise selector specificity on the nav dropdown fix -- Cosmos own CSS was winning the cascade with a more specific rule (and !important on mobile)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ==========================================================================&lt;br /&gt;
   SocialProfile dark-theme fixes&lt;br /&gt;
   --------------------------------------------------------------------------&lt;br /&gt;
   SocialProfile&#039;s bundled CSS (UserProfile.css, ProfileTabs.css,&lt;br /&gt;
   SpecialUpdateProfile.css) was written for a white-background wiki: it sets&lt;br /&gt;
   dark-gray text with NO background of its own (relying on the page being&lt;br /&gt;
   white) and hardcodes a green/orange brand palette from Wikia&#039;s old look.&lt;br /&gt;
   On this wiki&#039;s dark #401901 page background that produces near-invisible&lt;br /&gt;
   text and off-brand green tabs/buttons. This overrides just those rules --&lt;br /&gt;
   layout/spacing from the original files is untouched.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
&lt;br /&gt;
/* --- Profile tabs (View profile / Edit profile bar) --- */&lt;br /&gt;
.profile-tab {&lt;br /&gt;
	background-color: rgba(241, 144, 0, 0.12);&lt;br /&gt;
	border: 1px solid #F19000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.profile-tab-on {&lt;br /&gt;
	background-color: #F19000;&lt;br /&gt;
	border: 1px solid #F19000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.profile-tab a {&lt;br /&gt;
	color: #F19000 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.profile-tab a:hover {&lt;br /&gt;
	color: #ffffff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.profile-tab-on a,&lt;br /&gt;
.profile-tab-on a:visited {&lt;br /&gt;
	color: #2a0f00 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Save/update button on Special:UpdateProfile --- */&lt;br /&gt;
.profile-update-button {&lt;br /&gt;
	background-color: #F19000;&lt;br /&gt;
	border: 1px solid #F19000;&lt;br /&gt;
	color: #2a0f00;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Section headings that relied on a white page background --- */&lt;br /&gt;
#user-page-left h2,&lt;br /&gt;
#user-page-right h2,&lt;br /&gt;
.profile-update-title {&lt;br /&gt;
	color: #F19000;&lt;br /&gt;
	border-bottom-color: rgba(255, 255, 255, 0.2);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Body text that relied on a white page background --- */&lt;br /&gt;
.item-small,&lt;br /&gt;
.item,&lt;br /&gt;
.vote-text,&lt;br /&gt;
.profile-update-unit-left,&lt;br /&gt;
.profile-update-unit-small,&lt;br /&gt;
.profile-update-row,&lt;br /&gt;
.profile-board-message-type,&lt;br /&gt;
table.avatar-success-page td.title-cell,&lt;br /&gt;
.user-board-message-time,&lt;br /&gt;
.profile-info-container b,&lt;br /&gt;
.profile-info-container div {&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Cards that set their own pale/white background (looked like leftover&lt;br /&gt;
   white boxes on the dark page) -- keep them as cards, just re-themed --- */&lt;br /&gt;
.no-info-container,&lt;br /&gt;
.no-pictures-container,&lt;br /&gt;
.user-board-message-from {&lt;br /&gt;
	background-color: rgba(255, 255, 255, 0.06);&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Dividers that were near-invisible pale-gray-on-dark-brown --- */&lt;br /&gt;
#user-page-left h2,&lt;br /&gt;
#user-page-right h2,&lt;br /&gt;
.user-section-heading,&lt;br /&gt;
#profile-top,&lt;br /&gt;
.user-board-message,&lt;br /&gt;
.activity-item,&lt;br /&gt;
.casual-game-container p,&lt;br /&gt;
.article-item {&lt;br /&gt;
	border-color: rgba(255, 255, 255, 0.15);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- &amp;quot;Add points&amp;quot;-style badge on the toggle button: brand orange stays,&lt;br /&gt;
   just make sure the text stays legible --- */&lt;br /&gt;
#profile-toggle-button {&lt;br /&gt;
	background-color: #F19000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#profile-toggle-button a {&lt;br /&gt;
	color: #2a0f00 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   Mobile / tablet fixes&lt;br /&gt;
   --------------------------------------------------------------------------&lt;br /&gt;
   Reported by a wiki editor via Discord: on a tablet, the notifications&lt;br /&gt;
   (bell/envelope) flyout &amp;quot;takes up nearly half my screen&amp;quot;. Root cause: Echo&#039;s&lt;br /&gt;
   popup has no max-height or scroll of its own -- it just grows one row per&lt;br /&gt;
   notification forever. Capping it and giving the list its own scrollbar&lt;br /&gt;
   fixes that regardless of how many notifications pile up.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* !important is required here: OOUI&#039;s JS computes its own clipping and sets&lt;br /&gt;
   max-height as an INLINE style on this element, which otherwise beats any&lt;br /&gt;
   plain rule in an external stylesheet regardless of selector specificity. */&lt;br /&gt;
.mw-echo-ui-notificationBadgeButtonPopupWidget-popup .oo-ui-popupWidget-body {&lt;br /&gt;
	max-height: 60vh !important;&lt;br /&gt;
	overflow-y: auto !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 900px) {&lt;br /&gt;
	.mw-echo-ui-notificationBadgeButtonPopupWidget-popup .oo-ui-popupWidget-body {&lt;br /&gt;
		max-height: 45vh !important;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.mw-echo-ui-notificationBadgeButtonPopupWidget-popup .oo-ui-popupWidget-popup {&lt;br /&gt;
		max-width: 92vw;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   Top-nav mega-menu + page-actions &amp;quot;...&amp;quot; menu (legacy Wikia &amp;quot;WDS&amp;quot; markup)&lt;br /&gt;
   --------------------------------------------------------------------------&lt;br /&gt;
   Cosmos ports this component straight from old Wikia CSS with its own&lt;br /&gt;
   light-theme colors baked in -- it was never re-themed, so every dropdown&lt;br /&gt;
   off the top nav renders as a plain white box with black text. This is most&lt;br /&gt;
   visible on mobile, where the hamburger button just toggles this same&lt;br /&gt;
   element to display:block (reported by a wiki editor: the menu &amp;quot;takes up&lt;br /&gt;
   nearly half my screen&amp;quot; and looks broken), but it&#039;s equally wrong on&lt;br /&gt;
   desktop. Colors match what the rest of the site already uses.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Selectors are doubled-up (.foo.foo) purely to raise specificity -- Cosmos&#039;s&lt;br /&gt;
   own CSS fights back here with both a 2-class selector (.cosmos-header&lt;br /&gt;
   .wds-dropdown__content) on desktop AND a 2-class !important rule forcing&lt;br /&gt;
   background-color: transparent on mobile, so a plain single-class rule&lt;br /&gt;
   (even with !important) loses to both. */&lt;br /&gt;
.wds-dropdown__content.wds-dropdown__content,&lt;br /&gt;
.wds-dropdown-level-2__content.wds-dropdown-level-2__content {&lt;br /&gt;
	background-color: #2a0f00 !important;&lt;br /&gt;
	border: 1px solid rgba(255, 255, 255, 0.15) !important;&lt;br /&gt;
	box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.wds-dropdown__content li,&lt;br /&gt;
.wds-dropdown-level-2__content li {&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
	border-color: rgba(255, 255, 255, 0.1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.wds-dropdown__content a,&lt;br /&gt;
.wds-dropdown-level-2__content a,&lt;br /&gt;
.wds-dropdown-level-2__toggle {&lt;br /&gt;
	color: #F27AEE !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.wds-dropdown__content a:hover,&lt;br /&gt;
.wds-dropdown-level-2__content a:hover,&lt;br /&gt;
.wds-dropdown-level-2__toggle:hover {&lt;br /&gt;
	color: #F19000 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.wds-dropdown-level-2__toggle .wds-dropdown-chevron {&lt;br /&gt;
	fill: #F27AEE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.wds-dropdown-level-2__toggle:hover .wds-dropdown-chevron {&lt;br /&gt;
	fill: #F19000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* On mobile the hamburger button toggles the whole .wds-tabs bar to&lt;br /&gt;
   display:block; without an explicit background it would otherwise rely on&lt;br /&gt;
   .wds-dropdown__content alone for color, so give the outer bar a matching&lt;br /&gt;
   dark backing and keep it from ever exceeding the viewport height. */&lt;br /&gt;
@media screen and (max-width: 1023px) {&lt;br /&gt;
	.wds-tabs {&lt;br /&gt;
		background-color: #1a0a00;&lt;br /&gt;
		max-height: 80vh;&lt;br /&gt;
		overflow-y: auto;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=MediaWiki:Cosmos.css&amp;diff=6250</id>
		<title>MediaWiki:Cosmos.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=MediaWiki:Cosmos.css&amp;diff=6250"/>
		<updated>2026-09-05T04:18:58Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: Retheme the WDS nav mega-menu dropdown (was an unstyled white box, worst on mobile where it covers most of the screen) and cap its height&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ==========================================================================&lt;br /&gt;
   SocialProfile dark-theme fixes&lt;br /&gt;
   --------------------------------------------------------------------------&lt;br /&gt;
   SocialProfile&#039;s bundled CSS (UserProfile.css, ProfileTabs.css,&lt;br /&gt;
   SpecialUpdateProfile.css) was written for a white-background wiki: it sets&lt;br /&gt;
   dark-gray text with NO background of its own (relying on the page being&lt;br /&gt;
   white) and hardcodes a green/orange brand palette from Wikia&#039;s old look.&lt;br /&gt;
   On this wiki&#039;s dark #401901 page background that produces near-invisible&lt;br /&gt;
   text and off-brand green tabs/buttons. This overrides just those rules --&lt;br /&gt;
   layout/spacing from the original files is untouched.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
&lt;br /&gt;
/* --- Profile tabs (View profile / Edit profile bar) --- */&lt;br /&gt;
.profile-tab {&lt;br /&gt;
	background-color: rgba(241, 144, 0, 0.12);&lt;br /&gt;
	border: 1px solid #F19000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.profile-tab-on {&lt;br /&gt;
	background-color: #F19000;&lt;br /&gt;
	border: 1px solid #F19000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.profile-tab a {&lt;br /&gt;
	color: #F19000 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.profile-tab a:hover {&lt;br /&gt;
	color: #ffffff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.profile-tab-on a,&lt;br /&gt;
.profile-tab-on a:visited {&lt;br /&gt;
	color: #2a0f00 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Save/update button on Special:UpdateProfile --- */&lt;br /&gt;
.profile-update-button {&lt;br /&gt;
	background-color: #F19000;&lt;br /&gt;
	border: 1px solid #F19000;&lt;br /&gt;
	color: #2a0f00;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Section headings that relied on a white page background --- */&lt;br /&gt;
#user-page-left h2,&lt;br /&gt;
#user-page-right h2,&lt;br /&gt;
.profile-update-title {&lt;br /&gt;
	color: #F19000;&lt;br /&gt;
	border-bottom-color: rgba(255, 255, 255, 0.2);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Body text that relied on a white page background --- */&lt;br /&gt;
.item-small,&lt;br /&gt;
.item,&lt;br /&gt;
.vote-text,&lt;br /&gt;
.profile-update-unit-left,&lt;br /&gt;
.profile-update-unit-small,&lt;br /&gt;
.profile-update-row,&lt;br /&gt;
.profile-board-message-type,&lt;br /&gt;
table.avatar-success-page td.title-cell,&lt;br /&gt;
.user-board-message-time,&lt;br /&gt;
.profile-info-container b,&lt;br /&gt;
.profile-info-container div {&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Cards that set their own pale/white background (looked like leftover&lt;br /&gt;
   white boxes on the dark page) -- keep them as cards, just re-themed --- */&lt;br /&gt;
.no-info-container,&lt;br /&gt;
.no-pictures-container,&lt;br /&gt;
.user-board-message-from {&lt;br /&gt;
	background-color: rgba(255, 255, 255, 0.06);&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Dividers that were near-invisible pale-gray-on-dark-brown --- */&lt;br /&gt;
#user-page-left h2,&lt;br /&gt;
#user-page-right h2,&lt;br /&gt;
.user-section-heading,&lt;br /&gt;
#profile-top,&lt;br /&gt;
.user-board-message,&lt;br /&gt;
.activity-item,&lt;br /&gt;
.casual-game-container p,&lt;br /&gt;
.article-item {&lt;br /&gt;
	border-color: rgba(255, 255, 255, 0.15);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- &amp;quot;Add points&amp;quot;-style badge on the toggle button: brand orange stays,&lt;br /&gt;
   just make sure the text stays legible --- */&lt;br /&gt;
#profile-toggle-button {&lt;br /&gt;
	background-color: #F19000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#profile-toggle-button a {&lt;br /&gt;
	color: #2a0f00 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   Mobile / tablet fixes&lt;br /&gt;
   --------------------------------------------------------------------------&lt;br /&gt;
   Reported by a wiki editor via Discord: on a tablet, the notifications&lt;br /&gt;
   (bell/envelope) flyout &amp;quot;takes up nearly half my screen&amp;quot;. Root cause: Echo&#039;s&lt;br /&gt;
   popup has no max-height or scroll of its own -- it just grows one row per&lt;br /&gt;
   notification forever. Capping it and giving the list its own scrollbar&lt;br /&gt;
   fixes that regardless of how many notifications pile up.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* !important is required here: OOUI&#039;s JS computes its own clipping and sets&lt;br /&gt;
   max-height as an INLINE style on this element, which otherwise beats any&lt;br /&gt;
   plain rule in an external stylesheet regardless of selector specificity. */&lt;br /&gt;
.mw-echo-ui-notificationBadgeButtonPopupWidget-popup .oo-ui-popupWidget-body {&lt;br /&gt;
	max-height: 60vh !important;&lt;br /&gt;
	overflow-y: auto !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 900px) {&lt;br /&gt;
	.mw-echo-ui-notificationBadgeButtonPopupWidget-popup .oo-ui-popupWidget-body {&lt;br /&gt;
		max-height: 45vh !important;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.mw-echo-ui-notificationBadgeButtonPopupWidget-popup .oo-ui-popupWidget-popup {&lt;br /&gt;
		max-width: 92vw;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   Top-nav mega-menu + page-actions &amp;quot;...&amp;quot; menu (legacy Wikia &amp;quot;WDS&amp;quot; markup)&lt;br /&gt;
   --------------------------------------------------------------------------&lt;br /&gt;
   Cosmos ports this component straight from old Wikia CSS with its own&lt;br /&gt;
   light-theme colors baked in -- it was never re-themed, so every dropdown&lt;br /&gt;
   off the top nav renders as a plain white box with black text. This is most&lt;br /&gt;
   visible on mobile, where the hamburger button just toggles this same&lt;br /&gt;
   element to display:block (reported by a wiki editor: the menu &amp;quot;takes up&lt;br /&gt;
   nearly half my screen&amp;quot; and looks broken), but it&#039;s equally wrong on&lt;br /&gt;
   desktop. Colors match what the rest of the site already uses.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.wds-dropdown__content,&lt;br /&gt;
.wds-dropdown-level-2__content {&lt;br /&gt;
	background-color: #2a0f00;&lt;br /&gt;
	border: 1px solid rgba(255, 255, 255, 0.15);&lt;br /&gt;
	box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.wds-dropdown__content li,&lt;br /&gt;
.wds-dropdown-level-2__content li {&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
	border-color: rgba(255, 255, 255, 0.1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.wds-dropdown__content a,&lt;br /&gt;
.wds-dropdown-level-2__content a,&lt;br /&gt;
.wds-dropdown-level-2__toggle {&lt;br /&gt;
	color: #F27AEE !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.wds-dropdown__content a:hover,&lt;br /&gt;
.wds-dropdown-level-2__content a:hover,&lt;br /&gt;
.wds-dropdown-level-2__toggle:hover {&lt;br /&gt;
	color: #F19000 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.wds-dropdown-level-2__toggle .wds-dropdown-chevron {&lt;br /&gt;
	fill: #F27AEE;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.wds-dropdown-level-2__toggle:hover .wds-dropdown-chevron {&lt;br /&gt;
	fill: #F19000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* On mobile the hamburger button toggles the whole .wds-tabs bar to&lt;br /&gt;
   display:block; without an explicit background it would otherwise rely on&lt;br /&gt;
   .wds-dropdown__content alone for color, so give the outer bar a matching&lt;br /&gt;
   dark backing and keep it from ever exceeding the viewport height. */&lt;br /&gt;
@media screen and (max-width: 1023px) {&lt;br /&gt;
	.wds-tabs {&lt;br /&gt;
		background-color: #1a0a00;&lt;br /&gt;
		max-height: 80vh;&lt;br /&gt;
		overflow-y: auto;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=MediaWiki:Cosmos.css&amp;diff=6249</id>
		<title>MediaWiki:Cosmos.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=MediaWiki:Cosmos.css&amp;diff=6249"/>
		<updated>2026-09-05T04:11:29Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: Use !important on the notification flyout max-height -- OOUI sets its own inline max-height that otherwise wins&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ==========================================================================&lt;br /&gt;
   SocialProfile dark-theme fixes&lt;br /&gt;
   --------------------------------------------------------------------------&lt;br /&gt;
   SocialProfile&#039;s bundled CSS (UserProfile.css, ProfileTabs.css,&lt;br /&gt;
   SpecialUpdateProfile.css) was written for a white-background wiki: it sets&lt;br /&gt;
   dark-gray text with NO background of its own (relying on the page being&lt;br /&gt;
   white) and hardcodes a green/orange brand palette from Wikia&#039;s old look.&lt;br /&gt;
   On this wiki&#039;s dark #401901 page background that produces near-invisible&lt;br /&gt;
   text and off-brand green tabs/buttons. This overrides just those rules --&lt;br /&gt;
   layout/spacing from the original files is untouched.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
&lt;br /&gt;
/* --- Profile tabs (View profile / Edit profile bar) --- */&lt;br /&gt;
.profile-tab {&lt;br /&gt;
	background-color: rgba(241, 144, 0, 0.12);&lt;br /&gt;
	border: 1px solid #F19000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.profile-tab-on {&lt;br /&gt;
	background-color: #F19000;&lt;br /&gt;
	border: 1px solid #F19000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.profile-tab a {&lt;br /&gt;
	color: #F19000 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.profile-tab a:hover {&lt;br /&gt;
	color: #ffffff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.profile-tab-on a,&lt;br /&gt;
.profile-tab-on a:visited {&lt;br /&gt;
	color: #2a0f00 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Save/update button on Special:UpdateProfile --- */&lt;br /&gt;
.profile-update-button {&lt;br /&gt;
	background-color: #F19000;&lt;br /&gt;
	border: 1px solid #F19000;&lt;br /&gt;
	color: #2a0f00;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Section headings that relied on a white page background --- */&lt;br /&gt;
#user-page-left h2,&lt;br /&gt;
#user-page-right h2,&lt;br /&gt;
.profile-update-title {&lt;br /&gt;
	color: #F19000;&lt;br /&gt;
	border-bottom-color: rgba(255, 255, 255, 0.2);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Body text that relied on a white page background --- */&lt;br /&gt;
.item-small,&lt;br /&gt;
.item,&lt;br /&gt;
.vote-text,&lt;br /&gt;
.profile-update-unit-left,&lt;br /&gt;
.profile-update-unit-small,&lt;br /&gt;
.profile-update-row,&lt;br /&gt;
.profile-board-message-type,&lt;br /&gt;
table.avatar-success-page td.title-cell,&lt;br /&gt;
.user-board-message-time,&lt;br /&gt;
.profile-info-container b,&lt;br /&gt;
.profile-info-container div {&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Cards that set their own pale/white background (looked like leftover&lt;br /&gt;
   white boxes on the dark page) -- keep them as cards, just re-themed --- */&lt;br /&gt;
.no-info-container,&lt;br /&gt;
.no-pictures-container,&lt;br /&gt;
.user-board-message-from {&lt;br /&gt;
	background-color: rgba(255, 255, 255, 0.06);&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Dividers that were near-invisible pale-gray-on-dark-brown --- */&lt;br /&gt;
#user-page-left h2,&lt;br /&gt;
#user-page-right h2,&lt;br /&gt;
.user-section-heading,&lt;br /&gt;
#profile-top,&lt;br /&gt;
.user-board-message,&lt;br /&gt;
.activity-item,&lt;br /&gt;
.casual-game-container p,&lt;br /&gt;
.article-item {&lt;br /&gt;
	border-color: rgba(255, 255, 255, 0.15);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- &amp;quot;Add points&amp;quot;-style badge on the toggle button: brand orange stays,&lt;br /&gt;
   just make sure the text stays legible --- */&lt;br /&gt;
#profile-toggle-button {&lt;br /&gt;
	background-color: #F19000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#profile-toggle-button a {&lt;br /&gt;
	color: #2a0f00 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   Mobile / tablet fixes&lt;br /&gt;
   --------------------------------------------------------------------------&lt;br /&gt;
   Reported by a wiki editor via Discord: on a tablet, the notifications&lt;br /&gt;
   (bell/envelope) flyout &amp;quot;takes up nearly half my screen&amp;quot;. Root cause: Echo&#039;s&lt;br /&gt;
   popup has no max-height or scroll of its own -- it just grows one row per&lt;br /&gt;
   notification forever. Capping it and giving the list its own scrollbar&lt;br /&gt;
   fixes that regardless of how many notifications pile up.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* !important is required here: OOUI&#039;s JS computes its own clipping and sets&lt;br /&gt;
   max-height as an INLINE style on this element, which otherwise beats any&lt;br /&gt;
   plain rule in an external stylesheet regardless of selector specificity. */&lt;br /&gt;
.mw-echo-ui-notificationBadgeButtonPopupWidget-popup .oo-ui-popupWidget-body {&lt;br /&gt;
	max-height: 60vh !important;&lt;br /&gt;
	overflow-y: auto !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 900px) {&lt;br /&gt;
	.mw-echo-ui-notificationBadgeButtonPopupWidget-popup .oo-ui-popupWidget-body {&lt;br /&gt;
		max-height: 45vh !important;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.mw-echo-ui-notificationBadgeButtonPopupWidget-popup .oo-ui-popupWidget-popup {&lt;br /&gt;
		max-width: 92vw;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=MediaWiki:Cosmos.css&amp;diff=6248</id>
		<title>MediaWiki:Cosmos.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=MediaWiki:Cosmos.css&amp;diff=6248"/>
		<updated>2026-09-05T04:09:11Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: Cap the notifications flyout height on mobile/tablet (was unbounded and could cover half the screen)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ==========================================================================&lt;br /&gt;
   SocialProfile dark-theme fixes&lt;br /&gt;
   --------------------------------------------------------------------------&lt;br /&gt;
   SocialProfile&#039;s bundled CSS (UserProfile.css, ProfileTabs.css,&lt;br /&gt;
   SpecialUpdateProfile.css) was written for a white-background wiki: it sets&lt;br /&gt;
   dark-gray text with NO background of its own (relying on the page being&lt;br /&gt;
   white) and hardcodes a green/orange brand palette from Wikia&#039;s old look.&lt;br /&gt;
   On this wiki&#039;s dark #401901 page background that produces near-invisible&lt;br /&gt;
   text and off-brand green tabs/buttons. This overrides just those rules --&lt;br /&gt;
   layout/spacing from the original files is untouched.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
&lt;br /&gt;
/* --- Profile tabs (View profile / Edit profile bar) --- */&lt;br /&gt;
.profile-tab {&lt;br /&gt;
	background-color: rgba(241, 144, 0, 0.12);&lt;br /&gt;
	border: 1px solid #F19000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.profile-tab-on {&lt;br /&gt;
	background-color: #F19000;&lt;br /&gt;
	border: 1px solid #F19000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.profile-tab a {&lt;br /&gt;
	color: #F19000 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.profile-tab a:hover {&lt;br /&gt;
	color: #ffffff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.profile-tab-on a,&lt;br /&gt;
.profile-tab-on a:visited {&lt;br /&gt;
	color: #2a0f00 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Save/update button on Special:UpdateProfile --- */&lt;br /&gt;
.profile-update-button {&lt;br /&gt;
	background-color: #F19000;&lt;br /&gt;
	border: 1px solid #F19000;&lt;br /&gt;
	color: #2a0f00;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Section headings that relied on a white page background --- */&lt;br /&gt;
#user-page-left h2,&lt;br /&gt;
#user-page-right h2,&lt;br /&gt;
.profile-update-title {&lt;br /&gt;
	color: #F19000;&lt;br /&gt;
	border-bottom-color: rgba(255, 255, 255, 0.2);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Body text that relied on a white page background --- */&lt;br /&gt;
.item-small,&lt;br /&gt;
.item,&lt;br /&gt;
.vote-text,&lt;br /&gt;
.profile-update-unit-left,&lt;br /&gt;
.profile-update-unit-small,&lt;br /&gt;
.profile-update-row,&lt;br /&gt;
.profile-board-message-type,&lt;br /&gt;
table.avatar-success-page td.title-cell,&lt;br /&gt;
.user-board-message-time,&lt;br /&gt;
.profile-info-container b,&lt;br /&gt;
.profile-info-container div {&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Cards that set their own pale/white background (looked like leftover&lt;br /&gt;
   white boxes on the dark page) -- keep them as cards, just re-themed --- */&lt;br /&gt;
.no-info-container,&lt;br /&gt;
.no-pictures-container,&lt;br /&gt;
.user-board-message-from {&lt;br /&gt;
	background-color: rgba(255, 255, 255, 0.06);&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Dividers that were near-invisible pale-gray-on-dark-brown --- */&lt;br /&gt;
#user-page-left h2,&lt;br /&gt;
#user-page-right h2,&lt;br /&gt;
.user-section-heading,&lt;br /&gt;
#profile-top,&lt;br /&gt;
.user-board-message,&lt;br /&gt;
.activity-item,&lt;br /&gt;
.casual-game-container p,&lt;br /&gt;
.article-item {&lt;br /&gt;
	border-color: rgba(255, 255, 255, 0.15);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- &amp;quot;Add points&amp;quot;-style badge on the toggle button: brand orange stays,&lt;br /&gt;
   just make sure the text stays legible --- */&lt;br /&gt;
#profile-toggle-button {&lt;br /&gt;
	background-color: #F19000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#profile-toggle-button a {&lt;br /&gt;
	color: #2a0f00 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   Mobile / tablet fixes&lt;br /&gt;
   --------------------------------------------------------------------------&lt;br /&gt;
   Reported by a wiki editor via Discord: on a tablet, the notifications&lt;br /&gt;
   (bell/envelope) flyout &amp;quot;takes up nearly half my screen&amp;quot;. Root cause: Echo&#039;s&lt;br /&gt;
   popup has no max-height or scroll of its own -- it just grows one row per&lt;br /&gt;
   notification forever. Capping it and giving the list its own scrollbar&lt;br /&gt;
   fixes that regardless of how many notifications pile up.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.mw-echo-ui-notificationBadgeButtonPopupWidget-popup .oo-ui-popupWidget-body {&lt;br /&gt;
	max-height: 60vh;&lt;br /&gt;
	overflow-y: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media screen and (max-width: 900px) {&lt;br /&gt;
	.mw-echo-ui-notificationBadgeButtonPopupWidget-popup .oo-ui-popupWidget-body {&lt;br /&gt;
		max-height: 45vh;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	.mw-echo-ui-notificationBadgeButtonPopupWidget-popup .oo-ui-popupWidget-popup {&lt;br /&gt;
		max-width: 92vw;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=MediaWiki:Cosmos.css&amp;diff=6246</id>
		<title>MediaWiki:Cosmos.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=MediaWiki:Cosmos.css&amp;diff=6246"/>
		<updated>2026-09-05T03:49:11Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: Recolor SocialProfile UI to match the dark/orange theme (fixes green tabs and low-contrast text)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ==========================================================================&lt;br /&gt;
   SocialProfile dark-theme fixes&lt;br /&gt;
   --------------------------------------------------------------------------&lt;br /&gt;
   SocialProfile&#039;s bundled CSS (UserProfile.css, ProfileTabs.css,&lt;br /&gt;
   SpecialUpdateProfile.css) was written for a white-background wiki: it sets&lt;br /&gt;
   dark-gray text with NO background of its own (relying on the page being&lt;br /&gt;
   white) and hardcodes a green/orange brand palette from Wikia&#039;s old look.&lt;br /&gt;
   On this wiki&#039;s dark #401901 page background that produces near-invisible&lt;br /&gt;
   text and off-brand green tabs/buttons. This overrides just those rules --&lt;br /&gt;
   layout/spacing from the original files is untouched.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
&lt;br /&gt;
/* --- Profile tabs (View profile / Edit profile bar) --- */&lt;br /&gt;
.profile-tab {&lt;br /&gt;
	background-color: rgba(241, 144, 0, 0.12);&lt;br /&gt;
	border: 1px solid #F19000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.profile-tab-on {&lt;br /&gt;
	background-color: #F19000;&lt;br /&gt;
	border: 1px solid #F19000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.profile-tab a {&lt;br /&gt;
	color: #F19000 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.profile-tab a:hover {&lt;br /&gt;
	color: #ffffff !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.profile-tab-on a,&lt;br /&gt;
.profile-tab-on a:visited {&lt;br /&gt;
	color: #2a0f00 !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Save/update button on Special:UpdateProfile --- */&lt;br /&gt;
.profile-update-button {&lt;br /&gt;
	background-color: #F19000;&lt;br /&gt;
	border: 1px solid #F19000;&lt;br /&gt;
	color: #2a0f00;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Section headings that relied on a white page background --- */&lt;br /&gt;
#user-page-left h2,&lt;br /&gt;
#user-page-right h2,&lt;br /&gt;
.profile-update-title {&lt;br /&gt;
	color: #F19000;&lt;br /&gt;
	border-bottom-color: rgba(255, 255, 255, 0.2);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Body text that relied on a white page background --- */&lt;br /&gt;
.item-small,&lt;br /&gt;
.item,&lt;br /&gt;
.vote-text,&lt;br /&gt;
.profile-update-unit-left,&lt;br /&gt;
.profile-update-unit-small,&lt;br /&gt;
.profile-update-row,&lt;br /&gt;
.profile-board-message-type,&lt;br /&gt;
table.avatar-success-page td.title-cell,&lt;br /&gt;
.user-board-message-time,&lt;br /&gt;
.profile-info-container b,&lt;br /&gt;
.profile-info-container div {&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Cards that set their own pale/white background (looked like leftover&lt;br /&gt;
   white boxes on the dark page) -- keep them as cards, just re-themed --- */&lt;br /&gt;
.no-info-container,&lt;br /&gt;
.no-pictures-container,&lt;br /&gt;
.user-board-message-from {&lt;br /&gt;
	background-color: rgba(255, 255, 255, 0.06);&lt;br /&gt;
	color: #D5D4D4;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Dividers that were near-invisible pale-gray-on-dark-brown --- */&lt;br /&gt;
#user-page-left h2,&lt;br /&gt;
#user-page-right h2,&lt;br /&gt;
.user-section-heading,&lt;br /&gt;
#profile-top,&lt;br /&gt;
.user-board-message,&lt;br /&gt;
.activity-item,&lt;br /&gt;
.casual-game-container p,&lt;br /&gt;
.article-item {&lt;br /&gt;
	border-color: rgba(255, 255, 255, 0.15);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- &amp;quot;Add points&amp;quot;-style badge on the toggle button: brand orange stays,&lt;br /&gt;
   just make sure the text stays legible --- */&lt;br /&gt;
#profile-toggle-button {&lt;br /&gt;
	background-color: #F19000;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#profile-toggle-button a {&lt;br /&gt;
	color: #2a0f00 !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=UserWiki:The_CodeGhost&amp;diff=6243</id>
		<title>UserWiki:The CodeGhost</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=UserWiki:The_CodeGhost&amp;diff=6243"/>
		<updated>2026-09-05T03:38:52Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: import user wiki&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;If you can read this hai but there is no lore here UwU&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;(tho i like pretending not to be the owner so if you just found that out UwU sowwy that i lied)&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=MediaWiki:Cosmos-navigation&amp;diff=6242</id>
		<title>MediaWiki:Cosmos-navigation</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=MediaWiki:Cosmos-navigation&amp;diff=6242"/>
		<updated>2026-09-05T02:05:20Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: Port navigation from Fandom Wiki-navigation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*#|Shiritori content&lt;br /&gt;
**[[Special:RecentChanges]]|Recently edited pages&lt;br /&gt;
**information|Useful resources&lt;br /&gt;
***[[Discord Bot]]&lt;br /&gt;
***[[Dictionary Information]]&lt;br /&gt;
***[[Word compendium]]&lt;br /&gt;
***[[Longest words]]&lt;br /&gt;
***[[WordBombio Pseudo Collab]]&lt;br /&gt;
**gamesbot|Bot games&lt;br /&gt;
***[[Multiplayer Shiritori]]&lt;br /&gt;
***[[SoloShiritori]]&lt;br /&gt;
***[[Word Bomb]]&lt;br /&gt;
***[[Manual-tori]]&lt;br /&gt;
***[[Wordle]]&lt;br /&gt;
***[[Anagram]]&lt;br /&gt;
**strategies|Playstyle changes&lt;br /&gt;
***[[Accent-Assassins]]&lt;br /&gt;
***[[AI Bots]]&lt;br /&gt;
*#|Community&lt;br /&gt;
**[[Word compendium]]&lt;br /&gt;
**Help:Contents|Help&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=Ghost_(Owner)&amp;diff=171</id>
		<title>Ghost (Owner)</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=Ghost_(Owner)&amp;diff=171"/>
		<updated>2026-09-03T04:20:31Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DISPLAYTITLE:Ghost :/}}&lt;br /&gt;
== About the Creator – Ghost ==&lt;br /&gt;
&lt;br /&gt;
=== Who is Ghost? ===&lt;br /&gt;
&#039;&#039;&#039;Ghost&#039;&#039;&#039; is the creator of [[Super-Shiritori]], a long-running word game project hosted on Discord. Known for obsessively building massive wordlists and crafting a mostly functional game system, Ghost has been maintaining and expanding the bot for several years. Originally from El Salvador, Ghost spent several years in South Korea (June 4, 2024 – May 2026) before a military [https://en.wikipedia.org/wiki/Permanent_change_of_station Permanent Change of Station] ({{wc|PCS}}) relocation carried him through Japan, Alaska, and Los Angeles, California, before he finally settled in Hawaii, where he has resided since arriving on June 8, 2026. He is currently a senior in high school; which school is not publicly known. He has a deep passion for computers, language, and words, and has taken computer science courses, including &#039;&#039;&#039;{{wc|CSP}}&#039;&#039;&#039; (Computer Science Principles), with instruction in &#039;&#039;&#039;Java&#039;&#039;&#039; and &#039;&#039;&#039;Python&#039;&#039;&#039;. He primarily codes in &#039;&#039;&#039;Python&#039;&#039;&#039; and also uses &#039;&#039;&#039;HTML&#039;&#039;&#039; for web-related tasks. His main development tools include &#039;&#039;&#039;{{wc|Visual-Studio-Code|Visual Studio Code}}&#039;&#039;&#039; and &#039;&#039;&#039;GitHub&#039;&#039;&#039;, with past experience hosting projects on &#039;&#039;&#039;Glitch&#039;&#039;&#039;. Outside of Super-Shiritori, Ghost briefly experimented with Word Game Hub (hosted on Glitch), but no other public projects are currently known. The bot is supported by a team of dedicated [[Word curators]], who contribute significantly to the community and the growth of the wordlists.&lt;br /&gt;
&lt;br /&gt;
See [[Super-Shiritori#Development|Super-Shiritori&#039;s Development section]] for how this same relocation affected the bot itself, including its extended 2026 outage.&lt;br /&gt;
&lt;br /&gt;
=== Military Connection ===&lt;br /&gt;
The branch is confirmed: Ghost&#039;s {{wc|PCS}} relocation is connected to the &#039;&#039;&#039;U.S. Army&#039;&#039;&#039;. What&#039;s less certain is his own personal status within it — Ghost has described himself as being &amp;quot;in&amp;quot; or &amp;quot;part of&amp;quot; the military, but given that he&#039;s a high school senior, this is most likely him referring to being a military dependent (a &amp;quot;military kid,&amp;quot; relocating alongside a parent&#039;s Army posting) rather than being enlisted himself. That specific distinction has not been explicitly confirmed either way, so it&#039;s noted here as the likely reading rather than a settled fact.&lt;br /&gt;
&lt;br /&gt;
A {{wc|PCS}} order is a permanent, government-directed relocation from one duty station to another, distinct from a temporary assignment — it resets where a service member (and typically their dependents) are officially stationed. It typically comes with a Dislocation Allowance (DLA), a lump-sum, non-repayable payment meant to offset relocation costs such as security deposits and utility hookups, usually paid about a month before the move, along with separate government arrangement and shipment of household goods. Overseas-to-overseas moves like this one (South Korea to Hawaii) are also commonly routed through established military transit hubs rather than flying directly, which is consistent with — though not specifically confirmed to explain — the Japan and Alaska legs of Ghost&#039;s own route. Housing at the new duty station is not always immediately available, particularly in high-cost, limited-inventory markets; Ghost&#039;s own account of waiting for government-provided housing in Hawaii, and the several-month delay that resulted, matches a widely reported real-world shortage of military family housing on the islands.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Recent Events ===&lt;br /&gt;
In mid-August 2026, Hurricane Lala struck the Hawaiian Islands, prompting a state of emergency and tropical storm/hurricane warnings across the state, including Oʻahu — the island Ghost lives on, home to Honolulu. The storm knocked out power to well over 200,000 utility customers statewide at its peak, with Honolulu County among the hardest hit. Ghost lost internet access for about an hour during the storm but was otherwise unaffected and safe. Since [[Super-Shiritori]] runs on Ghost&#039;s own computer rather than any cloud host, the bot itself was offline for that same hour, going down and coming back up alongside his connection. Hawaii&#039;s power grid is prone to real, unannounced outages of several hours or more with no advance warning — a recurring risk for a bot hosted this way rather than a one-off from this particular storm — which is what later prompted the reconnect notice described on [[Super-Shiritori#Development|Super-Shiritori&#039;s Development section]].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== How the Bot Was Made ===&lt;br /&gt;
&lt;br /&gt;
* It all began with a love for the Roblox game &#039;&#039;&#039;Word Bomb&#039;&#039;&#039;, a game Ghost played constantly, even if he wasn&#039;t exactly great at it. What really stuck with him was how limited the word pool felt. Words like &#039;&#039;{{wc|pneumonoultramicroscopicsilicovolcanoconiosis}}&#039;&#039; were excluded, and that didn&#039;t sit right with someone whose spelling was one of their strongest skills.&lt;br /&gt;
&lt;br /&gt;
* Inspired by the idea of having a bot with a powerful dictionary in-hand, an idea that came from the OMG community, Ghost set out to build something better. The first version of his game was a very rough, Python-powered text-based experiment called &#039;&#039;&#039;Word Bomb Skuffed Edition&#039;&#039;&#039;, which eventually housed around 450,000 words.&lt;br /&gt;
&lt;br /&gt;
* During the bot&#039;s development, Ghost also experimented with creating a website full of word games, called [[Word Game Hub]], hosted on [https://glitch.com Glitch]. The site was never finished and only featured one fully working game, but its dictionary reached a peak of roughly 574,900 words, sharing dictionary lineage with [[Super-Shiritori]]. The discouragement from the incomplete project caused a temporary loss of motivation. The original URL no longer exists, but the recovered source code — including a downloadable copy — is documented in full on the [[Word Game Hub]] page.&lt;br /&gt;
&lt;br /&gt;
* With help from friends and external sources, the project evolved into a website called &#039;&#039;&#039;Ghost-Games&#039;&#039;&#039;, hosted on Glitch. That version eventually went offline, but it laid the foundation for what would become the current Discord bot.&lt;br /&gt;
&lt;br /&gt;
* The bot was built using &#039;&#039;&#039;Visual Studio Code ([https://code.visualstudio.com VSCode])&#039;&#039;&#039; and runs with assistance from &#039;&#039;&#039;{{wc|GitHub}}&#039;&#039;&#039;. Most of its core functionality was learned and developed through trial, error, and countless YouTube tutorials. Ghost doesn&#039;t really like the idea of using AI to write code, calling it &amp;quot;cheat-ish,&amp;quot; but he did use the built-in AI assistant to help draft messages and responses for the bot&#039;s chat output.&lt;br /&gt;
&lt;br /&gt;
* The biggest challenges? Frustration, technical hurdles, and being a broke high schooler with limited resources. Thankfully, a good friend named &#039;&#039;&#039;Kos&#039;&#039;&#039; now helps run the bot, keeping things online and stable.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Design Philosophy ===&lt;br /&gt;
Ghost has described thinking about the relationship between Super-Shiritori&#039;s various word-chain game modes in loosely [https://en.wikipedia.org/wiki/Object-oriented_programming object-oriented] terms, as a way of explaining how the modes relate to each other conceptually. It&#039;s worth noting upfront that this is a mental model rather than the bot&#039;s literal code structure — under the hood, each mode is a set of plain functions operating on dictionaries of game state, not actual Python classes with real inheritance. Mapped onto the real codebase as closely as the analogy allows:&lt;br /&gt;
* [[Multiplayer Shiritori]] and its [[Multiplayer Shiritori#Timed Shiritori|Timed Shiritori]] variant work like two different instances of the same class, configured differently at creation — Timed Shiritori isn&#039;t separate code at all, just the same game state with one additional setting turned on.&lt;br /&gt;
* [[Protori]] fits the pattern of a subclass more than a sibling instance: it inherits the same core word-chain-matching rule (matching the previous word&#039;s ending) but overrides several of the base behaviors outright — a freeform turn order instead of a fixed rotation, a running score instead of simple survival, and a different way for a game to end.&lt;br /&gt;
* [[Solo Shiritori]] doesn&#039;t subclass anything in this framing; it composes with multiplayer Shiritori instead, reusing the exact same AI personality &amp;quot;brain&amp;quot; (the word-selection logic and spawn-probability table documented on [[AI Bots]]) as a shared component rather than duplicating or inheriting it.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Partnerships &amp;amp; Collaborators ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Kos (kos256)&#039;&#039;&#039; – Bot Administrator&lt;br /&gt;
* &#039;&#039;&#039;GreenyMage (greenymage)&#039;&#039;&#039; – Graphic Designer&lt;br /&gt;
* Beyond that, the project thrives thanks to the small but loyal community that has formed around it. Whether you&#039;re actively contributing or just hanging out in the server, Ghost truly appreciates every one of you. This project wouldn&#039;t exist without that support.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Fun Facts ===&lt;br /&gt;
&lt;br /&gt;
* Has strong knowledge of geography.&lt;br /&gt;
* Some accent-based word translations happen automatically due to the global &amp;lt;code&amp;gt;Normalize&amp;lt;/code&amp;gt; function; at first, people thought it was intentional.&lt;br /&gt;
* Many &amp;quot;false words&amp;quot; are created by Ghost as inside jokes; examples can be found in the [[Word compendium|Word Compendium]] under [[:Category:Shiritori originals|Shiritori originals]].&lt;br /&gt;
* Admin Kos often calls Ghost by the nickname &amp;quot;Shiritori.&amp;quot;&lt;br /&gt;
* Has developed a recent phobia of {{wc|grape|grapes}}, after October 11th 2025.&lt;br /&gt;
* Favorite piece of digital media: the anime [https://en.wikipedia.org/wiki/Clockwork_Planet &#039;&#039;Clockwork Planet&#039;&#039;].&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
* [https://www.travel.dod.mil/Travel-Transportation-Rates/Dislocation-Allowance/ Dislocation Allowance — Defense Travel Management Office]&lt;br /&gt;
* [https://abcnews.com/US/tropical-storm-lala-forecast-impact-hawaiian-islands-weekend/story?id=135610026 Lala spins out to sea after storm hammered the Hawaiian Islands — ABC News]&lt;br /&gt;
* [https://www.honolulu.gov/mayor/emergency-responses-to-tropical-storm-lala-continue-as-winds-and-heavy-rain-persist/ Emergency responses to Tropical Storm Lala — Office of the Mayor, City and County of Honolulu]&lt;br /&gt;
&lt;br /&gt;
[[Category:Information]]&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=Protori&amp;diff=259</id>
		<title>Protori</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=Protori&amp;diff=259"/>
		<updated>2026-08-29T18:47:42Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Protori =&lt;br /&gt;
&lt;br /&gt;
Protori is a scoring-based variant of multiplayer Shiritori, played in a shared text channel. Rather than simply extending a word chain for its own sake, every accepted word earns points, and the game is built around chasing a high score rather than outlasting other players.&lt;br /&gt;
&lt;br /&gt;
== Starting a Game ==&lt;br /&gt;
A server member with the Manage Messages permission, the bot owner, or a word curator can start a game with &amp;lt;code&amp;gt;/start_protori [#channel]&amp;lt;/code&amp;gt;. A Protori game and a multiplayer Shiritori game cannot both run in the same channel at once; starting either is rejected if the other is already active there. The bot posts the rules along with a random starting word, and a &amp;quot;Point System Explained?&amp;quot; button that shows a private, detailed breakdown of the scoring formula (including a worked example) to whoever clicks it.&lt;br /&gt;
&lt;br /&gt;
== Rules ==&lt;br /&gt;
# A word must match some ending portion of the previous word — anywhere from just its final letter up to every letter but the first. A word with no such overlap at all is rejected.&lt;br /&gt;
# Words must be between 2 and 80 characters long, contain only letters, hyphens, and apostrophes, and be found in the dictionary.&lt;br /&gt;
# A player cannot play twice in a row; someone else must play before the same player can go again.&lt;br /&gt;
# Unlike regular multiplayer Shiritori, there is no fixed turn order beyond that rule — any eligible player in the channel may play the next word whenever they&#039;re ready.&lt;br /&gt;
# Playing a word that has already been used in the game ends it immediately (see [[#Ending a Game|Ending a Game]] below).&lt;br /&gt;
&lt;br /&gt;
A server&#039;s &amp;lt;code&amp;gt;/toggle_corrections&amp;lt;/code&amp;gt; setting (the same one used by regular multiplayer Shiritori) also applies to Protori: with it off, an invalid word gets an explanatory message alongside its ❌ reaction; with it on, invalid words are only ever marked with a reaction.&lt;br /&gt;
&lt;br /&gt;
=== The Overlap Rule, Explained ===&lt;br /&gt;
Rule 1 above is the one that most often confuses new players, since it isn&#039;t simply &amp;quot;start with the last letter&amp;quot; the way regular Shiritori is. Take the 9-letter word &amp;lt;code&amp;gt;{{wc|gyroscope}}&amp;lt;/code&amp;gt;: a legal next word can start from &#039;&#039;&#039;any&#039;&#039;&#039; of the following eight positions, matching from the 2nd letter of &amp;lt;code&amp;gt;gyroscope&amp;lt;/code&amp;gt; all the way down to just its final letter — &amp;lt;code&amp;gt;yroscope&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;roscope&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;oscope&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;scope&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cope&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ope&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pe&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt; — and no other starting point is valid. The word only needs to start with &#039;&#039;&#039;one&#039;&#039;&#039; of these; it doesn&#039;t need to be a recognizable prefix, a real word on its own, or any specific length beyond that range. Only the &#039;&#039;&#039;longest&#039;&#039;&#039; overlap a submitted word actually achieves counts toward its [[#Chain Bonus|chain bonus]] below, but any of the shorter overlaps in that same list would have made the word legal in the first place.&lt;br /&gt;
&lt;br /&gt;
Notice that matching the &#039;&#039;entire&#039;&#039; previous word — all nine letters of &amp;lt;code&amp;gt;gyroscope&amp;lt;/code&amp;gt; itself — is deliberately not on that list; the cap always stops one letter short of the full word. This is intentional, not an oversight: if the complete previous word counted as a valid overlap, a player could always trivially satisfy the rule by taking the previous word whole and simply tacking a letter onto the end of it — most obviously, pluralizing an unpluralized word by adding an &amp;quot;s&amp;quot; (&amp;lt;code&amp;gt;cat&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;cats&amp;lt;/code&amp;gt;) — without the new word actually needing to diverge from the old one at all. Requiring the overlap to stop at least one letter short of the full word closes that loophole off entirely.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Just how much that loophole would be worth:&#039;&#039;&#039; the 31-letter word &amp;lt;code&amp;gt;{{wc|Dichlorodiphenyltrichloroethane}}&amp;lt;/code&amp;gt; (the common name for {{wc|DDT}}) has a base score of &#039;&#039;&#039;46&#039;&#039;&#039; points against the [[#Base Score|letter-value table]] above. If a full-word overlap were legal, a reply of &amp;lt;code&amp;gt;Dichlorodiphenyltrichloroethanes&amp;lt;/code&amp;gt; — literally the same word with nothing but an &amp;quot;s&amp;quot; tacked on — would match all 31 letters of the word before it. Its own base score of 47 (46, plus 1 for the added &amp;quot;s&amp;quot;) would then round up to &#039;&#039;&#039;62&#039;&#039;&#039; points at a hypothetical +31% chain bonus: &#039;&#039;&#039;16 points more&#039;&#039;&#039; than the original word scored — roughly &#039;&#039;&#039;35% higher&#039;&#039;&#039; — for a &amp;quot;new&amp;quot; word that took zero actual chain-matching skill, just noticing the word on screen wasn&#039;t already plural. Under the rule as it actually works, this exact move isn&#039;t merely worth less; it isn&#039;t legal at all. &amp;lt;code&amp;gt;Dichlorodiphenyltrichloroethanes&amp;lt;/code&amp;gt; only ever begins with the &#039;&#039;&#039;start&#039;&#039;&#039; of the previous word, never with any of its real ending portions once the trivial full-word case is excluded — so it has &#039;&#039;&#039;no valid overlap whatsoever&#039;&#039;&#039; and would simply be rejected outright.&lt;br /&gt;
&lt;br /&gt;
== Scoring ==&lt;br /&gt;
Every accepted word earns points from two parts: a &#039;&#039;&#039;base score&#039;&#039;&#039; and a &#039;&#039;&#039;chain bonus&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Base Score ===&lt;br /&gt;
A word&#039;s base score is the sum of its letters&#039; point values, using a flat table calibrated to how rare each letter actually is across the dictionary rather than a standard Scrabble tile distribution:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Letter/Symbol !! Points !! Letter !! Points !! Letter !! Points !! Letter !! Points&lt;br /&gt;
|-&lt;br /&gt;
| &#039; || 8 || h || 3 || o || 1 || v || 4&lt;br /&gt;
|-&lt;br /&gt;
| - || 1 || i || 1 || p || 3 || w || 4&lt;br /&gt;
|-&lt;br /&gt;
| a || 1 || j || 4 || q || 10 || x || 8&lt;br /&gt;
|-&lt;br /&gt;
| b || 3 || k || 4 || r || 1 || y || 4&lt;br /&gt;
|-&lt;br /&gt;
| c || 1 || l || 1 || s || 1 || z || 5&lt;br /&gt;
|-&lt;br /&gt;
| d || 2 || m || 3 || t || 1 || ||&lt;br /&gt;
|-&lt;br /&gt;
| e || 1 || n || 1 || u || 2 || ||&lt;br /&gt;
|-&lt;br /&gt;
| f || 4 || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| g || 3 || || || || || ||&lt;br /&gt;
|}&lt;br /&gt;
An apostrophe is worth as much as any of the rarest letters (8 points), and a hyphen is worth as little as the most common ones (1 point).&lt;br /&gt;
&lt;br /&gt;
=== Comparison to Scrabble ===&lt;br /&gt;
Protori&#039;s letter values are explicitly &#039;&#039;&#039;not&#039;&#039;&#039; the standard tile-point distribution used in [https://en.wikipedia.org/wiki/Scrabble_letter_distributions Scrabble], despite drawing on the same basic idea (rarer letters are worth more). Laid side by side:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Letter !! Protori !! Scrabble !! Difference&lt;br /&gt;
|-&lt;br /&gt;
| A || 1 || 1 || —&lt;br /&gt;
|-&lt;br /&gt;
| B || 3 || 3 || —&lt;br /&gt;
|-&lt;br /&gt;
| C || 1 || 3 || Protori −2&lt;br /&gt;
|-&lt;br /&gt;
| D || 2 || 2 || —&lt;br /&gt;
|-&lt;br /&gt;
| E || 1 || 1 || —&lt;br /&gt;
|-&lt;br /&gt;
| F || 4 || 4 || —&lt;br /&gt;
|-&lt;br /&gt;
| G || 3 || 2 || Protori +1&lt;br /&gt;
|-&lt;br /&gt;
| H || 3 || 4 || Protori −1&lt;br /&gt;
|-&lt;br /&gt;
| I || 1 || 1 || —&lt;br /&gt;
|-&lt;br /&gt;
| J || 4 || 8 || Protori −4&lt;br /&gt;
|-&lt;br /&gt;
| K || 4 || 5 || Protori −1&lt;br /&gt;
|-&lt;br /&gt;
| L || 1 || 1 || —&lt;br /&gt;
|-&lt;br /&gt;
| M || 3 || 3 || —&lt;br /&gt;
|-&lt;br /&gt;
| N || 1 || 1 || —&lt;br /&gt;
|-&lt;br /&gt;
| O || 1 || 1 || —&lt;br /&gt;
|-&lt;br /&gt;
| P || 3 || 3 || —&lt;br /&gt;
|-&lt;br /&gt;
| Q || 10 || 10 || —&lt;br /&gt;
|-&lt;br /&gt;
| R || 1 || 1 || —&lt;br /&gt;
|-&lt;br /&gt;
| S || 1 || 1 || —&lt;br /&gt;
|-&lt;br /&gt;
| T || 1 || 1 || —&lt;br /&gt;
|-&lt;br /&gt;
| U || 2 || 1 || Protori +1&lt;br /&gt;
|-&lt;br /&gt;
| V || 4 || 4 || —&lt;br /&gt;
|-&lt;br /&gt;
| W || 4 || 4 || —&lt;br /&gt;
|-&lt;br /&gt;
| X || 8 || 8 || —&lt;br /&gt;
|-&lt;br /&gt;
| Y || 4 || 4 || —&lt;br /&gt;
|-&lt;br /&gt;
| Z || 5 || 10 || Protori −5&lt;br /&gt;
|}&lt;br /&gt;
Neither the apostrophe nor the hyphen has a Scrabble equivalent at all — Scrabble&#039;s physical tile set has no punctuation.&lt;br /&gt;
&lt;br /&gt;
Nineteen of the twenty-six letters carry identical values in both systems; only seven diverge, and every divergence is Protori valuing the letter &#039;&#039;&#039;lower&#039;&#039;&#039; than Scrabble except for G and U. The two biggest gaps are both letters Protori considers far more common than Scrabble does: &#039;&#039;&#039;Z&#039;&#039;&#039; (5 vs. 10) and &#039;&#039;&#039;J&#039;&#039;&#039; (4 vs. 8). That tracks with how the two point systems were actually built — Scrabble&#039;s values reflect letter frequency across general English text, while Protori&#039;s are calibrated against its own roughly 1.67-million-word dictionary, which leans heavily on scientific, technical, and foreign-derived vocabulary where Z and J show up far more often than they would in ordinary English writing.&lt;br /&gt;
&lt;br /&gt;
=== Chain Bonus ===&lt;br /&gt;
Matching more of the previous word&#039;s ending — beyond just its last letter — adds a bonus of roughly &#039;&#039;&#039;+1% of the word&#039;s base score per matched character&#039;&#039;&#039;. A word that only matches the previous word&#039;s final letter gets no bonus at all; one that matches deep into a long previous word can gain up to roughly +79%.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example:&#039;&#039;&#039; the word &amp;lt;code&amp;gt;quiz&amp;lt;/code&amp;gt; has a base score of Q(10) + U(2) + I(1) + Z(5) = 18. If it matched 5 characters of the ending of the previous word, its final score would be round(18 × 1.05) = &#039;&#039;&#039;19 points&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
There are no attack mechanics, penalties for other players, or bonus-emoji reactions in the current version of Protori — score is purely base score plus chain bonus.&lt;br /&gt;
&lt;br /&gt;
=== Notable High-Scoring Words ===&lt;br /&gt;
Checking the dictionary directly against the letter-point table above (base score only, no chain bonus) turns up some of the highest-scoring legitimate entries a player could actually play:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Word !! Base Score !! Length&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz}} || 290 || 58&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|h-kqqqqqqqqqqqqqqqqqqqqqqr-oh}} || 234 || 29&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|kqqqqqqqqqqqqqqqqqqqqqqr}} || 225 || 24&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|four-four&#039;&#039;&#039;-bis-two-butyloctyl-oxy-one-one&#039;four&#039;one&#039;&#039;four&#039;&#039;one&#039;&#039;&#039;-quaterphenyl|&amp;lt;nowiki&amp;gt;four-four&#039;&#039;&#039;-bis-two-butyloctyl-oxy-one-one&#039;four&#039;one&#039;&#039;four&#039;&#039;one&#039;&#039;&#039;-quaterphenyl&amp;lt;/nowiki&amp;gt;}} || 220 || 79&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|jf-qqblid-qz&#039;bdabykvqqjiiyqqhspehyzjvhfbf&#039;bcd}} || 187 || 45&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|jashsbiykwqgmahhdlrdimvqrfijzhqiyipr&#039;qj&#039;bfijzxphi&#039;}} || 181 || 50&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-large}} || 175 || 75&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|jlepa&#039;b-adbbeqgh&#039;hpfhrjjijiuqqed&#039;q&#039;&#039;hfzfhbbh|&amp;lt;nowiki&amp;gt;jlepa&#039;b-adbbeqgh&#039;hpfhrjjijiuqqed&#039;q&#039;&#039;hfzfhbbh&amp;lt;/nowiki&amp;gt;}} || 171 || 44&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj}} || 164 || 41&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-large}} || 163 || 70&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|extra-extra-extra-extra-extra-extra-extra-extra-extra-extra-extra-extra-large}} || 163 || 77&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|zzzezggzzzzhunzzzztzzzzchzzzozmzzzzikzz|zzzezggzzzzhunzzzztzzzzchzzzozmzzzzikzzes}} || 159 || 41&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|h-yqpeclepskygcrgdedatfgwtfdredggcrdgsyctrfgqpknyfrsegdckkacgga-oh}} || 159 || 66&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|zzzezggzzzzhunzzzztzzzzchzzzozmzzzzikzz}} || 157 || 39&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|h-vsqpeatkcfqwqrnmrkvrgppvscikrdspiqci-oh-h-grrrrsvqwca-oh}} || 156 || 58&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|h-yqpeclepskygcrgdedatfgwtfdredggcrdgsyctrfgqpknyfrserdckkacgna-oh}} || 155 || 66&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|h-cngrcggkqkikhvvklkvvvklksqlvkrkvvvrrrkkiqgrskr-oh}} || 155 || 51&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|googolplexplexplexplexplexplexplexplexplexplexplexes}} || 155 || 52&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|buzu-buzu-bichi-bichi-bubebebebebepi-gogogogogo-janjandadaddadokosukaba-n-mix}} || 155 || 77&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|two-two-methyl-eight-four-methylphenyl-sulfonylamino-quinolin-six-yl-oxyacetates}} || 154 || 80&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|two-two-methyl-eight-four-methylphenyl-sulfonylamino-quinolin-six-yl-oxyacetate}} || 153 || 79&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|n-dioctadecylcarbamoylmethoxyacetyl-gly-gly-gly-gly-pro-gly-gly-gly-gly-obzl}} || 153 || 76&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|googolplexplexplexplexplexplexplexplexplexplexplex}} || 153 || 50&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|xxxxxxxxxxxxxxxxxxx}} || 152 || 19&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-large}} || 151 || 65&lt;br /&gt;
|}&lt;br /&gt;
all within Protori&#039;s 80-character limit, computed against the exact letter-value table above with no chain bonus applied.&lt;br /&gt;
&lt;br /&gt;
== Ending a Game ==&lt;br /&gt;
Playing an already-used word ends the game immediately and costs that player a &#039;&#039;&#039;250-point penalty&#039;&#039;&#039;, with a pointed message calling them out for it. When the game ends — whether by a repeat, or manually via &amp;lt;code&amp;gt;/end_protori&amp;lt;/code&amp;gt; — the bot posts a final leaderboard (up to the top 20 scores), the number of unique words played, and the dictionary-coverage percentage that represents.&lt;br /&gt;
&lt;br /&gt;
Unless the game was ended by an admin (&amp;lt;code&amp;gt;/end_protori&amp;lt;/code&amp;gt; stops it permanently, with no restart), a new Protori game starts automatically in the same channel after a 2-minute cooldown, mirroring how multiplayer Shiritori&#039;s own auto-restart behaves.&lt;br /&gt;
&lt;br /&gt;
== Game Records ==&lt;br /&gt;
Separately from the per-player statistics below, every game is also checked against two all-time records the moment it ends: the longest Protori game ever played in that specific channel, and the longest one ever played anywhere on that server — both measured by unique words played, not raw turn count. Whichever is relevant is announced right alongside the end-of-game leaderboard embed: a game that just set a new record gets a &amp;quot;🏆 &#039;&#039;&#039;NEW CHANNEL RECORD!&#039;&#039;&#039;&amp;quot; and/or &amp;quot;🏆 &#039;&#039;&#039;NEW SERVER RECORD!&#039;&#039;&#039;&amp;quot; celebration, while any other game instead gets told how far short it fell, e.g. &amp;quot;&#039;&#039;N&#039;&#039; turns until Channel Record of &#039;&#039;X&#039;&#039;&amp;quot;. This same record-tracking system is shared with regular [[Multiplayer Shiritori]] and its [[Multiplayer Shiritori#Timed Shiritori|Timed Shiritori]] variant, each keeping its own independent set of channel/server records.&lt;br /&gt;
&lt;br /&gt;
== Statistics ==&lt;br /&gt;
Protori tracks its own stats per player, separate from multiplayer Shiritori&#039;s: total points, turns played, hyphens and apostrophes used, longest word, unique words played, and how many games ended because that player repeated a word. These can be viewed with &amp;lt;code&amp;gt;/protori_stats&amp;lt;/code&amp;gt; (global totals plus a per-server breakdown, Public/Private) and compared with &amp;lt;code&amp;gt;/protori_leaderboard&amp;lt;/code&amp;gt; (server or global).&lt;br /&gt;
&lt;br /&gt;
Protori also has its own set of achievements — see the &amp;quot;Shiritoris&amp;quot; category on [[Achievements]] — covering score milestones (from a game-ending negative score up to reaching 25,000 points), single-word scoring feats, and related Timed Shiritori and solo-AI achievements grouped alongside it.&lt;br /&gt;
&lt;br /&gt;
Unlike multiplayer Shiritori and Solo Shiritori, Protori has no [[AI Bots|AI opponent]] support at all — there is no equivalent of &amp;lt;code&amp;gt;/invite_ai&amp;lt;/code&amp;gt; here. Using &amp;lt;code&amp;gt;/invite_ai&amp;lt;/code&amp;gt; while a Protori game is active in that channel is specifically rejected with:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot;❌ AIs have gone fishing in Protori channels. No signal to give any a call.&amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
and the first player to see that message unlocks the &amp;quot;Ghosted&amp;quot; [[Achievements|achievement]] (later attempts don&#039;t re-trigger it). &amp;lt;code&amp;gt;/murder_ai&amp;lt;/code&amp;gt; has no equivalent Protori-specific check of its own — since a Protori game and a regular multiplayer game can never be active in the same channel at the same time (see [[#Starting a Game|Starting a Game]] above), it simply reports &amp;quot;No active multiplayer Shiritori game in this channel&amp;quot; instead, the same generic message it gives anywhere else with no AI to remove.&lt;br /&gt;
&lt;br /&gt;
== The Protori Role ==&lt;br /&gt;
Separately from gameplay, any member of the bot&#039;s home server who reaches &#039;&#039;&#039;overall level 12&#039;&#039;&#039; (through any game mode, not Protori specifically) is automatically granted a dedicated Protori-themed Discord role, checked by a background scan roughly once a minute. This role is a cosmetic reward tied to general progress — it does not gate who is allowed to actually play Protori.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
Protori originally restricted both which server could run the mode at all and who could participate in it to holders of the level-12 role described above, scoped to the bot&#039;s home server specifically. That restriction has since been removed: any server can now start and fully play a Protori game through &amp;lt;code&amp;gt;/start_protori&amp;lt;/code&amp;gt;, and the level-12 role is purely the cosmetic reward described above rather than a gameplay gate.&lt;br /&gt;
&lt;br /&gt;
Protori keeps [[Multiplayer Shiritori]]&#039;s core word-chain-matching rule but overrides several of its base behaviors outright — a freeform turn order instead of a fixed rotation, a running score instead of simple survival, and a different way for a game to end. See [[Ghost (Owner)#Design Philosophy|Ghost&#039;s Design Philosophy]] for how this fits into a broader analogy Ghost uses for the relationship between the bot&#039;s game modes.&lt;br /&gt;
&lt;br /&gt;
Saving a game&#039;s state used to be a direct, synchronous disk write performed on every single turn, right on the bot&#039;s one shared event loop — since every other game mode, in every server, runs on that same loop, a large Protori game (achievement thresholds go up to 25,000 points, implying a lot of turns) could measurably stall every other concurrent game across the entire bot on every word played. That save now happens on a background thread instead.&lt;br /&gt;
&lt;br /&gt;
The background scan behind the Protori Role described above used to re-check every eligible member on every single pass with no memory of the outcome between passes — a member who had reached level 12 and then left the server (or was simply never cached) got re-fetched from Discord&#039;s API every single minute, forever, with no pacing between consecutive lookups in the same pass. Since the underlying level data only ever grows over a bot&#039;s lifetime, this got slower and more prone to tripping Discord&#039;s rate limits over time, and was found to be a real contributing factor during an investigation into a live outage. It now remembers which users are confirmed to no longer be members (skipping them for the rest of that session) and pauses briefly between lookups, so the scan can no longer grow into a rate-limit problem the way it previously could.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/start_protori&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/end_protori&amp;lt;/code&amp;gt; could previously fail outright with a generic Discord &amp;quot;Unknown interaction&amp;quot; error if their own background setup or teardown work took longer than Discord&#039;s 3-second initial-response window. Both commands now acknowledge the interaction immediately and send their actual response afterward, removing the crash.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Multiplayer Shiritori]]&lt;br /&gt;
* [[Solo Shiritori]]&lt;br /&gt;
* [[AI Bots]]&lt;br /&gt;
* [[Achievements]]&lt;br /&gt;
* [[Super-Shiritori]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Information]]&lt;br /&gt;
[[Category:Games(bot)]]&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=Ghost_(Owner)&amp;diff=170</id>
		<title>Ghost (Owner)</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=Ghost_(Owner)&amp;diff=170"/>
		<updated>2026-08-29T00:59:59Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About the Creator – Ghost ==&lt;br /&gt;
&lt;br /&gt;
=== Who is Ghost? ===&lt;br /&gt;
&#039;&#039;&#039;Ghost&#039;&#039;&#039; is the creator of [[Super-Shiritori]], a long-running word game project hosted on Discord. Known for obsessively building massive wordlists and crafting a mostly functional game system, Ghost has been maintaining and expanding the bot for several years. Originally from El Salvador, Ghost spent several years in South Korea (June 4, 2024 – May 2026) before a military [https://en.wikipedia.org/wiki/Permanent_change_of_station Permanent Change of Station] ({{wc|PCS}}) relocation carried him through Japan, Alaska, and Los Angeles, California, before he finally settled in Hawaii, where he has resided since arriving on June 8, 2026. He is currently a senior in high school; which school is not publicly known. He has a deep passion for computers, language, and words, and has taken computer science courses, including &#039;&#039;&#039;{{wc|CSP}}&#039;&#039;&#039; (Computer Science Principles), with instruction in &#039;&#039;&#039;Java&#039;&#039;&#039; and &#039;&#039;&#039;Python&#039;&#039;&#039;. He primarily codes in &#039;&#039;&#039;Python&#039;&#039;&#039; and also uses &#039;&#039;&#039;HTML&#039;&#039;&#039; for web-related tasks. His main development tools include &#039;&#039;&#039;{{wc|Visual-Studio-Code|Visual Studio Code}}&#039;&#039;&#039; and &#039;&#039;&#039;GitHub&#039;&#039;&#039;, with past experience hosting projects on &#039;&#039;&#039;Glitch&#039;&#039;&#039;. Outside of Super-Shiritori, Ghost briefly experimented with Word Game Hub (hosted on Glitch), but no other public projects are currently known. The bot is supported by a team of dedicated [[Word curators]], who contribute significantly to the community and the growth of the wordlists.&lt;br /&gt;
&lt;br /&gt;
See [[Super-Shiritori#Development|Super-Shiritori&#039;s Development section]] for how this same relocation affected the bot itself, including its extended 2026 outage.&lt;br /&gt;
&lt;br /&gt;
=== Military Connection ===&lt;br /&gt;
The branch is confirmed: Ghost&#039;s {{wc|PCS}} relocation is connected to the &#039;&#039;&#039;U.S. Army&#039;&#039;&#039;. What&#039;s less certain is his own personal status within it — Ghost has described himself as being &amp;quot;in&amp;quot; or &amp;quot;part of&amp;quot; the military, but given that he&#039;s a high school senior, this is most likely him referring to being a military dependent (a &amp;quot;military kid,&amp;quot; relocating alongside a parent&#039;s Army posting) rather than being enlisted himself. That specific distinction has not been explicitly confirmed either way, so it&#039;s noted here as the likely reading rather than a settled fact.&lt;br /&gt;
&lt;br /&gt;
A {{wc|PCS}} order is a permanent, government-directed relocation from one duty station to another, distinct from a temporary assignment — it resets where a service member (and typically their dependents) are officially stationed. It typically comes with a Dislocation Allowance (DLA), a lump-sum, non-repayable payment meant to offset relocation costs such as security deposits and utility hookups, usually paid about a month before the move, along with separate government arrangement and shipment of household goods. Overseas-to-overseas moves like this one (South Korea to Hawaii) are also commonly routed through established military transit hubs rather than flying directly, which is consistent with — though not specifically confirmed to explain — the Japan and Alaska legs of Ghost&#039;s own route. Housing at the new duty station is not always immediately available, particularly in high-cost, limited-inventory markets; Ghost&#039;s own account of waiting for government-provided housing in Hawaii, and the several-month delay that resulted, matches a widely reported real-world shortage of military family housing on the islands.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Recent Events ===&lt;br /&gt;
In mid-August 2026, Hurricane Lala struck the Hawaiian Islands, prompting a state of emergency and tropical storm/hurricane warnings across the state, including Oʻahu — the island Ghost lives on, home to Honolulu. The storm knocked out power to well over 200,000 utility customers statewide at its peak, with Honolulu County among the hardest hit. Ghost lost internet access for about an hour during the storm but was otherwise unaffected and safe. Since [[Super-Shiritori]] runs on Ghost&#039;s own computer rather than any cloud host, the bot itself was offline for that same hour, going down and coming back up alongside his connection. Hawaii&#039;s power grid is prone to real, unannounced outages of several hours or more with no advance warning — a recurring risk for a bot hosted this way rather than a one-off from this particular storm — which is what later prompted the reconnect notice described on [[Super-Shiritori#Development|Super-Shiritori&#039;s Development section]].&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== How the Bot Was Made ===&lt;br /&gt;
&lt;br /&gt;
* It all began with a love for the Roblox game &#039;&#039;&#039;Word Bomb&#039;&#039;&#039;, a game Ghost played constantly, even if he wasn&#039;t exactly great at it. What really stuck with him was how limited the word pool felt. Words like &#039;&#039;{{wc|pneumonoultramicroscopicsilicovolcanoconiosis}}&#039;&#039; were excluded, and that didn&#039;t sit right with someone whose spelling was one of their strongest skills.&lt;br /&gt;
&lt;br /&gt;
* Inspired by the idea of having a bot with a powerful dictionary in-hand, an idea that came from the OMG community, Ghost set out to build something better. The first version of his game was a very rough, Python-powered text-based experiment called &#039;&#039;&#039;Word Bomb Skuffed Edition&#039;&#039;&#039;, which eventually housed around 450,000 words.&lt;br /&gt;
&lt;br /&gt;
* During the bot&#039;s development, Ghost also experimented with creating a website full of word games, called [[Word Game Hub]], hosted on [https://glitch.com Glitch]. The site was never finished and only featured one fully working game, but its dictionary reached a peak of roughly 574,900 words, sharing dictionary lineage with [[Super-Shiritori]]. The discouragement from the incomplete project caused a temporary loss of motivation. The original URL no longer exists, but the recovered source code — including a downloadable copy — is documented in full on the [[Word Game Hub]] page.&lt;br /&gt;
&lt;br /&gt;
* With help from friends and external sources, the project evolved into a website called &#039;&#039;&#039;Ghost-Games&#039;&#039;&#039;, hosted on Glitch. That version eventually went offline, but it laid the foundation for what would become the current Discord bot.&lt;br /&gt;
&lt;br /&gt;
* The bot was built using &#039;&#039;&#039;Visual Studio Code ([https://code.visualstudio.com VSCode])&#039;&#039;&#039; and runs with assistance from &#039;&#039;&#039;{{wc|GitHub}}&#039;&#039;&#039;. Most of its core functionality was learned and developed through trial, error, and countless YouTube tutorials. Ghost doesn&#039;t really like the idea of using AI to write code, calling it &amp;quot;cheat-ish,&amp;quot; but he did use the built-in AI assistant to help draft messages and responses for the bot&#039;s chat output.&lt;br /&gt;
&lt;br /&gt;
* The biggest challenges? Frustration, technical hurdles, and being a broke high schooler with limited resources. Thankfully, a good friend named &#039;&#039;&#039;Kos&#039;&#039;&#039; now helps run the bot, keeping things online and stable.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Design Philosophy ===&lt;br /&gt;
Ghost has described thinking about the relationship between Super-Shiritori&#039;s various word-chain game modes in loosely [https://en.wikipedia.org/wiki/Object-oriented_programming object-oriented] terms, as a way of explaining how the modes relate to each other conceptually. It&#039;s worth noting upfront that this is a mental model rather than the bot&#039;s literal code structure — under the hood, each mode is a set of plain functions operating on dictionaries of game state, not actual Python classes with real inheritance. Mapped onto the real codebase as closely as the analogy allows:&lt;br /&gt;
* [[Multiplayer Shiritori]] and its [[Multiplayer Shiritori#Timed Shiritori|Timed Shiritori]] variant work like two different instances of the same class, configured differently at creation — Timed Shiritori isn&#039;t separate code at all, just the same game state with one additional setting turned on.&lt;br /&gt;
* [[Protori]] fits the pattern of a subclass more than a sibling instance: it inherits the same core word-chain-matching rule (matching the previous word&#039;s ending) but overrides several of the base behaviors outright — a freeform turn order instead of a fixed rotation, a running score instead of simple survival, and a different way for a game to end.&lt;br /&gt;
* [[Solo Shiritori]] doesn&#039;t subclass anything in this framing; it composes with multiplayer Shiritori instead, reusing the exact same AI personality &amp;quot;brain&amp;quot; (the word-selection logic and spawn-probability table documented on [[AI Bots]]) as a shared component rather than duplicating or inheriting it.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Partnerships &amp;amp; Collaborators ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Kos (kos256)&#039;&#039;&#039; – Bot Administrator&lt;br /&gt;
* &#039;&#039;&#039;GreenyMage (greenymage)&#039;&#039;&#039; – Graphic Designer&lt;br /&gt;
* Beyond that, the project thrives thanks to the small but loyal community that has formed around it. Whether you&#039;re actively contributing or just hanging out in the server, Ghost truly appreciates every one of you. This project wouldn&#039;t exist without that support.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Fun Facts ===&lt;br /&gt;
&lt;br /&gt;
* Has strong knowledge of geography.&lt;br /&gt;
* Some accent-based word translations happen automatically due to the global &amp;lt;code&amp;gt;Normalize&amp;lt;/code&amp;gt; function; at first, people thought it was intentional.&lt;br /&gt;
* Many &amp;quot;false words&amp;quot; are created by Ghost as inside jokes; examples can be found in the [[Word compendium|Word Compendium]] under [[:Category:Shiritori originals|Shiritori originals]].&lt;br /&gt;
* Admin Kos often calls Ghost by the nickname &amp;quot;Shiritori.&amp;quot;&lt;br /&gt;
* Has developed a recent phobia of {{wc|grape|grapes}}, after October 11th 2025.&lt;br /&gt;
* Favorite piece of digital media: the anime [https://en.wikipedia.org/wiki/Clockwork_Planet &#039;&#039;Clockwork Planet&#039;&#039;].&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
* [https://www.travel.dod.mil/Travel-Transportation-Rates/Dislocation-Allowance/ Dislocation Allowance — Defense Travel Management Office]&lt;br /&gt;
* [https://abcnews.com/US/tropical-storm-lala-forecast-impact-hawaiian-islands-weekend/story?id=135610026 Lala spins out to sea after storm hammered the Hawaiian Islands — ABC News]&lt;br /&gt;
* [https://www.honolulu.gov/mayor/emergency-responses-to-tropical-storm-lala-continue-as-winds-and-heavy-rain-persist/ Emergency responses to Tropical Storm Lala — Office of the Mayor, City and County of Honolulu]&lt;br /&gt;
&lt;br /&gt;
[[Category:Information]]&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=Super-Shiritori&amp;diff=298</id>
		<title>Super-Shiritori</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=Super-Shiritori&amp;diff=298"/>
		<updated>2026-08-29T00:58:22Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Character|name=Super-Shiritori|&lt;br /&gt;
image1=&amp;lt;gallery&amp;gt;Super Shiritori Bot (Discord).png|Main profile picture&lt;br /&gt;
Super-Merritori.png|Holiday profile picture&lt;br /&gt;
Halloween Shiritori PFP.png|Halloween profile picture&lt;br /&gt;
Original Super-Shiritori PFP.webp|Original profile picture&amp;lt;/gallery&amp;gt;&lt;br /&gt;
|aliases=Super Shiritori, Shiritori&lt;br /&gt;
|birthDate=November 22, 2024&lt;br /&gt;
|birthPlace=Washington State, USA (via Discord)&lt;br /&gt;
|gender=Male&lt;br /&gt;
|counterparts=[[Word-Curatori]] (Originally called &amp;quot;Super Shiritori (Test Edition)&amp;quot;)&amp;lt;br&amp;gt;&lt;br /&gt;
[[Vexitori]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Super-Shiritori&#039;&#039;&#039; is the flagship Discord bot of the project, running a word-chain game in which players respond with a word beginning with the final letter of the previous word. Alongside its core game, it supports several related word-based modes, tracks detailed player statistics, and maintains the shared dictionary of over 1.6 million entries. It is one of [[Discord Bots|three separate bots]] that make up the project, running alongside [[Word-Curatori]] and [[Vexitori]].&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
* Multiplayer and solo word-chain gameplay, against other players or AI opponents with distinct personalities&lt;br /&gt;
* A dictionary exceeding 1.6 million entries, drawn from acronyms, user submissions, foreign-language borrowings, constructed languages, and established published dictionaries&lt;br /&gt;
* Additional game modes, including Word Bomb, Wordle, Anagram, and Protori&lt;br /&gt;
* A rarity-based word rolling and trading system&lt;br /&gt;
* Player statistics, leaderboards, and a leveling system with unlockable [[Achievements]] (formerly called titles)&lt;br /&gt;
* Deployable in any Discord server&lt;br /&gt;
* A small number of hidden text-trigger commands functioning as puzzle easter eggs&lt;br /&gt;
&lt;br /&gt;
== Bot Commands ==&lt;br /&gt;
&lt;br /&gt;
=== Multiplayer Shiritori ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/start_shiritori [#channel]&amp;lt;/code&amp;gt; || Starts a multiplayer game in the specified channel. Requires the Manage Messages permission or bot owner status.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/end_shiritori&amp;lt;/code&amp;gt; || Manually ends the current game and displays final statistics.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/invite_ai&amp;lt;/code&amp;gt; || Invites an AI opponent with a randomly assigned personality into the current game.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/murder_ai&amp;lt;/code&amp;gt; || Attempts to remove the current AI opponent from the game.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/leaderboard&amp;lt;/code&amp;gt; || Displays the server&#039;s multiplayer leaderboard by category.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/my_stats&amp;lt;/code&amp;gt; || Displays the player&#039;s personal global multiplayer statistics.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/levels_leaderboard&amp;lt;/code&amp;gt; || Displays the server&#039;s level leaderboard.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/level&amp;lt;/code&amp;gt; || Displays the player&#039;s current level and experience progress.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/restore_games&amp;lt;/code&amp;gt; || Restores active games after a bot restart or shutdown.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/global_stats&amp;lt;/code&amp;gt; || Displays aggregated multiplayer statistics across all servers.&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Multiplayer Shiritori]]&lt;br /&gt;
&lt;br /&gt;
=== Protori ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/start_protori [#channel]&amp;lt;/code&amp;gt; || Starts a Protori game in the specified channel. Requires the Manage Messages permission or bot owner/curator status.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/end_protori&amp;lt;/code&amp;gt; || Manually ends the current Protori game.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/protori_stats&amp;lt;/code&amp;gt; || Displays the player&#039;s Protori statistics, both globally and broken down per server.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/protori_leaderboard&amp;lt;/code&amp;gt; || Displays the Protori leaderboard, server or global.&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Protori]]&lt;br /&gt;
&lt;br /&gt;
=== Solo Shiritori ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/solo_shiritori&amp;lt;/code&amp;gt; || Starts a private solo game against the AI in a dedicated thread.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/solo_stats&amp;lt;/code&amp;gt; || Displays the player&#039;s solo statistics.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/solo_leaderboard&amp;lt;/code&amp;gt; || Displays the global solo leaderboard.&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Solo Shiritori]]&lt;br /&gt;
&lt;br /&gt;
=== Wordle ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/wordle&amp;lt;/code&amp;gt; || Starts a private Wordle game.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/wordle_leaderboard&amp;lt;/code&amp;gt; || Displays Wordle win streaks by word length and mode.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/wordle_stats&amp;lt;/code&amp;gt; || Displays the player&#039;s personal Wordle win streaks by mode.&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Wordle]]&lt;br /&gt;
&lt;br /&gt;
=== Word Bomb ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/wordbomb&amp;lt;/code&amp;gt; || Starts a Word Bomb game.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/wordbomb_leaderboard&amp;lt;/code&amp;gt; || Displays the server&#039;s Word Bomb leaderboard.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/wordbomb_stats&amp;lt;/code&amp;gt; || Displays the player&#039;s personal Word Bomb statistics.&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Wordbomb]]&lt;br /&gt;
&lt;br /&gt;
=== Anagram ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/anagram&amp;lt;/code&amp;gt; || Starts a private Anagram game.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/anagram_stats&amp;lt;/code&amp;gt; || Displays the player&#039;s personal Anagram statistics.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/anagram_leaderboard&amp;lt;/code&amp;gt; || Displays the server&#039;s Anagram leaderboard.&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Anagram]]&lt;br /&gt;
&lt;br /&gt;
=== Dictionary and Words ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/dictionaries&amp;lt;/code&amp;gt; || Checks the player&#039;s progress against specific themed word lists.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/check&amp;lt;/code&amp;gt; || Checks whether one or more words are in the dictionary.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/characters&amp;lt;/code&amp;gt; || Displays the character count of the given word or words.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/solve&amp;lt;/code&amp;gt; || Searches for words matching a given prompt, length, or other criteria.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/suggest&amp;lt;/code&amp;gt; || Suggests a word for addition to the dictionary, or proposes removal of an existing entry.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/define&amp;lt;/code&amp;gt; || Returns an AI-generated definition of a word.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/word_collection&amp;lt;/code&amp;gt; || Displays a player&#039;s collected words.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/random_word&amp;lt;/code&amp;gt; || Returns a random word that has not yet been played.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/wordhunt&amp;lt;/code&amp;gt; || A recurring personal challenge, refreshing every 12 hours, that prompts the player to find dictionary words they have not yet used.&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Dictionary Information]]&lt;br /&gt;
&lt;br /&gt;
=== Casino and RNG ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/roll&amp;lt;/code&amp;gt; || Rolls for a random word, weighted by rarity.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/set_casino&amp;lt;/code&amp;gt; || Sets or removes the channels where &amp;lt;code&amp;gt;/roll&amp;lt;/code&amp;gt; may be used.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/rng_draw&amp;lt;/code&amp;gt; || Spins for a chance at rarer rewards.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/rng_stats&amp;lt;/code&amp;gt; || Displays the player&#039;s personal rolling statistics.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/rng_global&amp;lt;/code&amp;gt; || Displays global rolling statistics.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/rng_set_luck&amp;lt;/code&amp;gt; || Sets the player&#039;s luck multiplier for rolls.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/word_trade&amp;lt;/code&amp;gt; || Trades a word with another player.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Achievements ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/achievements&amp;lt;/code&amp;gt; || Displays the player&#039;s unlocked and obtainable achievements. Public/Private visibility choice.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/set_achievement&amp;lt;/code&amp;gt; || Sets or clears the player&#039;s displayed achievement from among those unlocked.&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Achievements]]&lt;br /&gt;
&lt;br /&gt;
=== Configuration and Utility ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/toggle_corrections&amp;lt;/code&amp;gt; || Toggles whether invalid words are deleted and warned about, or only marked with a reaction. Requires the Manage Messages permission.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/config_view&amp;lt;/code&amp;gt; || Displays the server&#039;s configuration for AI event logging and word suggestion notifications.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/server&amp;lt;/code&amp;gt; || Returns an invite link to the official support server.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/wiki&amp;lt;/code&amp;gt; || Returns a link to this wiki.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/curator_form&amp;lt;/code&amp;gt; || Returns a link to the Word Curator application form.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/help&amp;lt;/code&amp;gt; || Displays a list of all commands.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Quick Chat Commands ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!i&amp;lt;/code&amp;gt; || An expanded version of &amp;lt;code&amp;gt;/check&amp;lt;/code&amp;gt; with more detail.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!level&amp;lt;/code&amp;gt; || Quick view of the player&#039;s level and experience progress.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!achieve&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;!achievement&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;!achievements&amp;lt;/code&amp;gt; || Opens the player&#039;s list of unlocked and obtainable achievements. All three aliases work identically.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!check&amp;lt;/code&amp;gt; || Curator only. Checks the status of pending word suggestions and removals.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!status&amp;lt;/code&amp;gt; || Displays the current game&#039;s status, including words played, average word length, and the next required letter.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!longest&amp;lt;/code&amp;gt; || Displays the top five longest words played in the current game.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!rng &amp;lt;word&amp;gt;&amp;lt;/code&amp;gt; || Checks a word&#039;s rarity and global ownership.&lt;br /&gt;
|}&lt;br /&gt;
A small number of additional text-trigger commands exist as hidden puzzle easter eggs. Their exact triggers are not documented publicly here. Separately, a set of documented explainer commands — &amp;lt;code&amp;gt;!hyphens&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;!neoses&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;!aisource&amp;lt;/code&amp;gt;, and their aliases — answer common questions about dictionary rules; see [[Dictionary Information]].&lt;br /&gt;
&lt;br /&gt;
== AI Opponents ==&lt;br /&gt;
Multiplayer games may include an AI opponent, added either randomly through &amp;lt;code&amp;gt;/invite_ai&amp;lt;/code&amp;gt; or by summoning a specific personality with a text command. Each of the 19 personalities follows its own word-selection logic — NOOB favors short, simple words, PRO requires words of at least twelve letters, MIMIC attempts to answer with an anagram of the player&#039;s own last word, and so on. Two further AI types, Sniper and Assassin, layer additional mechanics — one-shot dramatic word plays and a hijack-and-silence risk/reward exchange, respectively — on top of the base system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[AI Bots]]&lt;br /&gt;
&lt;br /&gt;
== Game Modes ==&lt;br /&gt;
&lt;br /&gt;
=== Multiplayer Shiritori ===&lt;br /&gt;
The core game mode. Players take turns submitting words in a shared channel, each beginning with the final letter of the previous word. Repeated words, invalid characters, and words that do not follow the required letter all end a player&#039;s turn or the game, depending on server configuration.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Multiplayer Shiritori]]&lt;br /&gt;
&lt;br /&gt;
=== Protori ===&lt;br /&gt;
A scoring-based variant of multiplayer Shiritori. Rather than simply continuing the chain, every accepted word earns points from a flat per-letter point table, weighted by how rare each letter is in the dictionary rather than a standard Scrabble-style tile distribution; a word&#039;s base score is just the sum of its letters&#039; values. Continuing more deeply into the previous word than just its final letter — matching several trailing characters in a row — earns a chain bonus of roughly 1% of the word&#039;s base score per matched character, up to about +79% for a very deep match. Playing a word that has already been used ends the game immediately and costs the player a 250-point penalty.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Protori]]&lt;br /&gt;
&lt;br /&gt;
=== Solo Shiritori ===&lt;br /&gt;
A private word-chain match played against an adaptive AI opponent in a dedicated thread. The AI begins as ROOKIE and its behavior shifts over time based on the player&#039;s performance and random chance.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Solo Shiritori]]&lt;br /&gt;
&lt;br /&gt;
=== Word Bomb ===&lt;br /&gt;
An elimination game for up to 16 players, each starting with three lives. On each turn, a player must submit a valid dictionary word containing an assigned prompt string before a timer runs out; failing to do so costs a life. Games started through &amp;lt;code&amp;gt;/wordbomb&amp;lt;/code&amp;gt; are configurable across several options, including bomb speed, starting difficulty (one of sixteen named buckets, from Tranquil down to the single-word Singularity tier), prompt length, allowed special characters, and an optional themed category filter.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Wordbomb]]&lt;br /&gt;
&lt;br /&gt;
=== Wordle ===&lt;br /&gt;
A private word-guessing game with two modes: Standardized, which applies stricter word validity rules, and Full Dictionary, which allows any word in the bot&#039;s full dictionary. Players choose a target word length and may optionally allow hyphenated words as valid answers. Win streaks are tracked separately for each word length and mode.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Wordle]]&lt;br /&gt;
&lt;br /&gt;
=== Anagram ===&lt;br /&gt;
A private single-player game in which the bot selects a base word and the player attempts to find as many valid words as possible using only the letters available in it.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Anagram]]&lt;br /&gt;
&lt;br /&gt;
=== Dictionary Tools ===&lt;br /&gt;
Two related but separate features track a player&#039;s progress through the dictionary. &amp;lt;code&amp;gt;/dictionaries&amp;lt;/code&amp;gt; reports progress against specific themed word lists. &amp;lt;code&amp;gt;/wordhunt&amp;lt;/code&amp;gt; is a recurring personal challenge, refreshing every 12 hours, that surfaces dictionary words the player has not yet used.&lt;br /&gt;
&lt;br /&gt;
== Fool&#039;s Mode ==&lt;br /&gt;
A special, occasional state, traditionally run around April Fools&#039; Day, in which the bot&#039;s word validation is deliberately loosened for comedic effect — words with no spaces are accepted as playable regardless of dictionary membership, and several commands (&amp;lt;code&amp;gt;!i&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;!info&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/check&amp;lt;/code&amp;gt;, the end-of-game summary) start returning deliberately unreliable or nonsensical output. It is toggled on and off manually by the bot&#039;s operator rather than being scheduled automatically by the code itself.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Main article:&#039;&#039; [[Fool&#039;s Mode]]&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&#039;&#039;Super-Shiritori&#039;&#039; has been developed and maintained by Ghost (no_where.ghost_002) since November 22, 2024, with administrative and moderation support from Kos (kos256) and GreenyMage (greenymage).&lt;br /&gt;
&lt;br /&gt;
The bot&#039;s dictionary began as a small curated word list originally compiled by OMG, creator of the Roblox game &#039;&#039;Word Bomb&#039;&#039;. It later expanded through a bulk import of 320,000 words, followed by ongoing contributions from users, dictionary scraping from sources such as Merriam-Webster and Oxford, and the inclusion of acronyms, constructed languages, and foreign-language borrowings. The dictionary now exceeds 1.6 million entries. There is no anti-cheat system in place; players are free to consult external dictionaries or search engines, though playing without assistance is encouraged.&lt;br /&gt;
&lt;br /&gt;
The bot runs on hardware maintained directly by its developer, [[Ghost (Owner)|Ghost]], rather than on any cloud hosting service. It went offline on April 27, 2026, at the start of a military [https://en.wikipedia.org/wiki/Permanent_change_of_station Permanent Change of Station] ({{wc|PCS}}) relocation that took Ghost from South Korea through Japan, Alaska, and Los Angeles, California, before he finally settled in Hawaii on June 8, 2026. A subsequent housing shortage there delayed the bot&#039;s return well past initial estimates; it came back online on August 10, 2026, after roughly three and a half months offline — the longest outage in the bot&#039;s history. Household expenses connected to the move, including hosting costs, were covered as part of U.S. government {{wc|PCS}} support.&lt;br /&gt;
&lt;br /&gt;
Since coming back online, an automatic restart-on-crash mechanism has been added, intended to make genuine 24/7 uptime realistic going forward; as of this writing, expected downtime is limited to maintenance, a crash severe enough to take the host machine itself down, or a power outage.&lt;br /&gt;
&lt;br /&gt;
Two further features followed directly from that same reality. A planned restart or shutdown can now carry a custom message to every active game instead of one of two generic canned notices, so players get an accurate heads-up — an estimated outage length, for example — rather than a vague &amp;quot;update&amp;quot; notice. For the opposite case, a total, zero-warning loss of power gives the bot no chance to warn anyone before going offline at all; there&#039;s no way around that physically. What it can do instead is explain itself retroactively: reconnecting after any outage it wasn&#039;t able to shut down cleanly for now posts a message acknowledging the unplanned downtime, noting that unannounced power loss is a real and recurring possibility given the host machine&#039;s location, and confirming that any interrupted games have already been restored.&lt;br /&gt;
&lt;br /&gt;
== Official Design ==&lt;br /&gt;
* The name is always spelled &amp;quot;Super-Shiritori&amp;quot;.&lt;br /&gt;
* The official color is hex #F91000, informally named &amp;quot;Shiritorier&#039;s-Orange&amp;quot; as of December 1st.&lt;br /&gt;
* The logo is a mahjong-style tile featuring the Japanese characters ボ (&amp;quot;bo&amp;quot;) and ツ (&amp;quot;tsu&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
* [https://discord.com/oauth2/authorize?client_id=1309504109308674089 Invite the bot to a server]&lt;br /&gt;
* [https://discord.gg/WahVXSkA7H Support server]&lt;br /&gt;
* [https://forms.gle/kUGHkSsxMH43iugb8 Word Curator Assessment Form]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Discord Bots]]&lt;br /&gt;
* [[AI Bots]]&lt;br /&gt;
* [[Multiplayer Shiritori]]&lt;br /&gt;
* [[Solo Shiritori]]&lt;br /&gt;
* [[Protori]]&lt;br /&gt;
* [[Anagram]]&lt;br /&gt;
* [[Wordbomb]]&lt;br /&gt;
* [[Wordle]]&lt;br /&gt;
* [[Achievements]]&lt;br /&gt;
* [[Fool&#039;s Mode]]&lt;br /&gt;
* [[Manual-Tori]]&lt;br /&gt;
* [[Dictionary Information]]&lt;br /&gt;
* [[Word-Curatori]]&lt;br /&gt;
* [[Vexitori]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Information]]&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=Vexitori&amp;diff=367</id>
		<title>Vexitori</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=Vexitori&amp;diff=367"/>
		<updated>2026-08-29T00:56:38Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Character|name=Vexitori|&lt;br /&gt;
image1=Vexitori.png|Profile picture&lt;br /&gt;
|birthDate=August 12, 2026&lt;br /&gt;
|birthPlace=Hawaii, USA (via Discord)&lt;br /&gt;
|gender=Male&lt;br /&gt;
|counterparts=[[Super-Shiritori]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Word-Curatori]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vexitori&#039;&#039;&#039; is a Discord bot dedicated to running [[Vexillopedia]], a continuous, automatic flag-guessing game (vexillology, the study of flags). It runs as a fully independent bot process, one of [[Discord Bots|three separate bots]] alongside [[Super-Shiritori]] and [[Word-Curatori]] — all three operate in the same Discord server, but Vexitori&#039;s flag game has no dependency on Shiritori, Anagram, Word Bomb, or any other game&#039;s state.&lt;br /&gt;
&lt;br /&gt;
== Gameplay ==&lt;br /&gt;
Vexitori runs a continuous loop in a dedicated game channel: as soon as one round ends, a short pause is followed by the next flag spawning automatically, with no player action required to start a round.&lt;br /&gt;
&lt;br /&gt;
Each round posts an embed showing the flag&#039;s &#039;&#039;&#039;Location&#039;&#039;&#039;, &#039;&#039;&#039;Type&#039;&#039;&#039;, and &#039;&#039;&#039;Time Era&#039;&#039;&#039; alongside the flag image itself — but not its name. Players guess by clicking a &amp;quot;Click here to Guess?&amp;quot; button, which opens a text-entry popup; a submitted guess is checked against the flag&#039;s full list of accepted names (a flag can have more than one correct answer — alternate names, spellings, or former names all count).&lt;br /&gt;
&lt;br /&gt;
The first correct guess starts a &#039;&#039;&#039;15-second&#039;&#039;&#039; countdown before the round locks; anyone who guesses correctly before it ends is recorded as a winner, so a round is rarely a race to be first so much as a race to answer before the window closes. If nobody interacts with a round at all for &#039;&#039;&#039;5 minutes&#039;&#039;&#039;, it ends early on its own rather than waiting indefinitely.&lt;br /&gt;
&lt;br /&gt;
When a round ends, results are posted showing every winner, the exact name they typed, whether it was their first time correctly answering that flag with that specific name (marked 🆕) or a repeat, and their current win streak. Every &#039;&#039;&#039;50th consecutive round won&#039;&#039;&#039; by the same player triggers a bonus: a &amp;quot;Special Flag&amp;quot; spawns exclusively for that player for 20 seconds, drawn from a separate pool of flags reserved only for this purpose.&lt;br /&gt;
&lt;br /&gt;
A separate channel supports free-form regex search: typing a pattern directly into it (no command prefix) searches every flag&#039;s accepted names for a match and returns a paginated result list.&lt;br /&gt;
&lt;br /&gt;
== Commands ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/vexillum_information&amp;lt;/code&amp;gt; || Looks up a specific flag by name or ID, or shows overall database totals if no flag is given.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/vexillolist&amp;lt;/code&amp;gt; || A paginated, filterable list of every flag in the database, showing personal completion progress.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/vex_add&amp;lt;/code&amp;gt; || Curator-only. Adds a new flag (image, location, type, time era, and one or more accepted names) to the database.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/vex_edit&amp;lt;/code&amp;gt; || Curator-only. Edits an existing flag&#039;s image, names, location, type, time era, or displayed (&amp;quot;dominant&amp;quot;) name.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;/vex_delete&amp;lt;/code&amp;gt; || Curator-only. Removes a flag from the database. Deletion is logged with an undo control.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!vexrgb&amp;lt;/code&amp;gt; || Curator-only. Randomizes the embed accent color of every flag in the database.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!id&amp;lt;/code&amp;gt; || Restricted to specific individuals. Lists all flag IDs currently in use, or renumbers a flag&#039;s ID.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Flag Pools ==&lt;br /&gt;
Flags are identified by a numeric ID. Ordinary rounds are drawn only from flags with a &#039;&#039;&#039;positive&#039;&#039;&#039; ID, and the game avoids repeating any flag that appeared in roughly the last 25 rounds. Flags with a &#039;&#039;&#039;negative&#039;&#039;&#039; ID are held back from normal rotation entirely and only ever appear as the 50-win-streak Special Flag reward.&lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
Vexitori runs as its own separate Discord bot process — a distinct login token and OS process from both [[Super-Shiritori]] and [[Word-Curatori]] — rather than as a module inside the main game bot. This was possible because the flag game touches none of Super-Shiritori&#039;s shared game state; its only real dependency, the flag database itself, is self-contained within Vexitori.&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
Vexillopedia (the flag database Vexitori runs) is still an actively developed, in-testing project, maintained separately from Super-Shiritori itself. As of a public announcement on August 8, 2026, its maintainer stated he is currently hospitalized, for reasons he has chosen not to disclose publicly, and that new flag submissions are paused with no set timeline until he returns.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Discord Bots]]&lt;br /&gt;
* [[Super-Shiritori]]&lt;br /&gt;
* [[Word-Curatori]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Information]]&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=Solo_Shiritori&amp;diff=289</id>
		<title>Solo Shiritori</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=Solo_Shiritori&amp;diff=289"/>
		<updated>2026-08-29T00:55:30Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Solo Shiritori =&lt;br /&gt;
&lt;br /&gt;
Solo Shiritori is a private word-chain match played against an AI opponent in a dedicated thread.&lt;br /&gt;
&lt;br /&gt;
== Starting a Game ==&lt;br /&gt;
A game is created with &amp;lt;code&amp;gt;/solo_shiritori&amp;lt;/code&amp;gt;. Only one solo game may be active per player at a time (&amp;quot;You already have an active solo game!&amp;quot;), though a solo game can run alongside an active multiplayer game. The bot creates a private thread, posts a starting word, and begins the AI at the ROOKIE personality.&lt;br /&gt;
&lt;br /&gt;
The thread&#039;s rules message differs slightly in wording from multiplayer: &amp;quot;Allowed: Regular words, hyphenated words, acronyms, city names. Not Allowed: Personal names (unless with meaning), or words with non-letter characters.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Rules ==&lt;br /&gt;
# Each word must start with the final letter of the previous word.&lt;br /&gt;
# A word cannot repeat one already used in that session.&lt;br /&gt;
# A word must be found in the dictionary and contain only letters, hyphens, or apostrophes.&lt;br /&gt;
# Any invalid submission, whether a wrong starting letter, a repeat, or a word not in the dictionary, ends the game immediately; there is no retry within a turn.&lt;br /&gt;
&lt;br /&gt;
Valid player words receive a ✅ reaction; invalid ones receive ❌. A message that starts with &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt;, with any of the multiplayer AI-summon commands (such as &amp;lt;code&amp;gt;!noob&amp;lt;/code&amp;gt;), is empty, or carries an attachment or embed instead of text is silently ignored rather than treated as a move — it neither counts as a word nor ends the game.&lt;br /&gt;
&lt;br /&gt;
== The AI Opponent ==&lt;br /&gt;
The AI begins as ROOKIE. Its personality can change between turns; the bot tracks the length of the player&#039;s most recent words (up to the last 30) together with the number of rounds played to decide whether and how to adjust. This AI reuses the exact same underlying word-selection logic and spawn-probability table as [[Multiplayer Shiritori]]&#039;s AI opponents (documented in full on [[AI Bots]]), a shared component rather than a separate implementation — see [[Ghost (Owner)#Design Philosophy|Ghost&#039;s Design Philosophy]] for how this fits into a broader analogy Ghost uses for the relationship between the bot&#039;s game modes.&lt;br /&gt;
&lt;br /&gt;
A game ends in the AI&#039;s favor if the player submits an invalid word. It ends in the player&#039;s favor if the AI cannot find any valid word starting with the required letter: &amp;quot;AI ({personality}) couldn&#039;t find a valid word starting with &#039;{letter}&#039;. You win!&amp;quot; In an extremely rare case, roughly 1 in 27,963,028, the AI&#039;s selected word fails to actually start with the required letter; this is treated as an AI failure, ends the game, and unlocks the &amp;quot;Man Beats Machine&amp;quot; [[Achievements|achievement]] the first time it happens to a player.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VOWELLESS&#039;&#039;&#039; is a specific exception to the &amp;quot;can&#039;t find a word&amp;quot; ending above. Since a word beginning with a vowel can never itself be vowel-free, VOWELLESS is unable to move on a genuinely large share of turns — by design, it is never allowed to fall back to a word containing a vowel just to keep the game going (see [[AI Bots#History|AI Bots]] for the full mechanic). Rather than ending the game every time this happens, which given how often it comes up would have made VOWELLESS nearly unplayable in Solo Shiritori, the bot instead announces that VOWELLESS &amp;quot;leaves&amp;quot; and is immediately replaced by a freshly-rolled personality (never VOWELLESS or LARP again) that takes the same turn in its place. The game only actually ends in the player&#039;s favor if that &#039;&#039;replacement&#039;&#039; personality also can&#039;t find a word — an outcome only slightly less rare than any other personality&#039;s ordinary failure.&lt;br /&gt;
&lt;br /&gt;
== Ending a Game ==&lt;br /&gt;
A session also ends after inactivity: if the player goes quiet, the bot posts a 30-second warning (&amp;quot;30 seconds left! Type a word or the game will end due to inactivity&amp;quot;) before the 5-minute timeout actually expires, rather than the game simply vanishing without notice.&lt;br /&gt;
&lt;br /&gt;
When a game ends for any reason, the bot posts a summary showing the number of turns played and the percentage of the dictionary used so far. This turn count covers the &#039;&#039;entire match&#039;&#039; — every word played by both the player and the AI, including the starting word — and is a different figure from the player-specific &amp;quot;rounds played&amp;quot; statistic tracked by &amp;lt;code&amp;gt;/solo_stats&amp;lt;/code&amp;gt;, which only counts the player&#039;s own successful turns.&lt;br /&gt;
&lt;br /&gt;
The thread is deleted a flat 3 minutes after the game ends, though the message shown to players describes it more loosely as &amp;quot;3-5 minutes&amp;quot; to leave some buffer.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;History:&#039;&#039; if a game&#039;s private thread vanished mid-game for any reason (manually deleted, for instance), every subsequent message the bot tried to post into it — including the ones meant to report that very error back to the player — would itself fail the same way, cascading into an unhandled crash that took down the entire &amp;lt;code&amp;gt;/solo_shiritori&amp;lt;/code&amp;gt; command rather than just quietly ending that one game. Every message the bot posts into a solo game&#039;s thread is now sent through a helper that catches this specific failure and ends the game cleanly instead.&lt;br /&gt;
&lt;br /&gt;
== Statistics ==&lt;br /&gt;
Solo Shiritori results are recorded per player: rounds played, hyphens used, apostrophes used, unique words played, and longest word. The player also earns experience toward their level for each valid word played. These stats can be viewed with &amp;lt;code&amp;gt;/solo_stats&amp;lt;/code&amp;gt; and compared with &amp;lt;code&amp;gt;/solo_leaderboard&amp;lt;/code&amp;gt;, both of which offer a Public/Private visibility choice; the leaderboard can additionally be sorted by Longest Word, Turns Played, or Dictionary Completion.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Super-Shiritori]]&lt;br /&gt;
* [[Multiplayer Shiritori]]&lt;br /&gt;
* [[AI Bots]]&lt;br /&gt;
* [[Achievements]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Information]]&lt;br /&gt;
[[Category:Games(bot)]]&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=MediaWiki:Common.css&amp;diff=4195</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=MediaWiki:Common.css&amp;diff=4195"/>
		<updated>2026-08-29T00:54:30Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.mbox {&lt;br /&gt;
    background-color: rgb(230, 230, 230);&lt;br /&gt;
    border-color: rgb(230, 230, 230);&lt;br /&gt;
    border-width: 0.5;&lt;br /&gt;
    border-left-color: rgb(230, 230, 230);&lt;br /&gt;
    border-radius: 0.1;&lt;br /&gt;
    font-size: 11;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Internal links (use .internal first) */&lt;br /&gt;
a.internal:link,&lt;br /&gt;
a.internal:visited {&lt;br /&gt;
    color: #de93db;   /* pink */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Explicit safeguard: only links on da wiki */&lt;br /&gt;
.mw-parser-output a[href^=&amp;quot;https://supershiritori.fandom.com&amp;quot;]:link,&lt;br /&gt;
.mw-parser-output a[href^=&amp;quot;https://supershiritori.fandom.com&amp;quot;]:visited {&lt;br /&gt;
    color: #de93db;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* External + interwiki links */&lt;br /&gt;
a.external:link,&lt;br /&gt;
a.external:visited,&lt;br /&gt;
a.extiw:link,&lt;br /&gt;
a.extiw:visited {&lt;br /&gt;
    color: #7d3cff;   /* violet */&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    text-decoration: underline dotted;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Fallback for any remaining http links (safety net) */&lt;br /&gt;
.mw-parser-output a[href^=&amp;quot;http&amp;quot;]:link,&lt;br /&gt;
.mw-parser-output a[href^=&amp;quot;http&amp;quot;]:visited {&lt;br /&gt;
    color: #7d3cff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Redlinks */&lt;br /&gt;
a.new,&lt;br /&gt;
.mw-parser-output a.new {&lt;br /&gt;
    color: #ff0000;   /* red */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* FORCE BREAK GIANT ARTICLE TITLES */&lt;br /&gt;
.page-header__title-wrapper,&lt;br /&gt;
.page-header__main,&lt;br /&gt;
.page-header__title,&lt;br /&gt;
h1.page-header__title {&lt;br /&gt;
    display: block !important;&lt;br /&gt;
    min-width: 0 !important;&lt;br /&gt;
    max-width: 100% !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    word-break: break-all !important;&lt;br /&gt;
    overflow-wrap: break-word !important;&lt;br /&gt;
    white-space: normal !important;&lt;br /&gt;
    flex: 1 1 auto !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* FORCE BREAK LONG WORDS IN CATEGORY LISTINGS */&lt;br /&gt;
.category-page__member-link {&lt;br /&gt;
    display: block !important;&lt;br /&gt;
    min-width: 0 !important;&lt;br /&gt;
    max-width: 100% !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    word-break: break-all !important;&lt;br /&gt;
    overflow-wrap: break-word !important;&lt;br /&gt;
    white-space: normal !important;&lt;br /&gt;
    flex: 1 1 auto !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* FORCE BREAK LONG WORDS IN THE COMMENTS SECTION */&lt;br /&gt;
#articleComments,&lt;br /&gt;
#articleComments * {&lt;br /&gt;
    min-width: 0 !important;&lt;br /&gt;
    overflow-wrap: break-word !important;&lt;br /&gt;
    word-break: break-all !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=Dictionary_Information&amp;diff=89</id>
		<title>Dictionary Information</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=Dictionary_Information&amp;diff=89"/>
		<updated>2026-08-29T00:53:22Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Dictionary Information =&lt;br /&gt;
&lt;br /&gt;
The dictionary is the shared word list every game mode plays against. As of this writing it holds approximately &#039;&#039;&#039;1.67 million entries&#039;&#039;&#039;, stored one word per line in the bot&#039;s main dictionary file. This page documents how words enter and leave it, how non-standard input gets converted into a valid entry, and the standards curators apply when reviewing a suggestion.&lt;br /&gt;
&lt;br /&gt;
There is also an &#039;&#039;&#039;ideological vision&#039;&#039;&#039; of dictionary criteria known as &#039;&#039;&#039;Super-Shiritoriism&#039;&#039;&#039; — see the [https://anarchy.polcompball.me/Super-Shiritoriism#Shiritorier&#039;s_Thought full write-up] on the external wiki if you&#039;d like to read it, or [[Super-Shiritoriism|click here]] for the page on this wiki. That framing is stylized and in-universe, not a technical reference; this page documents the same underlying mechanisms in plain, verified terms instead.&lt;br /&gt;
&lt;br /&gt;
For the full set of themed word lists that supplement the main dictionary (colors, countries, creatures, mythology, and dozens more), see [[List of Dictionaries]].&lt;br /&gt;
&lt;br /&gt;
== What Counts as a Word? ==&lt;br /&gt;
Word curators work from a deliberately broad working definition of &amp;quot;word&amp;quot;:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot;A single distinct meaningful element of speech or writing, used with others (or sometimes alone) to form a sentence and typically shown with a space on either side when written or printed.&amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
In practice, this covers:&lt;br /&gt;
* Acronyms and initialisms (e.g. &amp;lt;code&amp;gt;NASA&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;FBI&amp;lt;/code&amp;gt;).&lt;br /&gt;
* Proper nouns with cultural or historical significance (e.g. &amp;lt;code&amp;gt;Napoleon&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;New-York&amp;lt;/code&amp;gt;).&lt;br /&gt;
* Taxonomy names and classification numbers, if commonly used.&lt;br /&gt;
* Internet slang, emoticons, and expressive strings (e.g. &amp;lt;code&amp;gt;UwU&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&#039;-w-&#039;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;awa&amp;lt;/code&amp;gt;).&lt;br /&gt;
* Written forms of numbers and numeral-based media terms (e.g. &amp;lt;code&amp;gt;one-percent&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;480p&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;four-eighty-p&amp;lt;/code&amp;gt;).&lt;br /&gt;
* Foreign loanwords that have entered English usage (e.g. &amp;lt;code&amp;gt;sushi&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;déjà-vu&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;siesta&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Special case:&#039;&#039;&#039; a song title is only accepted if the song itself can be found on YouTube.&lt;br /&gt;
&lt;br /&gt;
== Suggesting Words ==&lt;br /&gt;
Players propose new words with &amp;lt;code&amp;gt;/suggest&amp;lt;/code&amp;gt;. Submissions are checked against the live dictionary before anything is posted: words already present are reported back separately and excluded, and a submission must contain between 1 and 1,001 new, valid words after that filtering (a request that resolves to zero new words is rejected outright). Word removal requests go through the same command and the same limits, routed to a separate review queue.&lt;br /&gt;
&lt;br /&gt;
Every batch of new words is posted to a curator review channel (rejections/removals to a second, dedicated channel) with four options available to word curators:&lt;br /&gt;
* &#039;&#039;&#039;Accept&#039;&#039;&#039; — writes the words directly into a staging area, from which they merge into the live dictionary automatically about every 2 minutes.&lt;br /&gt;
* &#039;&#039;&#039;Review Manually&#039;&#039;&#039; — sends the curator a file of the submitted words by DM for closer inspection; the curator corrects the list by hand and applies it themselves rather than accepting it as-is.&lt;br /&gt;
* &#039;&#039;&#039;Reject&#039;&#039;&#039; — declines the submission outright.&lt;br /&gt;
* &#039;&#039;&#039;Cancel&#039;&#039;&#039; — available only to the original submitter, to withdraw their own pending request (for example, to fix a mistake) before a curator acts on it.&lt;br /&gt;
&lt;br /&gt;
A user can be barred from submitting suggestions entirely; attempting &amp;lt;code&amp;gt;/suggest&amp;lt;/code&amp;gt; while banned returns a rejection message instead of posting anything for review.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Status:&#039;&#039; as of a public announcement on August 8, 2026, one of the curators involved in processing suggestions stated he is currently hospitalized (reasons undisclosed) and unable to work through the backlog, so newly suggested words may sit unreviewed longer than usual until he returns, with no set timeline given.&lt;br /&gt;
&lt;br /&gt;
== Normalization (Dictionary Content) ==&lt;br /&gt;
The dictionary only stores words made up of the Latin letters &#039;&#039;&#039;A–Z&#039;&#039;&#039;, the apostrophe, and the hyphen. Loanwords and other non-standard input are accommodated into that form following ordinary standard-English romanization: a borrowed word keeps its accepted English spelling, with diacritics simply dropped rather than substituted for anything else. For example: &amp;lt;code&amp;gt;café&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;cafe&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;résumé&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;resume&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;touché&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;touche&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;façade&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;facade&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;jalapeño&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;jalapeno&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;über&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;uber&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Numerals are not permitted in written form at all; a number must be spelled out in words, joined by hyphens rather than spaces (see [[#Hyper-Hyphenation|Hyper-Hyphenation]] below) to form a single valid entry — for example, &amp;lt;code&amp;gt;1345&amp;lt;/code&amp;gt; is only valid as &amp;lt;code&amp;gt;one-thousand-three-hundred-forty-five&amp;lt;/code&amp;gt;. See [[#Grammar and Form|Grammar and Form]] below for how a number is chosen to be spelled once it&#039;s accepted.&lt;br /&gt;
&lt;br /&gt;
This is the &#039;&#039;&#039;editorial&#039;&#039;&#039; convention curators apply to decide what a word is actually stored as. It&#039;s a separate matter from how the bot&#039;s live gameplay engine converts a player&#039;s typed input into a matching key while a game is in progress — that mechanism follows different, code-defined rules of its own (including some that don&#039;t simply drop diacritics the way the convention above does) and is documented on its own page: [[Word Normalization]].&lt;br /&gt;
&lt;br /&gt;
== Curator Guidelines ==&lt;br /&gt;
The rules below are the standards word curators apply when reviewing a suggestion. None of them are enforced mechanically by the bot at submission time — accepting a word as a legitimate entry is a human judgment call curators make against these standards.&lt;br /&gt;
&lt;br /&gt;
=== Formatting ===&lt;br /&gt;
* Diacritics are accommodated by dropping them, per standard English loanword convention (see [[#Normalization (Dictionary Content)|Normalization]] above) — e.g. &amp;lt;code&amp;gt;jalapeño&amp;lt;/code&amp;gt; is stored as &amp;lt;code&amp;gt;jalapeno&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Acronyms and abbreviations may be added alongside their long form, joined into a single hyphenated entry (e.g. &amp;lt;code&amp;gt;png&amp;lt;/code&amp;gt; alongside &amp;lt;code&amp;gt;papua-new-guinea&amp;lt;/code&amp;gt;).&lt;br /&gt;
* Phrasal words allow each individual word of the phrase to be suggested separately as its own entry (e.g. &#039;&#039;molotov cocktail&#039;&#039; allows both &amp;lt;code&amp;gt;molotov&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;cocktail&amp;lt;/code&amp;gt; individually), except where the phrase is a non-English proper noun, or a proper noun sourced only from user-generated content.&lt;br /&gt;
* Nouns, verbs, and (where attested) adjectives may be suggested together with their inflected forms: most nouns take &amp;lt;code&amp;gt;-s&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;stove&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;stoves&amp;lt;/code&amp;gt;); verbs take &amp;lt;code&amp;gt;-ed&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;-s&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;-ing&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;judge&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;judged&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;judges&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;judging&amp;lt;/code&amp;gt;); adjectives take &amp;lt;code&amp;gt;-er&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;-est&amp;lt;/code&amp;gt; where attested (&amp;lt;code&amp;gt;silly&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;sillier&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;silliest&amp;lt;/code&amp;gt;). A proper noun may fit any of these categories, or function as its own part of speech.&lt;br /&gt;
* A leading or trailing hyphen on a submitted word is ignored rather than treated as part of the word.&lt;br /&gt;
* An entry may not exceed &#039;&#039;&#039;450 characters&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Grammar and Form ===&lt;br /&gt;
* &#039;&#039;&#039;Possessives&#039;&#039;&#039; follow standard English rules: a word already ending in &#039;&#039;&#039;s&#039;&#039;&#039; takes only a trailing apostrophe (e.g. &amp;lt;code&amp;gt;boss&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;boss&#039;&amp;lt;/code&amp;gt;); any other word takes &amp;lt;code&amp;gt;&#039;s&amp;lt;/code&amp;gt; (e.g. &amp;lt;code&amp;gt;teacher&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;teacher&#039;s&amp;lt;/code&amp;gt;). &#039;&#039;In practice,&#039;&#039; this rule is not applied to possessive forms of song titles, even though nothing in the rule itself excludes them — a song title is a proper noun like any other and would qualify under the same standard. This gap traces back to a specific misreading of what counts as a &amp;quot;proper noun phrase&amp;quot; by the [[Discord Bot]]&#039;s owner, [[Ghost (Owner)|Ghost]]; it has not been formally corrected, so treat possessive song titles as unsupported in current practice regardless of what the rule as written would suggest.&lt;br /&gt;
* &#039;&#039;&#039;Plurality&#039;&#039;&#039; must match how the word is actually used, not be added reflexively.&lt;br /&gt;
* &#039;&#039;&#039;Spelling&#039;&#039;&#039; should follow standard or otherwise widely accepted forms.&lt;br /&gt;
* &#039;&#039;&#039;Numbers&#039;&#039;&#039; are spelled the way they&#039;re actually pronounced, not by full place-value expansion — e.g. &amp;lt;code&amp;gt;480p&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;four-eighty-p&amp;lt;/code&amp;gt;, &#039;&#039;not&#039;&#039; &amp;lt;code&amp;gt;four-hundred-eighty-p&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Sourcing ===&lt;br /&gt;
* Discord messages, YouTube or streaming-platform comments, and individual forum posts (single comments, not the established resources described below) are not accepted as sources, since they can be edited or deleted without notice.&lt;br /&gt;
* Song lyrics are not considered a valid source on their own.&lt;br /&gt;
* AI chatbots are not a valid source under any circumstance — see [[#AI Isn&#039;t a Valid Source|AI Isn&#039;t a Valid Source]] below.&lt;br /&gt;
&lt;br /&gt;
==== User-generated content ====&lt;br /&gt;
As of a policy update dated &#039;&#039;&#039;November 13, 2025&#039;&#039;&#039;, words sourced from user-generated content platforms — Urban Dictionary, Fandom/community wikis, dedicated technical wikis, and established forum FAQs — are accepted, but only under three mandatory conditions, all of which must be met:&lt;br /&gt;
# &#039;&#039;&#039;Age:&#039;&#039;&#039; the word must have been verifiably public on its source platform for at least &#039;&#039;&#039;180 days (6 months)&#039;&#039;&#039; before it&#039;s submitted. This is meant to filter out content invented for the submission itself rather than something that already existed and saw use.&lt;br /&gt;
# &#039;&#039;&#039;Creator distance:&#039;&#039;&#039; the word&#039;s original creator, or anyone connected to that creator, cannot be the one who submits it — including asking someone else to submit it on their behalf. This is an intentional, acknowledged bias: it exists specifically to require that a word has been adopted by people outside its creator&#039;s own circle before it&#039;s considered, rather than accepting a creator&#039;s (or their friends&#039;) own word on their say-so.&lt;br /&gt;
# &#039;&#039;&#039;Source type:&#039;&#039;&#039; the word has to come from a recognized group community resource, not an unreliable low-credibility source like a single blog comment, an exaggerated one-off Reddit post, or an unmaintained personal site.&lt;br /&gt;
&lt;br /&gt;
Any submission curators consider &amp;quot;sus&amp;quot; under these rules gets a request for the source link and an explanation of the word; if a curator can&#039;t quickly verify the word&#039;s age or that the submitter isn&#039;t its creator, it&#039;s rejected outright rather than given the benefit of the doubt.&lt;br /&gt;
&lt;br /&gt;
=== Content ===&lt;br /&gt;
* Complete gibberish is not accepted.&lt;br /&gt;
* Words no longer used in modern English are not accepted, except for archaisms and obsolete words that are still recognized by standard dictionaries.&lt;br /&gt;
* Words containing an em dash are not addable.&lt;br /&gt;
* Unintentional typos are not accepted, unless the misspelling is itself part of an established proper noun phrase.&lt;br /&gt;
* &#039;&#039;&#039;Numbers&#039;&#039;&#039; are restricted: any number-containing word without an alternate name, whose value is not between &amp;amp;minus;1 and 101 (i.e. 0 through 100), and which is not a standardized value under some recognized instrument or counting system, is invalid. Separately, if the specific number in a word could realistically be swapped for any other numeric value without the word losing its meaning, it is not accepted — this excludes essentially arbitrary numeric strings dressed up as words.&lt;br /&gt;
&lt;br /&gt;
=== Curator Conduct ===&lt;br /&gt;
* A curator cannot approve their own submission — if a curator uses &amp;lt;code&amp;gt;/suggest&amp;lt;/code&amp;gt; themselves, a different curator has to review it. In practice, this rule has fallen out of active use: curators now mainly add their own words directly with &amp;lt;code&amp;gt;!a&amp;lt;/code&amp;gt; (see [[#Curator Commands|Curator Commands]] below) rather than routing them through &amp;lt;code&amp;gt;/suggest&amp;lt;/code&amp;gt;, which sidesteps the approval step this rule was written for. Treat it as outdated courtesy rather than enforced practice.&lt;br /&gt;
* When a suggested word is obscure or its meaning isn&#039;t self-evident, suggesters are asked to attach a short clarifier so curators don&#039;t have to research it blind, for example: &amp;lt;code&amp;gt;^ musician&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;^ book title&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;^ slang&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;^ city&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;^ (link)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Curator Commands ===&lt;br /&gt;
Curators can bypass the &amp;lt;code&amp;gt;/suggest&amp;lt;/code&amp;gt; review queue entirely and edit a dictionary file directly:&lt;br /&gt;
* &amp;lt;code&amp;gt;!a word dict&amp;lt;/code&amp;gt; — add a word.&lt;br /&gt;
* &amp;lt;code&amp;gt;!r word dict&amp;lt;/code&amp;gt; — remove a word.&lt;br /&gt;
If no dictionary is named, the command targets the &#039;&#039;&#039;main dictionary&#039;&#039;&#039;. Neither command accepts multiple words in one message — a batch add or remove has to be submitted as a file instead.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Blacklisting&#039;&#039;&#039; a word is a separate mechanism from ordinary removal: a blacklisted word stays out of active play (it&#039;s checked against as an exclusion filter) while still technically remaining present in the main dictionary file, rather than being deleted outright.&lt;br /&gt;
&lt;br /&gt;
Two admin-only commands, &amp;lt;code&amp;gt;!ban&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;!b&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;!unban&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;!ub&amp;lt;/code&amp;gt; (restricted to the bot&#039;s owner and a specific admin role, not every word curator), sit on top of this: &amp;lt;code&amp;gt;!ban word&amp;lt;/code&amp;gt; blacklists a word and additionally purges it from every other themed dictionary category (including the automatically-maintained small/large/palindrome lists), locking it out of all of them until &amp;lt;code&amp;gt;!unban word&amp;lt;/code&amp;gt; lifts the lock — without removing the word from the blacklist itself. &amp;quot;Banned&amp;quot; and &amp;quot;blacklisted&amp;quot; are deliberately separate states: a word can stay permanently blacklisted (still unplayable) while becoming addable to other categories again the moment it&#039;s unbanned. A banned word can&#039;t be re-added to any other category, or pulled back out of the blacklist directly, until it&#039;s unbanned first.&lt;br /&gt;
&lt;br /&gt;
== Hyper-Hyphenation ==&lt;br /&gt;
Typing &amp;lt;code&amp;gt;!hyphens&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;!hyper-hyphenation&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;!wysiwyg&amp;lt;/code&amp;gt; in a game channel brings up the bot&#039;s own explanation of this rule:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Hyper-Hyphenation&#039;&#039;&#039; &#039;&#039;(noun)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1. &#039;&#039;(linguistics, normalization)&#039;&#039; Joining two or more separately-attested words into a single hyphenated expression, treating them as one unified lexical item.&lt;br /&gt;
&lt;br /&gt;
2. Super-Shiritori&#039;s normalization rule: when an abbreviation, acronym, initialism, or multi-word number is expanded into its full multi-word form, those component words get joined with hyphens into ONE valid dictionary entry; e.g. &amp;lt;code&amp;gt;CAPTCHA&amp;lt;/code&amp;gt; becomes &amp;lt;code&amp;gt;completely-automated-public-turing-tests-to-tell-computers-and-humans-apart&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
3. &#039;&#039;(by extension)&#039;&#039; Hyphenation is the mechanism, not the justification. An expansion still has to be independently real/attested; Hyper-Hyphenation only governs &#039;&#039;&#039;how&#039;&#039;&#039; its already-real words get stitched together, never &#039;&#039;&#039;whether&#039;&#039;&#039; they belong.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
In practice: an acronym&#039;s expanded form is valid alongside the acronym itself, provided that expansion is genuinely attested (a real, documented long form) rather than invented to make an otherwise-invalid string of letters pass as a word.&lt;br /&gt;
&lt;br /&gt;
To see the definition of Hyper-Hyphenation, go to the {{wc|Hyper-Hyphenation}} Word Compendium page. That framing is stylized and in-universe, not a technical reference; this page documents the same underlying mechanism in plain, verified terms instead.&lt;br /&gt;
&lt;br /&gt;
== Neosesquipedalianism ==&lt;br /&gt;
Typing &amp;lt;code&amp;gt;!neoses&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;!neosesquip&amp;lt;/code&amp;gt; brings up the bot&#039;s explanation of the opposite, &#039;&#039;invalid&#039;&#039;, pattern:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Neosesquipedalianism&#039;&#039;&#039; is the idea that you can make a &amp;quot;new&amp;quot; word by stripping the spaces, hyphens, and apostrophes out of an already-existing multi-word term and mashing what&#039;s left into one unbroken string.&lt;br /&gt;
&lt;br /&gt;
Example: the mineral &#039;&#039;&#039;Clino-ferro-ferri-holmquistite&#039;&#039;&#039; becomes &#039;&#039;&#039;Clinoferroferriholmquistite&#039;&#039;&#039;. Nothing about the word actually changed except the punctuation holding its real components apart; it&#039;s the same term with its formatting deleted, not a new one.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;This is not valid here.&#039;&#039;&#039; It&#039;s the mirror image of Hyper-Hyphenation (&amp;lt;code&amp;gt;!hyphens&amp;lt;/code&amp;gt;): Hyper-Hyphenation legitimately joins independently-attested words together with hyphens; Neosesquipedalianism just erases the punctuation of an existing compound and calls the result new. Removing separators isn&#039;t creating a word; it&#039;s deleting information.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== AI Isn&#039;t a Valid Source ==&lt;br /&gt;
Typing &amp;lt;code&amp;gt;!ai&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;!noai&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;!aisource&amp;lt;/code&amp;gt; brings up the bot&#039;s standing position on AI-sourced suggestions:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&lt;br /&gt;
Asking an AI chatbot whether something is a word, or having it &amp;quot;confirm&amp;quot; a definition, isn&#039;t an acceptable source for adding a word to the dictionary. This includes ChatGPT, Claude, Google Gemini, Grok, DeepSeek, Microsoft Copilot, Meta AI, Perplexity, and any other popular AI model or chatbot.&lt;br /&gt;
&lt;br /&gt;
AI models hallucinate; they&#039;ll state a word, spelling, or definition with total confidence even when it doesn&#039;t actually exist anywhere. That confidence doesn&#039;t make it real, and there&#039;s nothing to independently check it back against.&lt;br /&gt;
&lt;br /&gt;
Words need an attestable, citable source: a real dictionary, an established compound, a documented coinage; something someone else can actually go look up and verify. &amp;quot;I asked an AI and it said yes&amp;quot; isn&#039;t that.&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[List of Dictionaries]]&lt;br /&gt;
* [[Word Normalization]]&lt;br /&gt;
* [[Anagram]]&lt;br /&gt;
* [[Achievements]]&lt;br /&gt;
* [[Word-Curatori]]&lt;br /&gt;
* [[Super-Shiritori]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Information]]&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=Word_compendium/N/NA/nanosophobia&amp;diff=2508</id>
		<title>Word compendium/N/NA/nanosophobia</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=Word_compendium/N/NA/nanosophobia&amp;diff=2508"/>
		<updated>2026-08-26T04:21:40Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: Adding categories&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Def|pos=Noun|cj=&#039;&#039;plural&#039;&#039; nanosophobia|def1=Another word for {{wc|achondroplasiaphobia}}}}&lt;br /&gt;
[[Category:Phobias]]&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=Word_compendium/L/LO/lollypopguildophobia&amp;diff=2232</id>
		<title>Word compendium/L/LO/lollypopguildophobia</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=Word_compendium/L/LO/lollypopguildophobia&amp;diff=2232"/>
		<updated>2026-08-26T04:21:34Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: Adding categories&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Def|def1=Another word for {{wc|achondroplasiaphobia}}|cj=&#039;&#039;plural&#039;&#039; lollypopguildophobias|pos=noun}}&lt;br /&gt;
[[Category:Phobias]]&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=MediaWiki:Common.css&amp;diff=4194</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=MediaWiki:Common.css&amp;diff=4194"/>
		<updated>2026-08-26T04:20:21Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.mbox {&lt;br /&gt;
    background-color: rgb(230, 230, 230);&lt;br /&gt;
    border-color: rgb(230, 230, 230);&lt;br /&gt;
    border-width: 0.5;&lt;br /&gt;
    border-left-color: rgb(230, 230, 230);&lt;br /&gt;
    border-radius: 0.1;&lt;br /&gt;
    font-size: 11;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Internal links (use .internal first) */&lt;br /&gt;
a.internal:link,&lt;br /&gt;
a.internal:visited {&lt;br /&gt;
    color: #de93db;   /* pink */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Explicit safeguard: only links on da wiki */&lt;br /&gt;
.mw-parser-output a[href^=&amp;quot;https://supershiritori.fandom.com&amp;quot;]:link,&lt;br /&gt;
.mw-parser-output a[href^=&amp;quot;https://supershiritori.fandom.com&amp;quot;]:visited {&lt;br /&gt;
    color: #de93db;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* External + interwiki links */&lt;br /&gt;
a.external:link,&lt;br /&gt;
a.external:visited,&lt;br /&gt;
a.extiw:link,&lt;br /&gt;
a.extiw:visited {&lt;br /&gt;
    color: #7d3cff;   /* violet */&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    text-decoration: underline dotted;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Fallback for any remaining http links (safety net) */&lt;br /&gt;
.mw-parser-output a[href^=&amp;quot;http&amp;quot;]:link,&lt;br /&gt;
.mw-parser-output a[href^=&amp;quot;http&amp;quot;]:visited {&lt;br /&gt;
    color: #7d3cff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Redlinks */&lt;br /&gt;
a.new,&lt;br /&gt;
.mw-parser-output a.new {&lt;br /&gt;
    color: #ff0000;   /* red */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* FORCE BREAK GIANT ARTICLE TITLES */&lt;br /&gt;
.page-header__title-wrapper,&lt;br /&gt;
.page-header__main,&lt;br /&gt;
.page-header__title,&lt;br /&gt;
h1.page-header__title {&lt;br /&gt;
    display: block !important;&lt;br /&gt;
    min-width: 0 !important;&lt;br /&gt;
    max-width: 100% !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    word-break: break-all !important;&lt;br /&gt;
    overflow-wrap: break-word !important;&lt;br /&gt;
    white-space: normal !important;&lt;br /&gt;
    flex: 1 1 auto !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* FORCE BREAK INSIDE BODY ARTICLES */&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
    word-break: break-all !important;&lt;br /&gt;
    overflow-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* FORCE BREAK LONG WORDS IN CATEGORY LISTINGS */&lt;br /&gt;
.category-page__member-link {&lt;br /&gt;
    display: block !important;&lt;br /&gt;
    min-width: 0 !important;&lt;br /&gt;
    max-width: 100% !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    word-break: break-all !important;&lt;br /&gt;
    overflow-wrap: break-word !important;&lt;br /&gt;
    white-space: normal !important;&lt;br /&gt;
    flex: 1 1 auto !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* FORCE BREAK LONG WORDS IN THE COMMENTS SECTION */&lt;br /&gt;
#articleComments,&lt;br /&gt;
#articleComments * {&lt;br /&gt;
    min-width: 0 !important;&lt;br /&gt;
    overflow-wrap: break-word !important;&lt;br /&gt;
    word-break: break-all !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=MediaWiki:Common.css&amp;diff=4193</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=MediaWiki:Common.css&amp;diff=4193"/>
		<updated>2026-08-26T04:12:16Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.mbox {&lt;br /&gt;
    background-color: rgb(230, 230, 230);&lt;br /&gt;
    border-color: rgb(230, 230, 230);&lt;br /&gt;
    border-width: 0.5;&lt;br /&gt;
    border-left-color: rgb(230, 230, 230);&lt;br /&gt;
    border-radius: 0.1;&lt;br /&gt;
    font-size: 11;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Internal links (use .internal first) */&lt;br /&gt;
a.internal:link,&lt;br /&gt;
a.internal:visited {&lt;br /&gt;
    color: #de93db;   /* pink */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Explicit safeguard: only links on *your* wiki */&lt;br /&gt;
.mw-parser-output a[href^=&amp;quot;https://supershiritori.fandom.com&amp;quot;]:link,&lt;br /&gt;
.mw-parser-output a[href^=&amp;quot;https://supershiritori.fandom.com&amp;quot;]:visited {&lt;br /&gt;
    color: #de93db;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* External + interwiki links */&lt;br /&gt;
a.external:link,&lt;br /&gt;
a.external:visited,&lt;br /&gt;
a.extiw:link,&lt;br /&gt;
a.extiw:visited {&lt;br /&gt;
    color: #7d3cff;   /* violet */&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    text-decoration: underline dotted;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Fallback for any remaining http links (safety net) */&lt;br /&gt;
.mw-parser-output a[href^=&amp;quot;http&amp;quot;]:link,&lt;br /&gt;
.mw-parser-output a[href^=&amp;quot;http&amp;quot;]:visited {&lt;br /&gt;
    color: #7d3cff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Redlinks */&lt;br /&gt;
a.new,&lt;br /&gt;
.mw-parser-output a.new {&lt;br /&gt;
    color: #ff0000;   /* red */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* FORCE BREAK GIANT ARTICLE TITLES */&lt;br /&gt;
.page-header__title-wrapper,&lt;br /&gt;
.page-header__main,&lt;br /&gt;
.page-header__title,&lt;br /&gt;
h1.page-header__title {&lt;br /&gt;
    display: block !important;&lt;br /&gt;
    min-width: 0 !important;&lt;br /&gt;
    max-width: 100% !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    word-break: break-all !important;&lt;br /&gt;
    overflow-wrap: break-word !important;&lt;br /&gt;
    white-space: normal !important;&lt;br /&gt;
    flex: 1 1 auto !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* FORCE BREAK INSIDE BODY ARTICLES */&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
    word-break: break-all !important;&lt;br /&gt;
    overflow-wrap: break-word !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* FORCE BREAK LONG WORDS IN CATEGORY LISTINGS */&lt;br /&gt;
.category-page__member-link {&lt;br /&gt;
    display: block !important;&lt;br /&gt;
    min-width: 0 !important;&lt;br /&gt;
    max-width: 100% !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    word-break: break-all !important;&lt;br /&gt;
    overflow-wrap: break-word !important;&lt;br /&gt;
    white-space: normal !important;&lt;br /&gt;
    flex: 1 1 auto !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=MediaWiki:Common.css&amp;diff=4192</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=MediaWiki:Common.css&amp;diff=4192"/>
		<updated>2026-08-26T04:01:11Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: I was wondering why the other stuff doesn&amp;#039;t exist in the page i was fiddling with&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.mbox {&lt;br /&gt;
    background-color: rgb(230, 230, 230);&lt;br /&gt;
    border-color: rgb(230, 230, 230);&lt;br /&gt;
    border-width: 0.5;&lt;br /&gt;
    border-left-color: rgb(230, 230, 230);&lt;br /&gt;
    border-radius: 0.1;&lt;br /&gt;
    font-size: 11;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Internal links (use .internal first) */&lt;br /&gt;
a.internal:link,&lt;br /&gt;
a.internal:visited {&lt;br /&gt;
    color: #de93db;   /* pink */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Explicit safeguard: only links on *your* wiki */&lt;br /&gt;
.mw-parser-output a[href^=&amp;quot;https://supershiritori.fandom.com&amp;quot;]:link,&lt;br /&gt;
.mw-parser-output a[href^=&amp;quot;https://supershiritori.fandom.com&amp;quot;]:visited {&lt;br /&gt;
    color: #de93db;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* External + interwiki links */&lt;br /&gt;
a.external:link,&lt;br /&gt;
a.external:visited,&lt;br /&gt;
a.extiw:link,&lt;br /&gt;
a.extiw:visited {&lt;br /&gt;
    color: #7d3cff;   /* violet */&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    text-decoration: underline dotted;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Fallback for any remaining http links (safety net) */&lt;br /&gt;
.mw-parser-output a[href^=&amp;quot;http&amp;quot;]:link,&lt;br /&gt;
.mw-parser-output a[href^=&amp;quot;http&amp;quot;]:visited {&lt;br /&gt;
    color: #7d3cff;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Redlinks */&lt;br /&gt;
a.new,&lt;br /&gt;
.mw-parser-output a.new {&lt;br /&gt;
    color: #ff0000;   /* red */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* FORCE BREAK GIANT ARTICLE TITLES */&lt;br /&gt;
.page-header__title-wrapper,&lt;br /&gt;
.page-header__main,&lt;br /&gt;
.page-header__title,&lt;br /&gt;
h1.page-header__title {&lt;br /&gt;
    display: block !important;&lt;br /&gt;
    min-width: 0 !important;&lt;br /&gt;
    max-width: 100% !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    word-break: break-all !important;&lt;br /&gt;
    overflow-wrap: break-word !important;&lt;br /&gt;
    white-space: normal !important;&lt;br /&gt;
    flex: 1 1 auto !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* FORCE BREAK INSIDE BODY ARTICLES */&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
    word-break: break-all !important;&lt;br /&gt;
    overflow-wrap: break-word !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=MediaWiki:Commons.css&amp;diff=4200</id>
		<title>MediaWiki:Commons.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=MediaWiki:Commons.css&amp;diff=4200"/>
		<updated>2026-08-26T03:58:41Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: i think i hate life&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=MediaWiki:Commons.css&amp;diff=4199</id>
		<title>MediaWiki:Commons.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=MediaWiki:Commons.css&amp;diff=4199"/>
		<updated>2026-08-26T03:51:46Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* FORCE BREAK GIANT ARTICLE TITLES */&lt;br /&gt;
.page-header__title-wrapper,&lt;br /&gt;
.page-header__main,&lt;br /&gt;
.page-header__title,&lt;br /&gt;
h1.page-header__title {&lt;br /&gt;
    display: block !important;&lt;br /&gt;
    min-width: 0 !important;&lt;br /&gt;
    max-width: 100% !important;&lt;br /&gt;
    width: 100% !important;&lt;br /&gt;
    word-break: break-all !important;&lt;br /&gt;
    overflow-wrap: break-word !important;&lt;br /&gt;
    white-space: normal !important;&lt;br /&gt;
    flex: 1 1 auto !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* FORCE BREAK INSIDE BODY ARTICLES */&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
    word-break: break-all !important;&lt;br /&gt;
    overflow-wrap: break-word !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=MediaWiki:Commons.css&amp;diff=4198</id>
		<title>MediaWiki:Commons.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=MediaWiki:Commons.css&amp;diff=4198"/>
		<updated>2026-08-26T03:33:41Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: attempt like 3&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* FORCE BREAK GIANT ARTICLE TITLES */&lt;br /&gt;
h1.page-header__title,&lt;br /&gt;
.page-header__title, &lt;br /&gt;
.page-header__title-wrapper,&lt;br /&gt;
.page-header__main {&lt;br /&gt;
    display: block !important;&lt;br /&gt;
    word-break: break-all !important;&lt;br /&gt;
    overflow-wrap: break-word !important;&lt;br /&gt;
    white-space: normal !important;&lt;br /&gt;
    max-width: 100% !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* FORCE BREAK INSIDE BODY ARTICLES */&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
    word-break: break-all !important;&lt;br /&gt;
    overflow-wrap: break-word !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=MediaWiki:Commons.css&amp;diff=4197</id>
		<title>MediaWiki:Commons.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=MediaWiki:Commons.css&amp;diff=4197"/>
		<updated>2026-08-26T03:28:00Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* FORCE BREAK GIANT ARTICLED TITLES */&lt;br /&gt;
.page-header__title, &lt;br /&gt;
.page-header__title-wrapper,&lt;br /&gt;
.page-header__inline-actions {&lt;br /&gt;
    display: inline !important;&lt;br /&gt;
    word-break: break-all !important;&lt;br /&gt;
    overflow-wrap: break-word !important;&lt;br /&gt;
    white-space: normal !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* FORCE BREAK INSIDE BODY ARTICLES */&lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
    word-break: break-word !important;&lt;br /&gt;
    overflow-wrap: break-word !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=MediaWiki:Commons.css&amp;diff=4196</id>
		<title>MediaWiki:Commons.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=MediaWiki:Commons.css&amp;diff=4196"/>
		<updated>2026-08-26T03:22:20Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: risking it all lets see if it doesn&amp;#039;t explode&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.page-header__title, &lt;br /&gt;
.mw-parser-output {&lt;br /&gt;
    overflow-wrap: break-word !important;&lt;br /&gt;
    word-break: break-all !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=Ghost_(Owner)&amp;diff=169</id>
		<title>Ghost (Owner)</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=Ghost_(Owner)&amp;diff=169"/>
		<updated>2026-08-26T03:14:53Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About the Creator – Ghost ==&lt;br /&gt;
{{DISPLAYTITLE:Ghost :/}}&lt;br /&gt;
=== Who is Ghost? ===&lt;br /&gt;
&#039;&#039;&#039;Ghost&#039;&#039;&#039; is the creator of [[Super-Shiritori]], a long-running word game project hosted on Discord. Known for obsessively building massive wordlists and crafting a mostly functional game system, Ghost has been maintaining and expanding the bot for several years. Originally from El Salvador, Ghost spent several years in South Korea (June 4, 2024 – May 2026) before a military [https://en.wikipedia.org/wiki/Permanent_change_of_station Permanent Change of Station] ({{wc|PCS}}) relocation carried him through Japan, Alaska, and Los Angeles, California, before he finally settled in Hawaii, where he has resided since arriving on June 8, 2026. He is currently a senior in high school; which school is not publicly known. He has a deep passion for computers, language, and words, and has taken computer science courses, including &#039;&#039;&#039;{{wc|CSP}}&#039;&#039;&#039; (Computer Science Principles), with instruction in &#039;&#039;&#039;Java&#039;&#039;&#039; and &#039;&#039;&#039;Python&#039;&#039;&#039;. He primarily codes in &#039;&#039;&#039;Python&#039;&#039;&#039; and also uses &#039;&#039;&#039;HTML&#039;&#039;&#039; for web-related tasks. His main development tools include &#039;&#039;&#039;{{wc|Visual-Studio-Code|Visual Studio Code}}&#039;&#039;&#039; and &#039;&#039;&#039;GitHub&#039;&#039;&#039;, with past experience hosting projects on &#039;&#039;&#039;Glitch&#039;&#039;&#039;. Outside of Super-Shiritori, Ghost briefly experimented with Word Game Hub (hosted on Glitch), but no other public projects are currently known. The bot is supported by a team of dedicated [[Word curators]], who contribute significantly to the community and the growth of the wordlists.&lt;br /&gt;
&lt;br /&gt;
See [[Super-Shiritori#Development|Super-Shiritori&#039;s Development section]] for how this same relocation affected the bot itself, including its extended 2026 outage.&lt;br /&gt;
&lt;br /&gt;
=== Military Connection ===&lt;br /&gt;
The branch is confirmed: Ghost&#039;s {{wc|PCS}} relocation is connected to the &#039;&#039;&#039;U.S. Army&#039;&#039;&#039;. What&#039;s less certain is his own personal status within it — Ghost has described himself as being &amp;quot;in&amp;quot; or &amp;quot;part of&amp;quot; the military, but given that he&#039;s a high school senior, this is most likely him referring to being a military dependent (a &amp;quot;military kid,&amp;quot; relocating alongside a parent&#039;s Army posting) rather than being enlisted himself. That specific distinction has not been explicitly confirmed either way, so it&#039;s noted here as the likely reading rather than a settled fact.&lt;br /&gt;
&lt;br /&gt;
A {{wc|PCS}} order is a permanent, government-directed relocation from one duty station to another, distinct from a temporary assignment — it resets where a service member (and typically their dependents) are officially stationed. It typically comes with a Dislocation Allowance (DLA), a lump-sum, non-repayable payment meant to offset relocation costs such as security deposits and utility hookups, usually paid about a month before the move, along with separate government arrangement and shipment of household goods. Overseas-to-overseas moves like this one (South Korea to Hawaii) are also commonly routed through established military transit hubs rather than flying directly, which is consistent with — though not specifically confirmed to explain — the Japan and Alaska legs of Ghost&#039;s own route. Housing at the new duty station is not always immediately available, particularly in high-cost, limited-inventory markets; Ghost&#039;s own account of waiting for government-provided housing in Hawaii, and the several-month delay that resulted, matches a widely reported real-world shortage of military family housing on the islands.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Recent Events ===&lt;br /&gt;
In mid-August 2026, Hurricane Lala struck the Hawaiian Islands, prompting a state of emergency and tropical storm/hurricane warnings across the state, including Oʻahu — the island Ghost lives on, home to Honolulu. The storm knocked out power to well over 200,000 utility customers statewide at its peak, with Honolulu County among the hardest hit. Ghost lost internet access for about an hour during the storm but was otherwise unaffected and safe. Since [[Super-Shiritori]] runs on Ghost&#039;s own computer rather than any cloud host, the bot itself was offline for that same hour, going down and coming back up alongside his connection.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== How the Bot Was Made ===&lt;br /&gt;
&lt;br /&gt;
* It all began with a love for the Roblox game &#039;&#039;&#039;Word Bomb&#039;&#039;&#039;, a game Ghost played constantly, even if he wasn&#039;t exactly great at it. What really stuck with him was how limited the word pool felt. Words like &#039;&#039;{{wc|pneumonoultramicroscopicsilicovolcanoconiosis}}&#039;&#039; were excluded, and that didn&#039;t sit right with someone whose spelling was one of their strongest skills.&lt;br /&gt;
&lt;br /&gt;
* Inspired by the idea of having a bot with a powerful dictionary in-hand, an idea that came from the OMG community, Ghost set out to build something better. The first version of his game was a very rough, Python-powered text-based experiment called &#039;&#039;&#039;Word Bomb Skuffed Edition&#039;&#039;&#039;, which eventually housed around 450,000 words.&lt;br /&gt;
&lt;br /&gt;
* During the bot&#039;s development, Ghost also experimented with creating a website full of word games, called [[Word Game Hub]], hosted on [https://glitch.com Glitch]. The site was never finished and only featured one fully working game, but its dictionary reached a peak of roughly 574,900 words, sharing dictionary lineage with [[Super-Shiritori]]. The discouragement from the incomplete project caused a temporary loss of motivation. The original URL no longer exists, but the recovered source code — including a downloadable copy — is documented in full on the [[Word Game Hub]] page.&lt;br /&gt;
&lt;br /&gt;
* With help from friends and external sources, the project evolved into a website called &#039;&#039;&#039;Ghost-Games&#039;&#039;&#039;, hosted on Glitch. That version eventually went offline, but it laid the foundation for what would become the current Discord bot.&lt;br /&gt;
&lt;br /&gt;
* The bot was built using &#039;&#039;&#039;Visual Studio Code ([https://code.visualstudio.com VSCode])&#039;&#039;&#039; and runs with assistance from &#039;&#039;&#039;{{wc|GitHub}}&#039;&#039;&#039;. Most of its core functionality was learned and developed through trial, error, and countless YouTube tutorials. Ghost doesn&#039;t really like the idea of using AI to write code, calling it &amp;quot;cheat-ish,&amp;quot; but he did use the built-in AI assistant to help draft messages and responses for the bot&#039;s chat output.&lt;br /&gt;
&lt;br /&gt;
* The biggest challenges? Frustration, technical hurdles, and being a broke high schooler with limited resources. Thankfully, a good friend named &#039;&#039;&#039;Kos&#039;&#039;&#039; now helps run the bot, keeping things online and stable.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Partnerships &amp;amp; Collaborators ===&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Kos (kos256)&#039;&#039;&#039; – Bot Administrator&lt;br /&gt;
* &#039;&#039;&#039;GreenyMage (greenymage)&#039;&#039;&#039; – Graphic Designer&lt;br /&gt;
* Beyond that, the project thrives thanks to the small but loyal community that has formed around it. Whether you&#039;re actively contributing or just hanging out in the server, Ghost truly appreciates every one of you. This project wouldn&#039;t exist without that support.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Fun Facts ===&lt;br /&gt;
&lt;br /&gt;
* Has strong knowledge of geography.&lt;br /&gt;
* Some accent-based word translations happen automatically due to the global &amp;lt;code&amp;gt;Normalize&amp;lt;/code&amp;gt; function; at first, people thought it was intentional.&lt;br /&gt;
* Many &amp;quot;false words&amp;quot; are created by Ghost as inside jokes; examples can be found in the [[Word compendium|Word Compendium]] under [[:Category:Shiritori originals|Shiritori originals]].&lt;br /&gt;
* Admin Kos often calls Ghost by the nickname &amp;quot;Shiritori.&amp;quot;&lt;br /&gt;
* Has developed a recent phobia of {{wc|grape|grapes}}, after October 11th 2025.&lt;br /&gt;
* Favorite piece of digital media: the anime [https://en.wikipedia.org/wiki/Clockwork_Planet &#039;&#039;Clockwork Planet&#039;&#039;].&lt;br /&gt;
&lt;br /&gt;
== External Links ==&lt;br /&gt;
* [https://www.travel.dod.mil/Travel-Transportation-Rates/Dislocation-Allowance/ Dislocation Allowance — Defense Travel Management Office]&lt;br /&gt;
* [https://abcnews.com/US/tropical-storm-lala-forecast-impact-hawaiian-islands-weekend/story?id=135610026 Lala spins out to sea after storm hammered the Hawaiian Islands — ABC News]&lt;br /&gt;
* [https://www.honolulu.gov/mayor/emergency-responses-to-tropical-storm-lala-continue-as-winds-and-heavy-rain-persist/ Emergency responses to Tropical Storm Lala — Office of the Mayor, City and County of Honolulu]&lt;br /&gt;
&lt;br /&gt;
[[Category:Information]]&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=Solo_Shiritori&amp;diff=288</id>
		<title>Solo Shiritori</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=Solo_Shiritori&amp;diff=288"/>
		<updated>2026-08-24T01:59:33Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Solo Shiritori =&lt;br /&gt;
&lt;br /&gt;
Solo Shiritori is a private word-chain match played against an AI opponent in a dedicated thread.&lt;br /&gt;
&lt;br /&gt;
== Starting a Game ==&lt;br /&gt;
A game is created with &amp;lt;code&amp;gt;/solo_shiritori&amp;lt;/code&amp;gt;. Only one solo game may be active per player at a time (&amp;quot;You already have an active solo game!&amp;quot;), though a solo game can run alongside an active multiplayer game. The bot creates a private thread, posts a starting word, and begins the AI at the ROOKIE personality.&lt;br /&gt;
&lt;br /&gt;
The thread&#039;s rules message differs slightly in wording from multiplayer: &amp;quot;Allowed: Regular words, hyphenated words, acronyms, city names. Not Allowed: Personal names (unless with meaning), or words with non-letter characters.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Rules ==&lt;br /&gt;
# Each word must start with the final letter of the previous word.&lt;br /&gt;
# A word cannot repeat one already used in that session.&lt;br /&gt;
# A word must be found in the dictionary and contain only letters, hyphens, or apostrophes.&lt;br /&gt;
# Any invalid submission, whether a wrong starting letter, a repeat, or a word not in the dictionary, ends the game immediately; there is no retry within a turn.&lt;br /&gt;
&lt;br /&gt;
Valid player words receive a ✅ reaction; invalid ones receive ❌. A message that starts with &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt;, with any of the multiplayer AI-summon commands (such as &amp;lt;code&amp;gt;!noob&amp;lt;/code&amp;gt;), is empty, or carries an attachment or embed instead of text is silently ignored rather than treated as a move — it neither counts as a word nor ends the game.&lt;br /&gt;
&lt;br /&gt;
== The AI Opponent ==&lt;br /&gt;
The AI begins as ROOKIE. Its personality can change between turns; the bot tracks the length of the player&#039;s most recent words (up to the last 30) together with the number of rounds played to decide whether and how to adjust.&lt;br /&gt;
&lt;br /&gt;
A game ends in the AI&#039;s favor if the player submits an invalid word. It ends in the player&#039;s favor if the AI cannot find any valid word starting with the required letter: &amp;quot;AI ({personality}) couldn&#039;t find a valid word starting with &#039;{letter}&#039;. You win!&amp;quot; In an extremely rare case, roughly 1 in 27,963,028, the AI&#039;s selected word fails to actually start with the required letter; this is treated as an AI failure, ends the game, and unlocks the &amp;quot;Man Beats Machine&amp;quot; [[Achievements|achievement]] the first time it happens to a player.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;VOWELLESS&#039;&#039;&#039; is a specific exception to the &amp;quot;can&#039;t find a word&amp;quot; ending above. Since a word beginning with a vowel can never itself be vowel-free, VOWELLESS is unable to move on a genuinely large share of turns — by design, it is never allowed to fall back to a word containing a vowel just to keep the game going (see [[AI Bots#History|AI Bots]] for the full mechanic). Rather than ending the game every time this happens, which given how often it comes up would have made VOWELLESS nearly unplayable in Solo Shiritori, the bot instead announces that VOWELLESS &amp;quot;leaves&amp;quot; and is immediately replaced by a freshly-rolled personality (never VOWELLESS or LARP again) that takes the same turn in its place. The game only actually ends in the player&#039;s favor if that &#039;&#039;replacement&#039;&#039; personality also can&#039;t find a word — an outcome only slightly less rare than any other personality&#039;s ordinary failure.&lt;br /&gt;
&lt;br /&gt;
== Ending a Game ==&lt;br /&gt;
A session also ends after inactivity: if the player goes quiet, the bot posts a 30-second warning (&amp;quot;30 seconds left! Type a word or the game will end due to inactivity&amp;quot;) before the 5-minute timeout actually expires, rather than the game simply vanishing without notice.&lt;br /&gt;
&lt;br /&gt;
When a game ends for any reason, the bot posts a summary showing the number of turns played and the percentage of the dictionary used so far. This turn count covers the &#039;&#039;entire match&#039;&#039; — every word played by both the player and the AI, including the starting word — and is a different figure from the player-specific &amp;quot;rounds played&amp;quot; statistic tracked by &amp;lt;code&amp;gt;/solo_stats&amp;lt;/code&amp;gt;, which only counts the player&#039;s own successful turns.&lt;br /&gt;
&lt;br /&gt;
The thread is deleted a flat 3 minutes after the game ends, though the message shown to players describes it more loosely as &amp;quot;3-5 minutes&amp;quot; to leave some buffer.&lt;br /&gt;
&lt;br /&gt;
== Statistics ==&lt;br /&gt;
Solo Shiritori results are recorded per player: rounds played, hyphens used, apostrophes used, unique words played, and longest word. The player also earns experience toward their level for each valid word played. These stats can be viewed with &amp;lt;code&amp;gt;/solo_stats&amp;lt;/code&amp;gt; and compared with &amp;lt;code&amp;gt;/solo_leaderboard&amp;lt;/code&amp;gt;, both of which offer a Public/Private visibility choice; the leaderboard can additionally be sorted by Longest Word, Turns Played, or Dictionary Completion.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Super-Shiritori]]&lt;br /&gt;
* [[Multiplayer Shiritori]]&lt;br /&gt;
* [[AI Bots]]&lt;br /&gt;
* [[Achievements]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Information]]&lt;br /&gt;
[[Category:Games(bot)]]&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=Protori&amp;diff=258</id>
		<title>Protori</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=Protori&amp;diff=258"/>
		<updated>2026-08-24T01:59:09Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Protori =&lt;br /&gt;
&lt;br /&gt;
Protori is a scoring-based variant of multiplayer Shiritori, played in a shared text channel. Rather than simply extending a word chain for its own sake, every accepted word earns points, and the game is built around chasing a high score rather than outlasting other players.&lt;br /&gt;
&lt;br /&gt;
== Starting a Game ==&lt;br /&gt;
A server member with the Manage Messages permission, the bot owner, or a word curator can start a game with &amp;lt;code&amp;gt;/start_protori [#channel]&amp;lt;/code&amp;gt;. A Protori game and a multiplayer Shiritori game cannot both run in the same channel at once; starting either is rejected if the other is already active there. The bot posts the rules along with a random starting word, and a &amp;quot;Point System Explained?&amp;quot; button that shows a private, detailed breakdown of the scoring formula (including a worked example) to whoever clicks it.&lt;br /&gt;
&lt;br /&gt;
== Rules ==&lt;br /&gt;
# A word must match some ending portion of the previous word — anywhere from just its final letter up to every letter but the first. A word with no such overlap at all is rejected.&lt;br /&gt;
# Words must be between 2 and 80 characters long, contain only letters, hyphens, and apostrophes, and be found in the dictionary.&lt;br /&gt;
# A player cannot play twice in a row; someone else must play before the same player can go again.&lt;br /&gt;
# Unlike regular multiplayer Shiritori, there is no fixed turn order beyond that rule — any eligible player in the channel may play the next word whenever they&#039;re ready.&lt;br /&gt;
# Playing a word that has already been used in the game ends it immediately (see [[#Ending a Game|Ending a Game]] below).&lt;br /&gt;
&lt;br /&gt;
A server&#039;s &amp;lt;code&amp;gt;/toggle_corrections&amp;lt;/code&amp;gt; setting (the same one used by regular multiplayer Shiritori) also applies to Protori: with it off, an invalid word gets an explanatory message alongside its ❌ reaction; with it on, invalid words are only ever marked with a reaction.&lt;br /&gt;
&lt;br /&gt;
== Scoring ==&lt;br /&gt;
Every accepted word earns points from two parts: a &#039;&#039;&#039;base score&#039;&#039;&#039; and a &#039;&#039;&#039;chain bonus&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== Base Score ===&lt;br /&gt;
A word&#039;s base score is the sum of its letters&#039; point values, using a flat table calibrated to how rare each letter actually is across the dictionary rather than a standard Scrabble tile distribution:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Letter/Symbol !! Points !! Letter !! Points !! Letter !! Points !! Letter !! Points&lt;br /&gt;
|-&lt;br /&gt;
| &#039; || 8 || h || 3 || o || 1 || v || 4&lt;br /&gt;
|-&lt;br /&gt;
| - || 1 || i || 1 || p || 3 || w || 4&lt;br /&gt;
|-&lt;br /&gt;
| a || 1 || j || 4 || q || 10 || x || 8&lt;br /&gt;
|-&lt;br /&gt;
| b || 3 || k || 4 || r || 1 || y || 4&lt;br /&gt;
|-&lt;br /&gt;
| c || 1 || l || 1 || s || 1 || z || 5&lt;br /&gt;
|-&lt;br /&gt;
| d || 2 || m || 3 || t || 1 || ||&lt;br /&gt;
|-&lt;br /&gt;
| e || 1 || n || 1 || u || 2 || ||&lt;br /&gt;
|-&lt;br /&gt;
| f || 4 || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| g || 3 || || || || || ||&lt;br /&gt;
|}&lt;br /&gt;
An apostrophe is worth as much as any of the rarest letters (8 points), and a hyphen is worth as little as the most common ones (1 point).&lt;br /&gt;
&lt;br /&gt;
=== Comparison to Scrabble ===&lt;br /&gt;
Protori&#039;s letter values are explicitly &#039;&#039;&#039;not&#039;&#039;&#039; the standard tile-point distribution used in [https://en.wikipedia.org/wiki/Scrabble_letter_distributions Scrabble], despite drawing on the same basic idea (rarer letters are worth more). Laid side by side:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Letter !! Protori !! Scrabble !! Difference&lt;br /&gt;
|-&lt;br /&gt;
| A || 1 || 1 || —&lt;br /&gt;
|-&lt;br /&gt;
| B || 3 || 3 || —&lt;br /&gt;
|-&lt;br /&gt;
| C || 1 || 3 || Protori −2&lt;br /&gt;
|-&lt;br /&gt;
| D || 2 || 2 || —&lt;br /&gt;
|-&lt;br /&gt;
| E || 1 || 1 || —&lt;br /&gt;
|-&lt;br /&gt;
| F || 4 || 4 || —&lt;br /&gt;
|-&lt;br /&gt;
| G || 3 || 2 || Protori +1&lt;br /&gt;
|-&lt;br /&gt;
| H || 3 || 4 || Protori −1&lt;br /&gt;
|-&lt;br /&gt;
| I || 1 || 1 || —&lt;br /&gt;
|-&lt;br /&gt;
| J || 4 || 8 || Protori −4&lt;br /&gt;
|-&lt;br /&gt;
| K || 4 || 5 || Protori −1&lt;br /&gt;
|-&lt;br /&gt;
| L || 1 || 1 || —&lt;br /&gt;
|-&lt;br /&gt;
| M || 3 || 3 || —&lt;br /&gt;
|-&lt;br /&gt;
| N || 1 || 1 || —&lt;br /&gt;
|-&lt;br /&gt;
| O || 1 || 1 || —&lt;br /&gt;
|-&lt;br /&gt;
| P || 3 || 3 || —&lt;br /&gt;
|-&lt;br /&gt;
| Q || 10 || 10 || —&lt;br /&gt;
|-&lt;br /&gt;
| R || 1 || 1 || —&lt;br /&gt;
|-&lt;br /&gt;
| S || 1 || 1 || —&lt;br /&gt;
|-&lt;br /&gt;
| T || 1 || 1 || —&lt;br /&gt;
|-&lt;br /&gt;
| U || 2 || 1 || Protori +1&lt;br /&gt;
|-&lt;br /&gt;
| V || 4 || 4 || —&lt;br /&gt;
|-&lt;br /&gt;
| W || 4 || 4 || —&lt;br /&gt;
|-&lt;br /&gt;
| X || 8 || 8 || —&lt;br /&gt;
|-&lt;br /&gt;
| Y || 4 || 4 || —&lt;br /&gt;
|-&lt;br /&gt;
| Z || 5 || 10 || Protori −5&lt;br /&gt;
|}&lt;br /&gt;
Neither the apostrophe nor the hyphen has a Scrabble equivalent at all — Scrabble&#039;s physical tile set has no punctuation.&lt;br /&gt;
&lt;br /&gt;
Nineteen of the twenty-six letters carry identical values in both systems; only seven diverge, and every divergence is Protori valuing the letter &#039;&#039;&#039;lower&#039;&#039;&#039; than Scrabble except for G and U. The two biggest gaps are both letters Protori considers far more common than Scrabble does: &#039;&#039;&#039;Z&#039;&#039;&#039; (5 vs. 10) and &#039;&#039;&#039;J&#039;&#039;&#039; (4 vs. 8). That tracks with how the two point systems were actually built — Scrabble&#039;s values reflect letter frequency across general English text, while Protori&#039;s are calibrated against its own roughly 1.67-million-word dictionary, which leans heavily on scientific, technical, and foreign-derived vocabulary where Z and J show up far more often than they would in ordinary English writing.&lt;br /&gt;
&lt;br /&gt;
=== Chain Bonus ===&lt;br /&gt;
Matching more of the previous word&#039;s ending — beyond just its last letter — adds a bonus of roughly &#039;&#039;&#039;+1% of the word&#039;s base score per matched character&#039;&#039;&#039;. A word that only matches the previous word&#039;s final letter gets no bonus at all; one that matches deep into a long previous word can gain up to roughly +79%.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example:&#039;&#039;&#039; the word &amp;lt;code&amp;gt;quiz&amp;lt;/code&amp;gt; has a base score of Q(10) + U(2) + I(1) + Z(5) = 18. If it matched 5 characters of the ending of the previous word, its final score would be round(18 × 1.05) = &#039;&#039;&#039;19 points&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
There are no attack mechanics, penalties for other players, or bonus-emoji reactions in the current version of Protori — score is purely base score plus chain bonus.&lt;br /&gt;
&lt;br /&gt;
=== Notable High-Scoring Words ===&lt;br /&gt;
Checking the dictionary directly against the letter-point table above (base score only, no chain bonus) turns up some of the highest-scoring legitimate entries a player could actually play:&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Word !! Base Score !! Length&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz}} || 290 || 58&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|h-kqqqqqqqqqqqqqqqqqqqqqqr-oh}} || 234 || 29&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|kqqqqqqqqqqqqqqqqqqqqqqr}} || 225 || 24&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|four-four&#039;&#039;&#039;-bis-two-butyloctyl-oxy-one-one&#039;four&#039;one&#039;&#039;four&#039;&#039;one&#039;&#039;&#039;-quaterphenyl|&amp;lt;nowiki&amp;gt;four-four&#039;&#039;&#039;-bis-two-butyloctyl-oxy-one-one&#039;four&#039;one&#039;&#039;four&#039;&#039;one&#039;&#039;&#039;-quaterphenyl&amp;lt;/nowiki&amp;gt;}} || 220 || 79&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|jf-qqblid-qz&#039;bdabykvqqjiiyqqhspehyzjvhfbf&#039;bcd}} || 187 || 45&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|jashsbiykwqgmahhdlrdimvqrfijzhqiyipr&#039;qj&#039;bfijzxphi&#039;}} || 181 || 50&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-large}} || 175 || 75&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|jlepa&#039;b-adbbeqgh&#039;hpfhrjjijiuqqed&#039;q&#039;&#039;hfzfhbbh|&amp;lt;nowiki&amp;gt;jlepa&#039;b-adbbeqgh&#039;hpfhrjjijiuqqed&#039;q&#039;&#039;hfzfhbbh&amp;lt;/nowiki&amp;gt;}} || 171 || 44&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj}} || 164 || 41&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-large}} || 163 || 70&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|extra-extra-extra-extra-extra-extra-extra-extra-extra-extra-extra-extra-large}} || 163 || 77&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|zzzezggzzzzhunzzzztzzzzchzzzozmzzzzikzz|zzzezggzzzzhunzzzztzzzzchzzzozmzzzzikzzes}} || 159 || 41&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|h-yqpeclepskygcrgdedatfgwtfdredggcrdgsyctrfgqpknyfrsegdckkacgga-oh}} || 159 || 66&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|zzzezggzzzzhunzzzztzzzzchzzzozmzzzzikzz}} || 157 || 39&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|h-vsqpeatkcfqwqrnmrkvrgppvscikrdspiqci-oh-h-grrrrsvqwca-oh}} || 156 || 58&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|h-yqpeclepskygcrgdedatfgwtfdredggcrdgsyctrfgqpknyfrserdckkacgna-oh}} || 155 || 66&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|h-cngrcggkqkikhvvklkvvvklksqlvkrkvvvrrrkkiqgrskr-oh}} || 155 || 51&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|googolplexplexplexplexplexplexplexplexplexplexplexes}} || 155 || 52&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|buzu-buzu-bichi-bichi-bubebebebebepi-gogogogogo-janjandadaddadokosukaba-n-mix}} || 155 || 77&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|two-two-methyl-eight-four-methylphenyl-sulfonylamino-quinolin-six-yl-oxyacetates}} || 154 || 80&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|two-two-methyl-eight-four-methylphenyl-sulfonylamino-quinolin-six-yl-oxyacetate}} || 153 || 79&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|n-dioctadecylcarbamoylmethoxyacetyl-gly-gly-gly-gly-pro-gly-gly-gly-gly-obzl}} || 153 || 76&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|googolplexplexplexplexplexplexplexplexplexplexplex}} || 153 || 50&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|xxxxxxxxxxxxxxxxxxx}} || 152 || 19&lt;br /&gt;
|-&lt;br /&gt;
| {{wc|xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-xtra-large}} || 151 || 65&lt;br /&gt;
|}&lt;br /&gt;
all within Protori&#039;s 80-character limit, computed against the exact letter-value table above with no chain bonus applied.&lt;br /&gt;
&lt;br /&gt;
== Ending a Game ==&lt;br /&gt;
Playing an already-used word ends the game immediately and costs that player a &#039;&#039;&#039;250-point penalty&#039;&#039;&#039;, with a pointed message calling them out for it. When the game ends — whether by a repeat, or manually via &amp;lt;code&amp;gt;/end_protori&amp;lt;/code&amp;gt; — the bot posts a final leaderboard (up to the top 20 scores), the number of unique words played, and the dictionary-coverage percentage that represents.&lt;br /&gt;
&lt;br /&gt;
Unless the game was ended by an admin (&amp;lt;code&amp;gt;/end_protori&amp;lt;/code&amp;gt; stops it permanently, with no restart), a new Protori game starts automatically in the same channel after a 2-minute cooldown, mirroring how multiplayer Shiritori&#039;s own auto-restart behaves.&lt;br /&gt;
&lt;br /&gt;
== Statistics ==&lt;br /&gt;
Protori tracks its own stats per player, separate from multiplayer Shiritori&#039;s: total points, turns played, hyphens and apostrophes used, longest word, unique words played, and how many games ended because that player repeated a word. These can be viewed with &amp;lt;code&amp;gt;/protori_stats&amp;lt;/code&amp;gt; (global totals plus a per-server breakdown, Public/Private) and compared with &amp;lt;code&amp;gt;/protori_leaderboard&amp;lt;/code&amp;gt; (server or global).&lt;br /&gt;
&lt;br /&gt;
Protori also has its own set of achievements — see the &amp;quot;Shiritoris&amp;quot; category on [[Achievements]] — covering score milestones (from a game-ending negative score up to reaching 25,000 points), single-word scoring feats, and related Timed Shiritori and solo-AI achievements grouped alongside it.&lt;br /&gt;
&lt;br /&gt;
Unlike multiplayer Shiritori and Solo Shiritori, Protori has no [[AI Bots|AI opponent]] support at all — there is no equivalent of &amp;lt;code&amp;gt;/invite_ai&amp;lt;/code&amp;gt; here. Attempting it during an active Protori match is rejected outright, and the first player to try it unlocks the &amp;quot;Ghosted&amp;quot; achievement.&lt;br /&gt;
&lt;br /&gt;
== The Protori Role ==&lt;br /&gt;
Separately from gameplay, any member of the bot&#039;s home server who reaches &#039;&#039;&#039;overall level 12&#039;&#039;&#039; (through any game mode, not Protori specifically) is automatically granted a dedicated Protori-themed Discord role, checked by a background scan roughly once a minute. This role is a cosmetic reward tied to general progress — it does not gate who is allowed to actually play Protori.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
Protori originally restricted both which server could run the mode at all and who could participate in it to holders of the level-12 role described above, scoped to the bot&#039;s home server specifically. That restriction has since been removed: any server can now start and fully play a Protori game through &amp;lt;code&amp;gt;/start_protori&amp;lt;/code&amp;gt;, and the level-12 role is purely the cosmetic reward described above rather than a gameplay gate.&lt;br /&gt;
&lt;br /&gt;
Saving a game&#039;s state used to be a direct, synchronous disk write performed on every single turn, right on the bot&#039;s one shared event loop — since every other game mode, in every server, runs on that same loop, a large Protori game (achievement thresholds go up to 25,000 points, implying a lot of turns) could measurably stall every other concurrent game across the entire bot on every word played. That save now happens on a background thread instead.&lt;br /&gt;
&lt;br /&gt;
The background scan behind the Protori Role described above used to re-check every eligible member on every single pass with no memory of the outcome between passes — a member who had reached level 12 and then left the server (or was simply never cached) got re-fetched from Discord&#039;s API every single minute, forever, with no pacing between consecutive lookups in the same pass. Since the underlying level data only ever grows over a bot&#039;s lifetime, this got slower and more prone to tripping Discord&#039;s rate limits over time, and was found to be a real contributing factor during an investigation into a live outage. It now remembers which users are confirmed to no longer be members (skipping them for the rest of that session) and pauses briefly between lookups, so the scan can no longer grow into a rate-limit problem the way it previously could.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/start_protori&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/end_protori&amp;lt;/code&amp;gt; could previously fail outright with a generic Discord &amp;quot;Unknown interaction&amp;quot; error if their own background setup or teardown work took longer than Discord&#039;s 3-second initial-response window. Both commands now acknowledge the interaction immediately and send their actual response afterward, removing the crash.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Multiplayer Shiritori]]&lt;br /&gt;
* [[Solo Shiritori]]&lt;br /&gt;
* [[AI Bots]]&lt;br /&gt;
* [[Achievements]]&lt;br /&gt;
* [[Super-Shiritori]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Information]]&lt;br /&gt;
[[Category:Games(bot)]]&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=Multiplayer_Shiritori&amp;diff=252</id>
		<title>Multiplayer Shiritori</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=Multiplayer_Shiritori&amp;diff=252"/>
		<updated>2026-08-24T01:57:53Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Multiplayer Shiritori =&lt;br /&gt;
&lt;br /&gt;
Multiplayer Shiritori is the bot&#039;s primary game mode, played in a shared text channel where players take turns extending a word chain.&lt;br /&gt;
&lt;br /&gt;
== Starting a Game ==&lt;br /&gt;
A server member with the Manage Messages permission, or the bot owner, can start a game with &amp;lt;code&amp;gt;/start_shiritori [#channel]&amp;lt;/code&amp;gt;. The bot posts the rules and generates a random starting word automatically. Only one game may be active per channel at a time.&lt;br /&gt;
&lt;br /&gt;
To prevent abuse, a server is temporarily blocked from starting new games if &amp;lt;code&amp;gt;/start_shiritori&amp;lt;/code&amp;gt; is used 5 times and &amp;lt;code&amp;gt;/end_shiritori&amp;lt;/code&amp;gt; is used at least 4 times within a rolling 15-minute window. The resulting block lasts 2 hours.&lt;br /&gt;
&lt;br /&gt;
A multiplayer Shiritori game and a [[Protori]] game cannot both run in the same channel at once; starting one is rejected if the other is already active there, and this restriction also applies to a game&#039;s automatic restart, not just to the initial start command.&lt;br /&gt;
&lt;br /&gt;
If the bot restarts or goes offline while games are active, &amp;lt;code&amp;gt;/restore_games&amp;lt;/code&amp;gt; brings them back. Restoration restores a channel&#039;s saved game state unconditionally rather than requiring the channel itself to be successfully re-resolved first — resolving the channel is only needed for the non-critical &amp;quot;welcome back&amp;quot; announcement and to restart [[#Timed Shiritori|Timed Shiritori]]&#039;s countdown, so a temporary hiccup reaching Discord&#039;s API can no longer cost a game its progress the way it once could.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;History:&#039;&#039; &amp;lt;code&amp;gt;/start_shiritori&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/restore_games&amp;lt;/code&amp;gt; could previously fail outright with a generic Discord &amp;quot;Unknown interaction&amp;quot; error if the command&#039;s own background work (acquiring a channel lock, or reading back saved game data) happened to take longer than Discord&#039;s 3-second initial-response window. Both commands now acknowledge the interaction immediately and send their actual response afterward, removing the crash.&lt;br /&gt;
&lt;br /&gt;
== Timed Shiritori ==&lt;br /&gt;
Timed Shiritori (referred to internally as Timer Mode) is an opt-in setting available when starting a game with &amp;lt;code&amp;gt;/start_shiritori&amp;lt;/code&amp;gt;. With it enabled, the game also ends if nobody plays a word before a countdown expires, in addition to the normal ways a game can end. The countdown shrinks over the course of a game, cycling from 10 seconds down to 5 seconds across 3,000 turns.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;/leaderboard&amp;lt;/code&amp;gt; includes a toggle to view Timed-Shiritori-only statistics separately from a server&#039;s overall multiplayer leaderboard.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;History:&#039;&#039; shortly after launch, Timed Shiritori had a restart-loop bug — an inactive channel&#039;s countdown was being started both at game creation and again after every automatic restart, so the countdown could expire before anyone had played a single word, ending and immediately restarting the same game roughly every 10 seconds. The countdown now only ever starts from an actual word being played (by a human, the AI, or Sniper), so an idle game no longer restarts itself in a loop.&lt;br /&gt;
&lt;br /&gt;
== Leveling and Experience ==&lt;br /&gt;
Every word played in multiplayer Shiritori grants experience points toward the player&#039;s level, viewable with &amp;lt;code&amp;gt;/level&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;!level&amp;lt;/code&amp;gt; and ranked server-wide with &amp;lt;code&amp;gt;/levels_leaderboard&amp;lt;/code&amp;gt;. On the bot&#039;s home server specifically, boosting that server grants a 1.8× experience multiplier; boosting a &#039;&#039;different&#039;&#039; server the bot is also present in grants a smaller 1.2× multiplier instead.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;History:&#039;&#039; the function that grants experience used to save the updated data to disk synchronously, directly on the bot&#039;s single shared event loop, every single time any word was played in any Shiritori game across every server — the single most frequently hit blocking operation in the bot at the time it was found, since it&#039;s on the game&#039;s core, most-used path. That save now happens on a background thread instead, so granting experience for one word no longer stalls every other concurrent game while it writes to disk.&lt;br /&gt;
&lt;br /&gt;
== Rules ==&lt;br /&gt;
# The next word must begin with the final letter of the previous word.&lt;br /&gt;
# Repeating a previously used word ends the game immediately.&lt;br /&gt;
# Playing twice in a row is not allowed; another player must take a turn before the same player can play again.&lt;br /&gt;
# Submitted words are checked against the bot&#039;s dictionary. &amp;lt;code&amp;gt;/check&amp;lt;/code&amp;gt; can confirm whether a word is valid before it is played.&lt;br /&gt;
&lt;br /&gt;
According to the bot&#039;s own in-game rules message for this mode, allowed word types are English words, hyphenated compounds, acronyms, and common names. Unique proper nouns and words containing numbers or symbols other than the hyphen and apostrophe are not allowed. The dictionary also contains words related to political topics, sexual orientation, and internet subculture slang; players are responsible for the words they choose to play within their own server&#039;s rules.&lt;br /&gt;
&lt;br /&gt;
== Milestones and Special Messages ==&lt;br /&gt;
Every 100 turns, the bot posts &amp;quot;Congrats we at turn {number} 🎉&amp;quot;, with the actual turn count filled in (for example, at turn 100, turn 200, and so on).&lt;br /&gt;
&lt;br /&gt;
Beyond that recurring announcement, seven specific individual turn numbers each carry their own one-off flavor message. These fall into two distinct categories: most of them react to &#039;&#039;whatever&#039;&#039; word is played on that turn, with a special variant only if the word happens to also match the milestone&#039;s theme; two of them (67 and 404) are silent unless the exact matching word is played, so most players never see them fire at all.&lt;br /&gt;
&lt;br /&gt;
=== Turn 42 ===&lt;br /&gt;
A reference to &#039;&#039;The Hitchhiker&#039;s Guide to the Galaxy&#039;&#039;. Any word played on turn 42 triggers a message: playing &amp;quot;forty-two&amp;quot; or &amp;quot;four-two&amp;quot; gets &amp;quot;&#039;&#039;&#039;42.&#039;&#039;&#039; The Answer to Life, the Universe, and Everything,&amp;quot; while any other word gets the plainer &amp;quot;Don&#039;t panic.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Turn 67 ===&lt;br /&gt;
A reference to the &amp;quot;6 7&amp;quot; internet meme. Unlike the other milestones, this one is entirely silent unless the word played on turn 67 is specifically &amp;quot;six-seven&amp;quot; or &amp;quot;sixty-seven&amp;quot; — any other word at turn 67 produces no special message at all. When it does trigger, the bot fetches a random GIF from an external service (Klipy) matching &amp;quot;67 meme&amp;quot;; if that service isn&#039;t configured or the request fails for any reason, it falls back to a plain text reaction instead of a GIF.&lt;br /&gt;
&lt;br /&gt;
=== Turn 69 ===&lt;br /&gt;
Any word played on turn 69 triggers a message: &amp;quot;sixty-nine&amp;quot; specifically gets &amp;quot;I was thinking that too 😏,&amp;quot; while any other word gets &amp;quot;Nice 😏.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Turn 404 ===&lt;br /&gt;
A reference to the HTTP &amp;quot;404 Not Found&amp;quot; error code. Like turn 67, this one is silent unless the word played is specifically &amp;quot;four-o-four.&amp;quot; When it triggers, it&#039;s a purely theatrical joke: the bot posts a fake system-crash message claiming an &amp;quot;unhandled exception&amp;quot; and an automatic restart, waits three seconds, then posts &amp;quot;&#039;&#039;&#039;jk.&#039;&#039;&#039; Carry on.&amp;quot; Nothing about the actual game or word history is touched during those three seconds — the word was already committed normally before the joke plays out.&lt;br /&gt;
&lt;br /&gt;
=== Turn 420 ===&lt;br /&gt;
Any word played on turn 420 triggers a message: playing &amp;quot;weed,&amp;quot; &amp;quot;four-twenty,&amp;quot; &amp;quot;baked,&amp;quot; &amp;quot;blazed,&amp;quot; &amp;quot;lit,&amp;quot; &amp;quot;high,&amp;quot; or &amp;quot;stoned&amp;quot; gets &amp;quot;You got some 🌿?&amp;quot;, while any other word gets &amp;quot;Live in the moment. 🌿&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Turn 666 ===&lt;br /&gt;
Any word played on turn 666 triggers a message: playing &amp;quot;six-six-six&amp;quot; or &amp;quot;six-hundred-sixty-six&amp;quot; gets &amp;quot;You tried to summon it, but the ritual failed,&amp;quot; styled with a pentagram symbol, while any other word gets the shorter &amp;quot;Something&#039;s watching.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Turn 777 ===&lt;br /&gt;
A casino-jackpot reference. Any word played on turn 777 triggers a message: playing &amp;quot;seven-seven-seven,&amp;quot; &amp;quot;seven-hundred-seventy-seven,&amp;quot; &amp;quot;triple-seven,&amp;quot; &amp;quot;jackpot,&amp;quot; or &amp;quot;lucky&amp;quot; gets &amp;quot;&#039;&#039;&#039;JACKPOT!!!&#039;&#039;&#039;&amp;quot; styled with slot-machine emoji, while any other word gets &amp;quot;feeling lucky? 🍀&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== AI Opponents ==&lt;br /&gt;
An AI opponent can be added with &amp;lt;code&amp;gt;/invite_ai&amp;lt;/code&amp;gt;, or a specific personality can be summoned using a text command such as &amp;lt;code&amp;gt;!noob&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;!assassin&amp;lt;/code&amp;gt;. An AI opponent is automatically removed after a period of inactivity. Personality behavior, summon success rates, and cooldowns are documented on [[AI Bots]].&lt;br /&gt;
&lt;br /&gt;
== Community Role Rewards ==&lt;br /&gt;
On the bot&#039;s official support server, [https://discord.gg/WahVXSkA7H Shiritori Central], reaching certain turn milestones in a multiplayer game triggers an automatic role award. When the milestone is reached, the bot awards the role to every one of the last up to 50 unique players who contributed a word to that game (AI and Sniper turns do not count).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Turn !! Role !! Message on success&lt;br /&gt;
|-&lt;br /&gt;
| 500 || 🔥5-Hundred Club🔥 || &amp;quot;Congrats {member}! You&#039;ve been awarded a role for recent Shiritori activity 🎉&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || 💯1k Gang💯 || &amp;quot;Congrats {member}! You&#039;ve been awarded a pretty rare role for the first Shiritori milestones 🎉&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Any qualifying player who already holds the role is skipped with a message noting that recent activity was detected but the role was already held, rather than being granted it again. This mechanic is specific to Shiritori Central and does not occur on other servers running the bot.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;History:&#039;&#039; the draw originally only considered players who were already visible in the server&#039;s cached member list at the moment the milestone was hit, silently excluding anyone playing from another server or simply not yet cached — with no record that they&#039;d ever been in the running, and no way to recover the missed reward afterward. The draw was then changed to pick from the full candidate pool regardless of whether a player is currently resolvable, with an unresolvable pick logged durably and granted automatically the moment they&#039;re later seen as a member of the server, rather than being lost.&lt;br /&gt;
&lt;br /&gt;
It was still, at that point, a single random winner drawn from that pool despite up to 50 players qualifying each time — a mismatch caught from a direct report that only one person was ever receiving the reward. It now awards every qualifying player rather than picking just one, with the same per-player resolution and durable-queue handling described above applied individually to each of them, paced with a short delay between grants so a milestone with many qualifying players doesn&#039;t fire a burst of Discord API calls all at once.&lt;br /&gt;
&lt;br /&gt;
== Ending a Game ==&lt;br /&gt;
A game ends immediately if a repeated word is played, or if it is manually ended with &amp;lt;code&amp;gt;/end_shiritori&amp;lt;/code&amp;gt;. Ending a game displays a summary of the match&#039;s statistics. Unless the game was ended by an admin, a new game starts automatically in the same channel after a 2-minute cooldown.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;History:&#039;&#039; &amp;lt;code&amp;gt;/end_shiritori&amp;lt;/code&amp;gt; shared the same &amp;quot;Unknown interaction&amp;quot; crash risk described above under [[#Starting a Game|Starting a Game]], since ending a game also does real background work (releasing the channel lock and compiling the closing statistics) before responding. It received the same immediate-acknowledgment fix.&lt;br /&gt;
&lt;br /&gt;
== Etiquette ==&lt;br /&gt;
There is no anti-cheat system, and consulting outside references is not blocked, though relying on one&#039;s own vocabulary is considered part of the spirit of the game. &amp;lt;code&amp;gt;!status&amp;lt;/code&amp;gt; displays the current game&#039;s progress, including words played, average word length, and the next required letter. Players should use discretion with obscure or explicit words in line with their server&#039;s own rules.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Super-Shiritori]]&lt;br /&gt;
* [[AI Bots]]&lt;br /&gt;
* [[Solo Shiritori]]&lt;br /&gt;
* [[Protori]]&lt;br /&gt;
* [[Manual-Tori]]&lt;br /&gt;
* [[Achievements]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Information]]&lt;br /&gt;
[[Category:Games(bot)]]&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=AI_Bots&amp;diff=10</id>
		<title>AI Bots</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=AI_Bots&amp;diff=10"/>
		<updated>2026-08-23T21:22:03Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= AI Bots =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;AI Bots are computer-controlled opponents available in [[Super-Shiritori]]. Each bot operates under one of twenty-six &#039;&#039;&#039;personalities&#039;&#039;&#039; — a set of word-selection rules that determines the kind of word it looks for on its turn. A personality can be assigned at random when an AI is invited into a game, triggered manually with a dedicated chat command, or switched automatically as a game progresses. Two further AI types, the &#039;&#039;&#039;Sniper AI&#039;&#039;&#039; and &#039;&#039;&#039;Assassin AI&#039;&#039;&#039;, layer additional mechanics on top of this base system. This page describes AI Bots as they work in [[Multiplayer Shiritori]]; [[Solo Shiritori]] uses the same underlying personality and word-selection system for its single AI opponent, though without Sniper AI, Assassin AI, the manual summon commands, or &#039;&#039;&#039;LARP&#039;&#039;&#039; — LARP is deliberately left out of Solo Shiritori&#039;s personality pool entirely, since it depends on a real server member to impersonate and a multiplayer-only leaderboard that Solo Shiritori&#039;s private practice thread has no equivalent of. AI Bots have no presence in [[Protori]] at all — attempting to invite one there is rejected outright.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
An AI opponent is added to an ongoing multiplayer Shiritori game with the &amp;lt;code&amp;gt;/invite_ai&amp;lt;/code&amp;gt; command, provided no AI is already present in that game. Its starting personality is chosen at random from a fixed set of &#039;&#039;natural spawn weights&#039;&#039; (see [[#Personalities|Personalities]] below); heavier-weighted personalities such as &#039;&#039;&#039;AVERAGE&#039;&#039;&#039; and &#039;&#039;&#039;ROOKIE&#039;&#039;&#039; are more likely to appear than rarer ones such as &#039;&#039;&#039;NOOB&#039;&#039;&#039; or &#039;&#039;&#039;ASSASSIN&#039;&#039;&#039;. Once summoned, the AI waits two to three seconds before playing each word.&lt;br /&gt;
&lt;br /&gt;
Players can override whichever personality is currently active by typing that personality&#039;s dedicated chat command (for example, &amp;lt;code&amp;gt;!pro&amp;lt;/code&amp;gt; to force a switch to &#039;&#039;&#039;PRO&#039;&#039;&#039;). Each command has its own cooldown and its own chance of actually succeeding; a failed attempt leaves the current AI in place. An AI opponent that receives no valid input for five minutes automatically leaves the game with the message: &amp;lt;blockquote&amp;gt;&amp;quot;⏳ &#039;&#039;&#039;{personality} AI&#039;&#039;&#039; has lost interest and left! Do &amp;lt;code&amp;gt;/invite_ai&amp;lt;/code&amp;gt; to reinvite one.&amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;/murder_ai&amp;lt;/code&amp;gt; command removes the active AI outright. Against any personality other than &#039;&#039;&#039;ASSASSIN&#039;&#039;&#039;, this always succeeds; see [[#Assassin AI|Assassin AI]] below for the special case.&lt;br /&gt;
&lt;br /&gt;
== Personalities ==&lt;br /&gt;
The table below lists all twenty-six personalities, the manual chat command used to force a switch to that personality, that command&#039;s cooldown and success chance, the personality&#039;s weight in the natural random-spawn pool, and a summary of how it chooses words. Word-selection rules are evaluated against the dictionary words that legally follow the previous word&#039;s last letter; where a personality&#039;s preferred pool turns up empty, it falls back to a broader rule rather than failing to move.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!Personality&lt;br /&gt;
!Command&lt;br /&gt;
!Cooldown&lt;br /&gt;
!Success chance&lt;br /&gt;
!Spawn weight&lt;br /&gt;
!Word selection&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;NOOB&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;code&amp;gt;!noob&amp;lt;/code&amp;gt;&lt;br /&gt;
|1 minute&lt;br /&gt;
|100%&lt;br /&gt;
|1.0%&lt;br /&gt;
|1–5 letters; no hyphens or apostrophes; must contain a vowel.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;ROOKIE&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;code&amp;gt;!rookie&amp;lt;/code&amp;gt;&lt;br /&gt;
|2 minutes&lt;br /&gt;
|85%&lt;br /&gt;
|10.45%&lt;br /&gt;
|3–9 letters; at most one hyphen; never both a hyphen and an apostrophe.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;AVERAGE&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;code&amp;gt;!average&amp;lt;/code&amp;gt;&lt;br /&gt;
|3 minutes&lt;br /&gt;
|75%&lt;br /&gt;
|11.45%&lt;br /&gt;
|4–12 letters; never both a hyphen and an apostrophe.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;PRO&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;code&amp;gt;!pro&amp;lt;/code&amp;gt;&lt;br /&gt;
|10 minutes&lt;br /&gt;
|50%&lt;br /&gt;
|8.45%&lt;br /&gt;
|12 letters or longer.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;FAVORITIST&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;code&amp;gt;!fav&amp;lt;/code&amp;gt;&lt;br /&gt;
|12 minutes&lt;br /&gt;
|55%&lt;br /&gt;
|5.45%&lt;br /&gt;
|Rolls a random &amp;quot;favorite&amp;quot; letter on first becoming active and, for the rest of that stint, only plays words ending in it; re-rolls the favorite letter the next time it becomes active again.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;NUMBERPHILE&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;code&amp;gt;!numbers&amp;lt;/code&amp;gt;&lt;br /&gt;
|13 minutes&lt;br /&gt;
|50%&lt;br /&gt;
|6.0%&lt;br /&gt;
|Only plays spelled-out numbers (e.g. &#039;&#039;seventeen&#039;&#039;), including hyphenated compounds such as &#039;&#039;twenty-one&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;FEARLESS&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;code&amp;gt;!boo&amp;lt;/code&amp;gt;&lt;br /&gt;
|13 minutes&lt;br /&gt;
|50%&lt;br /&gt;
|5.0%&lt;br /&gt;
|Draws only from a curated list of phobia-related terms; falls back to any valid word if none are available.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;MINIMALIST&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;code&amp;gt;!minimal&amp;lt;/code&amp;gt;&lt;br /&gt;
|14 minutes&lt;br /&gt;
|45%&lt;br /&gt;
|4.0%&lt;br /&gt;
|1–3 letters; falls back to ROOKIE&#039;s 3–9 letter range if none are available.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;PASTER&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;code&amp;gt;!paster&amp;lt;/code&amp;gt;&lt;br /&gt;
|15 minutes&lt;br /&gt;
|45%&lt;br /&gt;
|2.0%&lt;br /&gt;
|30 letters or longer.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;VOWELLESS&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;code&amp;gt;!vowelless&amp;lt;/code&amp;gt;&lt;br /&gt;
|15 minutes&lt;br /&gt;
|45%&lt;br /&gt;
|2.0%&lt;br /&gt;
|Contains no vowels; if no vowel-free word exists for the required letter, passes the turn entirely rather than playing one that does (see [[#History|History]] below).&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;PALINDROMIC&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;code&amp;gt;!palindrome&amp;lt;/code&amp;gt;&lt;br /&gt;
|15 minutes&lt;br /&gt;
|45%&lt;br /&gt;
|2.5%&lt;br /&gt;
|Only plays palindromes; falls back to AVERAGE&#039;s rules if none are available.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;MIMIC&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;code&amp;gt;!mimic&amp;lt;/code&amp;gt;&lt;br /&gt;
|16 minutes&lt;br /&gt;
|40%&lt;br /&gt;
|6.45%&lt;br /&gt;
|Tries to play an exact anagram of the previous player&#039;s word; failing that, plays the word closest to it by edit (Levenshtein) distance instead (see [[#History|History]] below).&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;CONNOISSEUR&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;code&amp;gt;!yumyum&amp;lt;/code&amp;gt;&lt;br /&gt;
|15 minutes&lt;br /&gt;
|45%&lt;br /&gt;
|5.5%&lt;br /&gt;
|Prefers a curated list of food and drink vocabulary; falls back to any valid word.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;FLORIOGRAPHIST&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;code&amp;gt;!flower&amp;lt;/code&amp;gt;&lt;br /&gt;
|17 minutes&lt;br /&gt;
|40%&lt;br /&gt;
|3.5%&lt;br /&gt;
|Prefers a curated list of plant and flower names; falls back to any valid word.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;GEOGRAPHICAL-WIZARD&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;code&amp;gt;!tnym&amp;lt;/code&amp;gt;&lt;br /&gt;
|17 minutes&lt;br /&gt;
|42%&lt;br /&gt;
|4.5%&lt;br /&gt;
|Prefers country and place names; falls back to any valid word.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;ASTRONOMER&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;code&amp;gt;!spacey&amp;lt;/code&amp;gt;&lt;br /&gt;
|19 minutes&lt;br /&gt;
|35%&lt;br /&gt;
|3.0%&lt;br /&gt;
|Prefers a curated list of space and astronomy vocabulary; falls back to any valid word.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;POKEFAN&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;code&amp;gt;!pajokeamon&amp;lt;/code&amp;gt;&lt;br /&gt;
|15 minutes&lt;br /&gt;
|45%&lt;br /&gt;
|1.5%&lt;br /&gt;
|Prefers Pokémon species names; falls back to any valid word.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;LINGUIST&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;code&amp;gt;!lang&amp;lt;/code&amp;gt;&lt;br /&gt;
|18 minutes&lt;br /&gt;
|33%&lt;br /&gt;
|6.5%&lt;br /&gt;
|Prefers language names; falls back to any valid word.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;CHEMIST&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;code&amp;gt;!chem&amp;lt;/code&amp;gt;&lt;br /&gt;
|18 minutes&lt;br /&gt;
|35%&lt;br /&gt;
|1.75%&lt;br /&gt;
|Prefers a curated list of chemistry vocabulary, avoiding InChIKey-format entries (long machine-generated chemical identifiers, technically valid dictionary words but not real chemical names) when a proper chemistry word is available; falls back to InChIKeys, then to PRO&#039;s 12+-letter rule, then to any valid word.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;GEOLOGIST&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;code&amp;gt;!geo&amp;lt;/code&amp;gt;&lt;br /&gt;
|16 minutes&lt;br /&gt;
|40%&lt;br /&gt;
|1.5%&lt;br /&gt;
|Prefers a curated list of mineral and geology vocabulary; falls back to any valid word.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;MATHEMATICIAN&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;code&amp;gt;!x&amp;lt;/code&amp;gt;&lt;br /&gt;
|15 minutes&lt;br /&gt;
|42%&lt;br /&gt;
|1.5%&lt;br /&gt;
|Prefers a curated list of mathematics vocabulary; falls back to any valid word.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;DOCTRINAIRE&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;code&amp;gt;!ismism&amp;lt;/code&amp;gt;&lt;br /&gt;
|15 minutes&lt;br /&gt;
|45%&lt;br /&gt;
|1.5%&lt;br /&gt;
|Prefers a curated list of ideology, religion, and cult-related vocabulary; falls back to any valid word.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;COLORPICKER&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;code&amp;gt;!rgb&amp;lt;/code&amp;gt;&lt;br /&gt;
|16 minutes&lt;br /&gt;
|40%&lt;br /&gt;
|1.5%&lt;br /&gt;
|Prefers a curated list of color names; falls back to any valid word.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;WITCH-DOCTOR&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;code&amp;gt;!doc&amp;lt;/code&amp;gt;&lt;br /&gt;
|15 minutes&lt;br /&gt;
|45%&lt;br /&gt;
|1.5%&lt;br /&gt;
|Prefers a curated list of anatomy, physiology, and pathology vocabulary; falls back to any valid word.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;ASSASSIN&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;code&amp;gt;!assassin&amp;lt;/code&amp;gt;&lt;br /&gt;
|15 minutes&lt;br /&gt;
|40%&lt;br /&gt;
|1.0%&lt;br /&gt;
|See [[#Assassin AI|Assassin AI]] below.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;LARP&#039;&#039;&#039;&lt;br /&gt;
|&amp;lt;code&amp;gt;!larp&amp;lt;/code&amp;gt;&lt;br /&gt;
|30 minutes&lt;br /&gt;
|0.5%&lt;br /&gt;
|0.5%&lt;br /&gt;
|See [[#LARP AI|LARP AI]] below.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== History ===&lt;br /&gt;
&#039;&#039;&#039;VOWELLESS&#039;&#039;&#039; had a complete, working set of word-selection rules from early on, but for a period was entirely unreachable in practice: it was missing from the natural spawn-weight table, so it could never be chosen by &amp;lt;code&amp;gt;/invite_ai&amp;lt;/code&amp;gt; or a dynamic personality switch, and had no manual chat command of its own. It was subsequently added to the spawn table — sharing the lowest weight tier with &#039;&#039;&#039;PASTER&#039;&#039;&#039; — and given the dedicated &amp;lt;code&amp;gt;!vowelless&amp;lt;/code&amp;gt; command listed above.&lt;br /&gt;
&lt;br /&gt;
VOWELLESS previously fell back to a short (1–5 letter) word containing a vowel whenever no vowel-free word existed for the required letter — the exact thing it&#039;s supposed to never do. Since no word beginning with a vowel can itself be vowel-free, this fallback was firing on roughly one in every four or five turns, not as a rare edge case. It now passes the turn entirely instead: in [[Multiplayer Shiritori]] this is silent, simply handing the turn back to the next human player; in [[Solo Shiritori]] (a strict two-player loop with no one else to hand the turn to) it instead announces that VOWELLESS &amp;quot;leaves&amp;quot; and is immediately replaced by a freshly-rolled personality — never VOWELLESS or LARP again — that takes the same turn in its place.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;MIMIC&#039;&#039;&#039; previously matched an exact anagram of the previous word when one existed (rare) and otherwise fell back to matching only the previous word&#039;s hyphen/apostrophe &#039;&#039;count&#039;&#039; — effectively a near-random pick with no real resemblance to what was just played. It now falls back to the real dictionary word closest to the previous one by edit (Levenshtein) distance instead, timeboxed to roughly 5 seconds so an unusually long search can&#039;t stall a turn; whatever is best-so-far when that budget runs out is what gets played.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;CHEMIST&#039;&#039;&#039;, &#039;&#039;&#039;GEOLOGIST&#039;&#039;&#039;, &#039;&#039;&#039;MATHEMATICIAN&#039;&#039;&#039;, &#039;&#039;&#039;DOCTRINAIRE&#039;&#039;&#039;, and &#039;&#039;&#039;COLORPICKER&#039;&#039;&#039; were added as a set of new dictionary-linked personalities. GEOLOGIST, MATHEMATICIAN, DOCTRINAIRE, and COLORPICKER draw from existing &amp;lt;code&amp;gt;/dictionaries&amp;lt;/code&amp;gt; categories (Geology, Mathology, Ideologies/Religions/Cults, and Colorology respectively) that had simply never had a personality attached to them before. CHEMIST is paired with a brand-new &amp;quot;Chemistry&amp;quot; category, added at the same time — its backing word list already existed in the dictionary and had quietly been wired into two unrelated curator-facing systems for a while, but had never been exposed as its own browsable category until now. Adding CHEMIST alone pushed the underlying probability table fractionally over 100%, which silently forced the auto-computed spawn weight for &#039;&#039;&#039;ASSASSIN&#039;&#039;&#039; negative — undetected until it was caught during the follow-up work adding the other four, since the crash it would eventually have caused (a negative weight breaking the random draw) hadn&#039;t yet been triggered. Fixed by trimming five percentage points off the five most common personalities (reflected in the table above) rather than off ASSASSIN, restoring its original 1.0% weight exactly.&lt;br /&gt;
&lt;br /&gt;
CHEMIST briefly had a real wiring gap after it first shipped: its word list was only ever populated by the periodic dictionary-change watcher, which only fires when a dictionary file&#039;s contents actually change — meaning CHEMIST&#039;s word pool silently stayed empty for an entire bot session unless some unrelated dictionary file happened to get edited afterward, causing it to always fall back to PRO&#039;s long-word rule instead of playing real chemistry words. It is now also populated directly at startup, alongside every other category, so it works correctly from the moment the bot comes online.&lt;br /&gt;
&lt;br /&gt;
Corrected for the record: the &#039;&#039;&#039;Sniper AI&#039;&#039;&#039; figures in this article (0.1% passive spawn, 20% via &amp;lt;code&amp;gt;!snipe&amp;lt;/code&amp;gt;) are the actual values used by the game — an unrelated benchmark once suggested elsewhere (that &amp;lt;code&amp;gt;!snipe&amp;lt;/code&amp;gt; itself succeeds only &amp;quot;1 in 100&amp;quot; of the time) does not match the code and is not reflected here.&lt;br /&gt;
&lt;br /&gt;
Shortly after LARP AI launched, its webhook impersonation was confirmed not actually firing live: turn messages were showing up under the bot&#039;s own name and avatar with a plain &amp;quot;AI:&amp;quot; label instead of the impersonated member&#039;s identity. The underlying cause is a missing &#039;&#039;&#039;Manage Webhooks&#039;&#039;&#039; permission for the bot&#039;s role, which is required for any bot to send a message under another identity on Discord — that failure was previously being swallowed into a generic, easy-to-miss log line. It now logs an explicit, actionable message identifying the missing permission, and the non-impersonated fallback message was also changed to drop the &amp;quot;AI:&amp;quot; label entirely, consistent with LARP never naming itself even when impersonation can&#039;t fire.&lt;br /&gt;
&lt;br /&gt;
Several game-management slash commands — including &amp;lt;code&amp;gt;/invite_ai&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/murder_ai&amp;lt;/code&amp;gt; — could previously fail outright with a generic Discord &amp;quot;Unknown interaction&amp;quot; error under load, because they could end up waiting on a lock (held by an in-flight AI turn, or, for &amp;lt;code&amp;gt;/invite_ai&amp;lt;/code&amp;gt;, on LARP&#039;s own activation lookup) for longer than Discord&#039;s 3-second initial-response window. Both commands now acknowledge the interaction immediately and send their actual response afterward, removing the crash.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;WITCH-DOCTOR&#039;&#039;&#039; was added later as a further single-category personality, drawing from the pre-existing Anatomy Physiology Pathology (APP) &amp;lt;code&amp;gt;/dictionaries&amp;lt;/code&amp;gt; category — community-named after a Discord suggestion. Unlike CHEMIST, it carries no special exclusions of its own (no InChIKey-style filtering or equivalent), and unlike CHEMIST&#039;s original addition above, its backing word set was already reliably loaded both at startup and on every live refresh, so it didn&#039;t repeat that same wiring gap. Its spawn weight was freed up the same way as every other addition in this run: trimming another 1.5 percentage points off AVERAGE, leaving ASSASSIN&#039;s own weight untouched.&lt;br /&gt;
&lt;br /&gt;
== Dynamic personality switching ==&lt;br /&gt;
A regular (non-Sniper, non-Assassin-locked) AI opponent does not necessarily keep the same personality for an entire game. Every ten rounds of play (round 10, 20, 30, and so on), there is a 70% chance the AI re-rolls its personality. The odds used for this roll start as a copy of the natural spawn weights above, but drift as the game goes on: each time a re-roll occurs, one randomly chosen personality&#039;s weight shifts up or down by five percentage points (bounded between 1% and 95%), and the difference is redistributed across the remaining personalities. This means the effective odds of any given personality appearing can diverge noticeably from the base table by the end of a long game. When a switch occurs, the bot announces it in the channel:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot;&#039;&#039;AI personality re-evaluated! Now playing as &#039;&#039;&#039;{personality}&#039;&#039;&#039;.&#039;&#039;&amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
If a dynamic switch lands on &#039;&#039;&#039;ASSASSIN&#039;&#039;&#039;, the player whose word triggered that turn is credited with surviving it — see [[#Related achievements|Related achievements]] below.&lt;br /&gt;
&lt;br /&gt;
== Sniper AI ==&lt;br /&gt;
&#039;&#039;&#039;Sniper AI&#039;&#039;&#039; is a one-shot opponent, separate from the personality system above, that plays a single dramatic word and then leaves. It can appear in a multiplayer Shiritori game in two ways:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Naturally&#039;&#039;&#039;: after every word a human player plays, there is a 0.1% (1 in 1,000) chance that Sniper AI takes that turn instead of whichever regular AI personality is currently active.&lt;br /&gt;
* &#039;&#039;&#039;Manually&#039;&#039;&#039;: the &amp;lt;code&amp;gt;!snipe&amp;lt;/code&amp;gt; command (10-minute cooldown) attempts to summon Sniper AI on demand, but only succeeds 20% of the time. On failure, Sniper AI responds with one of several dismissive rejection lines, for example:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot;&#039;&#039;&#039;SNIPER AI:&#039;&#039;&#039; I don&#039;t do charity shots.&amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once triggered, Sniper AI selects a word at random from the 350 longest words in the dictionary (ten letters or more, computed once at startup) that begin with the required letter and have not already been played. If no such word exists, it declines with:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot;🔭 Sniper AI peered through the scope but saw no opening...&amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
A natural spawn that finds no word grants the &#039;&#039;&#039;AWOL&#039;&#039;&#039; achievement to the player whose word triggered the Sniper&#039;s turn; a self-summoned &amp;lt;code&amp;gt;!snipe&amp;lt;/code&amp;gt; that finds no word grants &#039;&#039;&#039;Wrong Timing&#039;&#039;&#039; instead.&lt;br /&gt;
&lt;br /&gt;
If a word is found, it is subject to the same [[#AI failure event|AI failure event]] check as a regular AI turn before being played. On success, the event is logged (natural and summoned encounters are counted separately and persisted) to a designated log channel, and to any channel a server has separately configured for it. Successfully summoning Sniper AI via &amp;lt;code&amp;gt;!snipe&amp;lt;/code&amp;gt; grants the &#039;&#039;&#039;Sniper&#039;s Mark&#039;&#039;&#039; achievement.&lt;br /&gt;
&lt;br /&gt;
Sniper AI cannot appear in [[Protori]] matches; attempting &amp;lt;code&amp;gt;!snipe&amp;lt;/code&amp;gt; there is rejected outright.&lt;br /&gt;
&lt;br /&gt;
== Assassin AI ==&lt;br /&gt;
&#039;&#039;&#039;ASSASSIN&#039;&#039;&#039; can appear as a personality like any other — through the natural spawn pool, a dynamic switch, or the dedicated &amp;lt;code&amp;gt;!assassin&amp;lt;/code&amp;gt; command — and while active, uses its own word-selection rule: it prioritizes possessive words (ending in an apostrophe) within ROOKIE&#039;s 3–9 letter range, falling back to ROOKIE&#039;s ordinary rules if no possessive word is available.&lt;br /&gt;
&lt;br /&gt;
=== Summoning with &amp;lt;code&amp;gt;!assassin&amp;lt;/code&amp;gt; ===&lt;br /&gt;
&amp;lt;code&amp;gt;!assassin&amp;lt;/code&amp;gt; (15-minute cooldown) has a 40% chance to succeed. On success, it replaces whatever AI personality is currently active with &#039;&#039;&#039;ASSASSIN&#039;&#039;&#039; outright, bypassing the normal spawn odds, and grants the invoking player the &#039;&#039;&#039;Assassin&#039;s Ally&#039;&#039;&#039; achievement:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot;🔪 &#039;&#039;&#039;ASSASSIN AI&#039;&#039;&#039; silently disposes of the {previous personality} AI and takes control!&amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
The remaining 60% of attempts fail, silencing the invoking player until 30 more valid words have been played by anyone in the game:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot;🔪 The &#039;&#039;&#039;ASSASSIN AI&#039;&#039;&#039; deems you unworthy. You are silenced until &#039;&#039;&#039;30&#039;&#039;&#039; more valid words are played.&amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Only one Assassin AI can hold control of a game at a time.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;/murder_ai&amp;lt;/code&amp;gt; and Assassin AI ===&lt;br /&gt;
&amp;lt;code&amp;gt;/murder_ai&amp;lt;/code&amp;gt; is guaranteed to remove any personality other than &#039;&#039;&#039;ASSASSIN&#039;&#039;&#039; and grants the &#039;&#039;&#039;Murder Most Foul&#039;&#039;&#039; achievement:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot;🗡️ The deed is done. The AI collapses and the arena exhales.&amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
Against &#039;&#039;&#039;ASSASSIN&#039;&#039;&#039; specifically, the odds invert: &amp;lt;code&amp;gt;/murder_ai&amp;lt;/code&amp;gt; succeeds only 1% of the time, granting &#039;&#039;&#039;Assassin&#039;s Bane&#039;&#039;&#039;:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot;🩸💀 A whisper cuts through the void... The unthinkable happens. `ASSASSIN AI` falls to your blade. The arena grows still.&amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
The other 99% of attempts backfire, silencing the invoking player until 120 more valid words have been played — four times the penalty for a failed &amp;lt;code&amp;gt;!assassin&amp;lt;/code&amp;gt; summon:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot;🔪 The &#039;&#039;&#039;ASSASSIN AI&#039;&#039;&#039; anticipates your strike and turns your will to silence. You are muted for the next &#039;&#039;&#039;120&#039;&#039;&#039; valid words.&amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
A player who has earned both &#039;&#039;&#039;Murder Most Foul&#039;&#039;&#039; and &#039;&#039;&#039;Assassin&#039;s Bane&#039;&#039;&#039; unlocks &#039;&#039;&#039;New Assassin&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== LARP AI ==&lt;br /&gt;
&#039;&#039;&#039;LARP&#039;&#039;&#039; is the rarest personality in the game by deliberate design — exactly half the natural spawn weight of &#039;&#039;&#039;ASSASSIN&#039;&#039;&#039; (0.5% vs. 1.0%), a manual &amp;lt;code&amp;gt;!larp&amp;lt;/code&amp;gt; success chance kept intentionally under 1%, and the longest cooldown of any personality command at 30 minutes. Unlike every other personality, which only changes &#039;&#039;which&#039;&#039; words get played, LARP changes &#039;&#039;who the AI appears to be&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
On activation, LARP randomly selects a member from that server&#039;s Dictionary Completion leaderboard (the same top-10-by-unique-words pool and sort order &amp;lt;code&amp;gt;/leaderboard category:completion&amp;lt;/code&amp;gt; uses, scoped to the current server only, never global), then plays only words that member has personally played in multiplayer Shiritori on that server. If the server has no completion-leaderboard history yet, or none of its top 10 players are currently resolvable as members, LARP cannot activate and a different personality is chosen in its place.&lt;br /&gt;
&lt;br /&gt;
LARP is never named &amp;quot;LARP&amp;quot; or &amp;quot;Larping AI&amp;quot; in any player-visible message — turn announcements, personality-switch messages, and murder/assassinate confirmations all refer to it generically as &amp;quot;AI&amp;quot; instead. The one exception is the moment it first activates, when it posts a comedic reveal line naming the person it&#039;s impersonating, for example:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot;Larpin- wait what thats not LARPING AI thats &#039;&#039;&#039;{name}&#039;&#039;&#039;?? no way theyre online?&amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
From that point on, LARP&#039;s turns are posted through a real Discord webhook using the impersonated member&#039;s live display name and avatar — genuinely impersonating them rather than merely labeling a message with their name. This requires the bot to hold the &#039;&#039;&#039;Manage Webhooks&#039;&#039;&#039; permission in that server or channel; without it, LARP&#039;s turns fall back to a plain, unlabeled message (no impersonation, and no &amp;quot;AI&amp;quot; label either) rather than breaking.&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;code&amp;gt;!assassin&amp;lt;/code&amp;gt; versus LARP AI ===&lt;br /&gt;
Because LARP&#039;s impersonation is &amp;quot;convincing,&amp;quot; a successful &amp;lt;code&amp;gt;!assassin&amp;lt;/code&amp;gt; roll (the normal 40% chance) does not instantly take control of an active LARP the way it does against every other personality. Instead:&lt;br /&gt;
* &#039;&#039;&#039;1% mishap&#039;&#039;&#039;: Assassin AI is fooled completely and goes after the &#039;&#039;real&#039;&#039; person LARP is impersonating instead of LARP itself. That person is silenced for 500 valid words — the same mechanism as an ordinary failed-assassination penalty, just against an uninvolved bystander — and LARP itself is left completely untouched.&lt;br /&gt;
* &#039;&#039;&#039;99% of the time&#039;&#039;&#039;: a chase begins. From then on, every AI turn opportunity is a fresh coin flip between ASSASSIN and LARP rather than the normal reroll logic, with each side&#039;s turn played under its own ordinary rules. Landing on the same side three times &#039;&#039;in a row&#039;&#039; ends the chase with ASSASSIN taking control outright; landing on LARP&#039;s side five times in a row instead ends it with LARP shaking Assassin off and continuing as before. Any turn for the other side resets a streak back to zero, so the sequence has to be genuinely consecutive.&lt;br /&gt;
&lt;br /&gt;
== AI failure event ==&lt;br /&gt;
Every time any AI — whether a regular personality or Sniper AI — is about to play a word, there is a 1 in 27,963,028 chance that it instead plays a word that does not start with the required letter, an outcome the game treats as an AI malfunction. When it triggers, the game ends immediately with a message in the AI&#039;s own voice:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;quot;&#039;&#039;&#039;NO WAY&#039;&#039;&#039; the AI failed like it failed yk how rare that is its like 1/(27,963,028) thats like 0.0000035761% like your lucky or unlucky no way? i guess the AI failed geez? you won? i think?&amp;quot;&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
The first player to witness this — whether from a regular AI or from Sniper AI — is awarded the &#039;&#039;&#039;Man Beats Machine&#039;&#039;&#039; achievement.&lt;br /&gt;
&lt;br /&gt;
== Statistics ==&lt;br /&gt;
The table below combines each command&#039;s manual success chance with the 1 in 27,963,028 AI failure roll to give the true odds of witnessing an AI failure &#039;&#039;immediately after&#039;&#039; successfully summoning that personality with its dedicated command (or, for Sniper AI, after a successful natural spawn or &amp;lt;code&amp;gt;!snipe&amp;lt;/code&amp;gt; summon). These are derived figures, not values stored directly in the game&#039;s configuration.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
!AI&lt;br /&gt;
!Summon success&lt;br /&gt;
!Combined odds&lt;br /&gt;
!Combined odds (%)&lt;br /&gt;
|-&lt;br /&gt;
|NOOB&lt;br /&gt;
|100%&lt;br /&gt;
|1 in 27,963,028&lt;br /&gt;
|0.0000035761%&lt;br /&gt;
|-&lt;br /&gt;
|ROOKIE&lt;br /&gt;
|85%&lt;br /&gt;
|1 in 32,897,680&lt;br /&gt;
|0.0000030402%&lt;br /&gt;
|-&lt;br /&gt;
|AVERAGE&lt;br /&gt;
|75%&lt;br /&gt;
|1 in 37,284,037&lt;br /&gt;
|0.0000026822%&lt;br /&gt;
|-&lt;br /&gt;
|PRO&lt;br /&gt;
|50%&lt;br /&gt;
|1 in 55,926,056&lt;br /&gt;
|0.0000017880%&lt;br /&gt;
|-&lt;br /&gt;
|FAVORITIST&lt;br /&gt;
|55%&lt;br /&gt;
|1 in 50,841,869&lt;br /&gt;
|0.0000019669%&lt;br /&gt;
|-&lt;br /&gt;
|NUMBERPHILE&lt;br /&gt;
|50%&lt;br /&gt;
|1 in 55,926,056&lt;br /&gt;
|0.0000017880%&lt;br /&gt;
|-&lt;br /&gt;
|FEARLESS&lt;br /&gt;
|50%&lt;br /&gt;
|1 in 55,926,056&lt;br /&gt;
|0.0000017880%&lt;br /&gt;
|-&lt;br /&gt;
|MINIMALIST&lt;br /&gt;
|45%&lt;br /&gt;
|1 in 62,140,062&lt;br /&gt;
|0.0000016093%&lt;br /&gt;
|-&lt;br /&gt;
|PASTER&lt;br /&gt;
|45%&lt;br /&gt;
|1 in 62,140,062&lt;br /&gt;
|0.0000016093%&lt;br /&gt;
|-&lt;br /&gt;
|VOWELLESS&lt;br /&gt;
|45%&lt;br /&gt;
|1 in 62,140,062&lt;br /&gt;
|0.0000016093%&lt;br /&gt;
|-&lt;br /&gt;
|PALINDROMIC&lt;br /&gt;
|45%&lt;br /&gt;
|1 in 62,140,062&lt;br /&gt;
|0.0000016093%&lt;br /&gt;
|-&lt;br /&gt;
|CONNOISSEUR&lt;br /&gt;
|45%&lt;br /&gt;
|1 in 62,140,062&lt;br /&gt;
|0.0000016093%&lt;br /&gt;
|-&lt;br /&gt;
|POKEFAN&lt;br /&gt;
|45%&lt;br /&gt;
|1 in 62,140,062&lt;br /&gt;
|0.0000016093%&lt;br /&gt;
|-&lt;br /&gt;
|GEOGRAPHICAL-WIZARD&lt;br /&gt;
|42%&lt;br /&gt;
|1 in 66,578,638&lt;br /&gt;
|0.0000015020%&lt;br /&gt;
|-&lt;br /&gt;
|MIMIC&lt;br /&gt;
|40%&lt;br /&gt;
|1 in 69,907,570&lt;br /&gt;
|0.0000014305%&lt;br /&gt;
|-&lt;br /&gt;
|FLORIOGRAPHIST&lt;br /&gt;
|40%&lt;br /&gt;
|1 in 69,907,570&lt;br /&gt;
|0.0000014305%&lt;br /&gt;
|-&lt;br /&gt;
|ASSASSIN (via &amp;lt;code&amp;gt;!assassin&amp;lt;/code&amp;gt;)&lt;br /&gt;
|40%&lt;br /&gt;
|1 in 69,907,570&lt;br /&gt;
|0.0000014305%&lt;br /&gt;
|-&lt;br /&gt;
|ASTRONOMER&lt;br /&gt;
|35%&lt;br /&gt;
|1 in 79,894,366&lt;br /&gt;
|0.0000012517%&lt;br /&gt;
|-&lt;br /&gt;
|LINGUIST&lt;br /&gt;
|33%&lt;br /&gt;
|1 in 84,736,448&lt;br /&gt;
|0.0000011801%&lt;br /&gt;
|-&lt;br /&gt;
|SNIPER (via &amp;lt;code&amp;gt;!snipe&amp;lt;/code&amp;gt;)&lt;br /&gt;
|20%&lt;br /&gt;
|1 in 139,815,140&lt;br /&gt;
|0.0000007152%&lt;br /&gt;
|-&lt;br /&gt;
|SNIPER (natural spawn)&lt;br /&gt;
|0.1%&lt;br /&gt;
|1 in 27,963,028,000&lt;br /&gt;
|0.0000000036%&lt;br /&gt;
|-&lt;br /&gt;
|CHEMIST&lt;br /&gt;
|35%&lt;br /&gt;
|1 in 79,894,366&lt;br /&gt;
|0.0000012517%&lt;br /&gt;
|-&lt;br /&gt;
|GEOLOGIST&lt;br /&gt;
|40%&lt;br /&gt;
|1 in 69,907,570&lt;br /&gt;
|0.0000014305%&lt;br /&gt;
|-&lt;br /&gt;
|COLORPICKER&lt;br /&gt;
|40%&lt;br /&gt;
|1 in 69,907,570&lt;br /&gt;
|0.0000014305%&lt;br /&gt;
|-&lt;br /&gt;
|MATHEMATICIAN&lt;br /&gt;
|42%&lt;br /&gt;
|1 in 66,578,638&lt;br /&gt;
|0.0000015020%&lt;br /&gt;
|-&lt;br /&gt;
|DOCTRINAIRE&lt;br /&gt;
|45%&lt;br /&gt;
|1 in 62,140,062&lt;br /&gt;
|0.0000016093%&lt;br /&gt;
|-&lt;br /&gt;
|WITCH-DOCTOR&lt;br /&gt;
|45%&lt;br /&gt;
|1 in 62,140,062&lt;br /&gt;
|0.0000016093%&lt;br /&gt;
|-&lt;br /&gt;
|LARP&lt;br /&gt;
|0.5%&lt;br /&gt;
|1 in 5,592,605,600&lt;br /&gt;
|0.0000000179%&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To witness a &#039;&#039;naturally spawned&#039;&#039; Sniper AI fail is roughly a 1-in-28-billion event.&lt;br /&gt;
&lt;br /&gt;
== Related achievements ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Achievement&lt;br /&gt;
!Unlocked by&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Sniper&#039;s Mark&#039;&#039;&#039;&lt;br /&gt;
|Successfully summoning Sniper AI with &amp;lt;code&amp;gt;!snipe&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Assassin&#039;s Ally&#039;&#039;&#039;&lt;br /&gt;
|Successfully hijacking the active AI with &amp;lt;code&amp;gt;!assassin&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Survived!&#039;&#039;&#039;&lt;br /&gt;
|Having the active AI dynamically switch into &#039;&#039;&#039;ASSASSIN&#039;&#039;&#039; during your turn.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Man Beats Machine&#039;&#039;&#039;&lt;br /&gt;
|Witnessing the [[#AI failure event|AI failure event]] on any AI turn, including Sniper AI.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Murder Most Foul&#039;&#039;&#039;&lt;br /&gt;
|Removing a non-Assassin AI with &amp;lt;code&amp;gt;/murder_ai&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Assassin&#039;s Bane&#039;&#039;&#039;&lt;br /&gt;
|Removing an Assassin AI with &amp;lt;code&amp;gt;/murder_ai&amp;lt;/code&amp;gt; (a 1% chance).&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;New Assassin&#039;&#039;&#039;&lt;br /&gt;
|Earning both Murder Most Foul and Assassin&#039;s Bane.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;AWOL&#039;&#039;&#039;&lt;br /&gt;
|A naturally-spawned Sniper AI finding no valid word to play.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Wrong Timing&#039;&#039;&#039;&lt;br /&gt;
|A Sniper AI summoned via &amp;lt;code&amp;gt;!snipe&amp;lt;/code&amp;gt; finding no valid word to play.&lt;br /&gt;
|-&lt;br /&gt;
|&#039;&#039;&#039;Ghosted&#039;&#039;&#039;&lt;br /&gt;
|Attempting &amp;lt;code&amp;gt;/invite_ai&amp;lt;/code&amp;gt; during an active Protori match, which has no AI-opponent support at all.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Super-Shiritori]]&lt;br /&gt;
* [[Achievements]]&lt;br /&gt;
* [[Protori]]&lt;br /&gt;
* [[Multiplayer Shiritori]]&lt;br /&gt;
* [[Solo Shiritori]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Information]]&lt;br /&gt;
[[Category:Strategies]]&lt;br /&gt;
[[Category:Game Mechanics]]&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
	<entry>
		<id>https://wiki.supershiritori.com/index.php?title=Discord_Bot&amp;diff=90</id>
		<title>Discord Bot</title>
		<link rel="alternate" type="text/html" href="https://wiki.supershiritori.com/index.php?title=Discord_Bot&amp;diff=90"/>
		<updated>2026-08-22T05:06:31Z</updated>

		<summary type="html">&lt;p&gt;The CodeGhost: Redirected page to Discord Bots&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Discord Bots]]&lt;/div&gt;</summary>
		<author><name>The CodeGhost</name></author>
	</entry>
</feed>