conflict fix
This commit is contained in:
commit
f80b4c166c
142
docs/_static/codeblocks.css
vendored
Normal file
142
docs/_static/codeblocks.css
vendored
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
/* light theme: default */
|
||||||
|
.highlight .hll { background-color: #ffffcc }
|
||||||
|
.highlight { background: #f0f0f0; }
|
||||||
|
.highlight .c { color: #60a0b0; font-style: italic } /* Comment */
|
||||||
|
.highlight .err { border: 1px solid #FF0000 } /* Error */
|
||||||
|
.highlight .k { color: #007020; font-weight: bold } /* Keyword */
|
||||||
|
.highlight .o { color: #666666 } /* Operator */
|
||||||
|
.highlight .ch { color: #60a0b0; font-style: italic } /* Comment.Hashbang */
|
||||||
|
.highlight .cm { color: #60a0b0; font-style: italic } /* Comment.Multiline */
|
||||||
|
.highlight .cp { color: #007020 } /* Comment.Preproc */
|
||||||
|
.highlight .cpf { color: #60a0b0; font-style: italic } /* Comment.PreprocFile */
|
||||||
|
.highlight .c1 { color: #60a0b0; font-style: italic } /* Comment.Single */
|
||||||
|
.highlight .cs { color: #60a0b0; background-color: #fff0f0 } /* Comment.Special */
|
||||||
|
.highlight .gd { color: #A00000 } /* Generic.Deleted */
|
||||||
|
.highlight .ge { font-style: italic } /* Generic.Emph */
|
||||||
|
.highlight .gr { color: #FF0000 } /* Generic.Error */
|
||||||
|
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
|
||||||
|
.highlight .gi { color: #00A000 } /* Generic.Inserted */
|
||||||
|
.highlight .go { color: #888888 } /* Generic.Output */
|
||||||
|
.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
|
||||||
|
.highlight .gs { font-weight: bold } /* Generic.Strong */
|
||||||
|
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
|
||||||
|
.highlight .gt { color: #0044DD } /* Generic.Traceback */
|
||||||
|
.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
|
||||||
|
.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
|
||||||
|
.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
|
||||||
|
.highlight .kp { color: #007020 } /* Keyword.Pseudo */
|
||||||
|
.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
|
||||||
|
.highlight .kt { color: #902000 } /* Keyword.Type */
|
||||||
|
.highlight .m { color: #40a070 } /* Literal.Number */
|
||||||
|
.highlight .s { color: #4070a0 } /* Literal.String */
|
||||||
|
.highlight .na { color: #4070a0 } /* Name.Attribute */
|
||||||
|
.highlight .nb { color: #007020 } /* Name.Builtin */
|
||||||
|
.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
|
||||||
|
.highlight .no { color: #60add5 } /* Name.Constant */
|
||||||
|
.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */
|
||||||
|
.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */
|
||||||
|
.highlight .ne { color: #007020 } /* Name.Exception */
|
||||||
|
.highlight .nf { color: #06287e } /* Name.Function */
|
||||||
|
.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */
|
||||||
|
.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
|
||||||
|
.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */
|
||||||
|
.highlight .nv { color: #bb60d5 } /* Name.Variable */
|
||||||
|
.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */
|
||||||
|
.highlight .w { color: #bbbbbb } /* Text.Whitespace */
|
||||||
|
.highlight .mb { color: #40a070 } /* Literal.Number.Bin */
|
||||||
|
.highlight .mf { color: #40a070 } /* Literal.Number.Float */
|
||||||
|
.highlight .mh { color: #40a070 } /* Literal.Number.Hex */
|
||||||
|
.highlight .mi { color: #40a070 } /* Literal.Number.Integer */
|
||||||
|
.highlight .mo { color: #40a070 } /* Literal.Number.Oct */
|
||||||
|
.highlight .sa { color: #4070a0 } /* Literal.String.Affix */
|
||||||
|
.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */
|
||||||
|
.highlight .sc { color: #4070a0 } /* Literal.String.Char */
|
||||||
|
.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */
|
||||||
|
.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
|
||||||
|
.highlight .s2 { color: #4070a0 } /* Literal.String.Double */
|
||||||
|
.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
|
||||||
|
.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */
|
||||||
|
.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
|
||||||
|
.highlight .sx { color: #c65d09 } /* Literal.String.Other */
|
||||||
|
.highlight .sr { color: #235388 } /* Literal.String.Regex */
|
||||||
|
.highlight .s1 { color: #4070a0 } /* Literal.String.Single */
|
||||||
|
.highlight .ss { color: #517918 } /* Literal.String.Symbol */
|
||||||
|
.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */
|
||||||
|
.highlight .fm { color: #06287e } /* Name.Function.Magic */
|
||||||
|
.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */
|
||||||
|
.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */
|
||||||
|
.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */
|
||||||
|
.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */
|
||||||
|
.highlight .il { color: #40a070 } /* Literal.Number.Integer.Long */
|
||||||
|
|
||||||
|
/* dark theme: modified "native" */
|
||||||
|
:root[data-theme="dark"] .highlight pre { background-color: #2a2a2e }
|
||||||
|
:root[data-theme="dark"] .highlight .hll { background-color: #2a2a2e }
|
||||||
|
:root[data-theme="dark"] .highlight .c { color: #999999; font-style: italic } /* Comment */
|
||||||
|
:root[data-theme="dark"] .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
|
||||||
|
:root[data-theme="dark"] .highlight .g { color: #d0d0d0 } /* Generic */
|
||||||
|
:root[data-theme="dark"] .highlight .k { color: #6ab825; font-weight: bold } /* Keyword */
|
||||||
|
:root[data-theme="dark"] .highlight .l { color: #d0d0d0 } /* Literal */
|
||||||
|
:root[data-theme="dark"] .highlight .n { color: #d0d0d0 } /* Name */
|
||||||
|
:root[data-theme="dark"] .highlight .o { color: #d0d0d0 } /* Operator */
|
||||||
|
:root[data-theme="dark"] .highlight .x { color: #d0d0d0 } /* Other */
|
||||||
|
:root[data-theme="dark"] .highlight .p { color: #d0d0d0 } /* Punctuation */
|
||||||
|
:root[data-theme="dark"] .highlight .cm { color: #999999; font-style: italic } /* Comment.Multiline */
|
||||||
|
:root[data-theme="dark"] .highlight .cp { color: #cd2828; font-weight: bold } /* Comment.Preproc */
|
||||||
|
:root[data-theme="dark"] .highlight .c1 { color: #999999; font-style: italic } /* Comment.Single */
|
||||||
|
:root[data-theme="dark"] .highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */
|
||||||
|
:root[data-theme="dark"] .highlight .gd { color: #d22323 } /* Generic.Deleted */
|
||||||
|
:root[data-theme="dark"] .highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */
|
||||||
|
:root[data-theme="dark"] .highlight .gr { color: #d22323 } /* Generic.Error */
|
||||||
|
:root[data-theme="dark"] .highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */
|
||||||
|
:root[data-theme="dark"] .highlight .gi { color: #589819 } /* Generic.Inserted */
|
||||||
|
:root[data-theme="dark"] .highlight .go { color: #cccccc } /* Generic.Output */
|
||||||
|
:root[data-theme="dark"] .highlight .gp { color: #aaaaaa } /* Generic.Prompt */
|
||||||
|
:root[data-theme="dark"] .highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */
|
||||||
|
:root[data-theme="dark"] .highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */
|
||||||
|
:root[data-theme="dark"] .highlight .gt { color: #d22323 } /* Generic.Traceback */
|
||||||
|
:root[data-theme="dark"] .highlight .kc { color: #6ab825; font-weight: bold } /* Keyword.Constant */
|
||||||
|
:root[data-theme="dark"] .highlight .kd { color: #6ab825; font-weight: bold } /* Keyword.Declaration */
|
||||||
|
:root[data-theme="dark"] .highlight .kn { color: #6ab825; font-weight: bold } /* Keyword.Namespace */
|
||||||
|
:root[data-theme="dark"] .highlight .kp { color: #6ab825 } /* Keyword.Pseudo */
|
||||||
|
:root[data-theme="dark"] .highlight .kr { color: #6ab825; font-weight: bold } /* Keyword.Reserved */
|
||||||
|
:root[data-theme="dark"] .highlight .kt { color: #6ab825; font-weight: bold } /* Keyword.Type */
|
||||||
|
:root[data-theme="dark"] .highlight .ld { color: #d0d0d0 } /* Literal.Date */
|
||||||
|
:root[data-theme="dark"] .highlight .m { color: #7fb1d7 } /* Literal.Number */
|
||||||
|
:root[data-theme="dark"] .highlight .s { color: #ed9d13 } /* Literal.String */
|
||||||
|
:root[data-theme="dark"] .highlight .na { color: #bbbbbb; } /* Name.Attribute */
|
||||||
|
:root[data-theme="dark"] .highlight .nb { color: #29a5b3; } /* Name.Builtin */
|
||||||
|
:root[data-theme="dark"] .highlight .nc { color: #6494d8;} /* Name.Class */
|
||||||
|
:root[data-theme="dark"] .highlight .no { color: #40ffff; } /* Name.Constant */
|
||||||
|
:root[data-theme="dark"] .highlight .nd { color: #ffa500; } /* Name.Decorator */
|
||||||
|
:root[data-theme="dark"] .highlight .ni { color: #d0d0d0; } /* Name.Entity */
|
||||||
|
:root[data-theme="dark"] .highlight .ne { color: #bbbbbb; } /* Name.Exception */
|
||||||
|
:root[data-theme="dark"] .highlight .nf { color: #6494d8; } /* Name.Function */
|
||||||
|
:root[data-theme="dark"] .highlight .nl { color: #d0d0d0; } /* Name.Label */
|
||||||
|
:root[data-theme="dark"] .highlight .nn { color: #6494d8;} /* Name.Namespace */
|
||||||
|
:root[data-theme="dark"] .highlight .nx { color: #d0d0d0; } /* Name.Other */
|
||||||
|
:root[data-theme="dark"] .highlight .py { color: #d0d0d0; } /* Name.Property */
|
||||||
|
:root[data-theme="dark"] .highlight .nt { color: #6ab825; font-weight: bold } /* Name.Tag */
|
||||||
|
:root[data-theme="dark"] .highlight .nv { color: #40ffff; } /* Name.Variable */
|
||||||
|
:root[data-theme="dark"] .highlight .ow { color: #6ab825; font-weight: bold } /* Operator.Word */
|
||||||
|
:root[data-theme="dark"] .highlight .w { color: #666666; } /* Text.Whitespace */
|
||||||
|
:root[data-theme="dark"] .highlight .mf { color: #7fb1d7; } /* Literal.Number.Float */
|
||||||
|
:root[data-theme="dark"] .highlight .mh { color: #7fb1d7; } /* Literal.Number.Hex */
|
||||||
|
:root[data-theme="dark"] .highlight .mi { color: #7fb1d7; } /* Literal.Number.Integer */
|
||||||
|
:root[data-theme="dark"] .highlight .mo { color: #7fb1d7; } /* Literal.Number.Oct */
|
||||||
|
:root[data-theme="dark"] .highlight .sb { color: #ed9d13; } /* Literal.String.Backtick */
|
||||||
|
:root[data-theme="dark"] .highlight .sc { color: #ed9d13; } /* Literal.String.Char */
|
||||||
|
:root[data-theme="dark"] .highlight .sd { color: #ed9d13; } /* Literal.String.Doc */
|
||||||
|
:root[data-theme="dark"] .highlight .s2 { color: #ed9d13; } /* Literal.String.Double */
|
||||||
|
:root[data-theme="dark"] .highlight .se { color: #ed9d13; } /* Literal.String.Escape */
|
||||||
|
:root[data-theme="dark"] .highlight .sh { color: #ed9d13; } /* Literal.String.Heredoc */
|
||||||
|
:root[data-theme="dark"] .highlight .si { color: #ed9d13; } /* Literal.String.Interpol */
|
||||||
|
:root[data-theme="dark"] .highlight .sx { color: #ffa500; } /* Literal.String.Other */
|
||||||
|
:root[data-theme="dark"] .highlight .sr { color: #ed9d13; } /* Literal.String.Regex */
|
||||||
|
:root[data-theme="dark"] .highlight .s1 { color: #ed9d13; } /* Literal.String.Single */
|
||||||
|
:root[data-theme="dark"] .highlight .ss { color: #ed9d13; } /* Literal.String.Symbol */
|
||||||
|
:root[data-theme="dark"] .highlight .bp { color: #29a5b3; } /* Name.Builtin.Pseudo */
|
||||||
|
:root[data-theme="dark"] .highlight .vc { color: #40ffff; } /* Name.Variable.Class */
|
||||||
|
:root[data-theme="dark"] .highlight .vg { color: #40ffff; } /* Name.Variable.Global */
|
||||||
|
:root[data-theme="dark"] .highlight .vi { color: #40ffff; } /* Name.Variable.Instance */
|
||||||
|
:root[data-theme="dark"] .highlight .il { color: #7fb1d7; } /* Literal.Number.Integer.Long */
|
34
docs/_static/copy.js
vendored
Normal file
34
docs/_static/copy.js
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
const COPY = "content_copy";
|
||||||
|
const COPIED = "done";
|
||||||
|
|
||||||
|
const copy = async (obj) => {
|
||||||
|
// <span class="copy"><span class="material-icons">{{text}}</span></span>
|
||||||
|
await navigator.clipboard.writeText(obj.children[1].innerText).then(
|
||||||
|
() => {
|
||||||
|
let icon = obj.children[0].children[0];
|
||||||
|
icon.textContent = COPIED;
|
||||||
|
setTimeout(() => (icon.textContent = COPY), 2500);
|
||||||
|
},
|
||||||
|
(r) => alert('Could not copy codeblock:\n' + r.toString())
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
document.addEventListener("DOMContentLoaded", () => {
|
||||||
|
let allCodeblocks = document.querySelectorAll("div[class='highlight']");
|
||||||
|
|
||||||
|
for (let codeblock of allCodeblocks) {
|
||||||
|
codeblock.parentNode.className += " relative-copy";
|
||||||
|
let copyEl = document.createElement("span");
|
||||||
|
copyEl.addEventListener('click', () => copy(codeblock));
|
||||||
|
copyEl.className = "copy";
|
||||||
|
copyEl.setAttribute("aria-label", "Copy Code");
|
||||||
|
copyEl.setAttribute("title", "Copy Code");
|
||||||
|
|
||||||
|
let copyIcon = document.createElement("span");
|
||||||
|
copyIcon.className = "material-icons";
|
||||||
|
copyIcon.textContent = COPY;
|
||||||
|
copyEl.append(copyIcon);
|
||||||
|
|
||||||
|
codeblock.prepend(copyEl);
|
||||||
|
}
|
||||||
|
});
|
102
docs/_static/custom.js
vendored
102
docs/_static/custom.js
vendored
@ -1,31 +1,85 @@
|
|||||||
$(document).ready(function () {
|
'use-strict';
|
||||||
var sections = $('div.section');
|
|
||||||
var activeLink = null;
|
|
||||||
var bottomHeightThreshold = $(document).height() - 30;
|
|
||||||
|
|
||||||
$(window).scroll(function (event) {
|
let activeModal = null;
|
||||||
var distanceFromTop = $(this).scrollTop();
|
let bottomHeightThreshold, sections;
|
||||||
var currentSection = null;
|
let hamburgerToggle;
|
||||||
|
let mobileSearch;
|
||||||
|
let sidebar;
|
||||||
|
|
||||||
if(distanceFromTop + window.innerHeight > bottomHeightThreshold) {
|
class Modal {
|
||||||
currentSection = $(sections[sections.length - 1]);
|
constructor(element) {
|
||||||
}
|
this.element = element;
|
||||||
else {
|
}
|
||||||
sections.each(function () {
|
|
||||||
var section = $(this);
|
|
||||||
if (section.offset().top - 1 < distanceFromTop) {
|
|
||||||
currentSection = section;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (activeLink) {
|
close() {
|
||||||
activeLink.parent().removeClass('active');
|
activeModal = null;
|
||||||
}
|
this.element.style.display = 'none'
|
||||||
|
}
|
||||||
|
|
||||||
if (currentSection) {
|
open() {
|
||||||
activeLink = $('.sphinxsidebar a[href="#' + currentSection.attr('id') + '"]');
|
if (activeModal) {
|
||||||
activeLink.parent().addClass('active');
|
activeModal.close();
|
||||||
}
|
}
|
||||||
|
activeModal = this;
|
||||||
|
this.element.style.display = 'flex'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class SearchBar {
|
||||||
|
|
||||||
|
constructor() {
|
||||||
|
this.box = document.querySelector('nav.mobile-only');
|
||||||
|
this.bar = document.querySelector('nav.mobile-only input[type="search"]');
|
||||||
|
this.openButton = document.getElementById('open-search');
|
||||||
|
this.closeButton = document.getElementById('close-search');
|
||||||
|
}
|
||||||
|
|
||||||
|
open() {
|
||||||
|
this.openButton.hidden = true;
|
||||||
|
this.closeButton.hidden = false;
|
||||||
|
this.box.style.top = "100%";
|
||||||
|
this.bar.focus();
|
||||||
|
}
|
||||||
|
|
||||||
|
close() {
|
||||||
|
this.openButton.hidden = false;
|
||||||
|
this.closeButton.hidden = true;
|
||||||
|
this.box.style.top = "0";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
mobileSearch = new SearchBar();
|
||||||
|
|
||||||
|
bottomHeightThreshold = document.documentElement.scrollHeight - 30;
|
||||||
|
sections = document.querySelectorAll('section');
|
||||||
|
hamburgerToggle = document.getElementById('hamburger-toggle');
|
||||||
|
|
||||||
|
if (hamburgerToggle) {
|
||||||
|
hamburgerToggle.addEventListener('click', (e) => {
|
||||||
|
sidebar.element.classList.toggle('sidebar-toggle');
|
||||||
|
let button = hamburgerToggle.firstElementChild;
|
||||||
|
if (button.textContent == 'menu') {
|
||||||
|
button.textContent = 'close';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
button.textContent = 'menu';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const tables = document.querySelectorAll('.py-attribute-table[data-move-to-id]');
|
||||||
|
tables.forEach(table => {
|
||||||
|
let element = document.getElementById(table.getAttribute('data-move-to-id'));
|
||||||
|
let parent = element.parentNode;
|
||||||
|
// insert ourselves after the element
|
||||||
|
parent.insertBefore(table, element.nextSibling);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
document.addEventListener('keydown', (event) => {
|
||||||
|
if (event.code == "Escape" && activeModal) {
|
||||||
|
activeModal.close();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
10
docs/_static/icons.css
vendored
Normal file
10
docs/_static/icons.css
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
@font-face {
|
||||||
|
font-family: 'Custom Icons';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
src: url('icons.woff') format('woff2');
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-icons {
|
||||||
|
font-family: 'Custom Icons' !important;
|
||||||
|
}
|
BIN
docs/_static/icons.woff
vendored
Normal file
BIN
docs/_static/icons.woff
vendored
Normal file
Binary file not shown.
71
docs/_static/scorer.js
vendored
71
docs/_static/scorer.js
vendored
@ -1,17 +1,20 @@
|
|||||||
var _queryBeingDone = null;
|
'use-strict';
|
||||||
var _pattern = null;
|
|
||||||
var _escapedRegex = /[-\/\\^$*+?.()|[\]{}]/g;
|
let queryBeingDone = null;
|
||||||
|
let pattern = null;
|
||||||
|
|
||||||
|
const escapedRegex = /[-\/\\^$*+?.()|[\]{}]/g;
|
||||||
function escapeRegex(e) {
|
function escapeRegex(e) {
|
||||||
return e.replace(_escapedRegex, '\\$&');
|
return e.replace(escapedRegex, '\\$&');
|
||||||
}
|
}
|
||||||
|
|
||||||
// for some reason Sphinx shows some entries twice
|
// for some reason Sphinx shows some entries twice
|
||||||
// if something has been scored already I'd rather sort it to the bottom
|
// if something has been scored already I'd rather sort it to the bottom
|
||||||
var _beenScored = new Set();
|
const beenScored = new Set();
|
||||||
|
|
||||||
function __score(haystack, regex) {
|
function __score(haystack, regex) {
|
||||||
let match = regex.exec(haystack);
|
let match = regex.exec(haystack);
|
||||||
if(match == null) {
|
if (match == null) {
|
||||||
return Number.MAX_VALUE;
|
return Number.MAX_VALUE;
|
||||||
}
|
}
|
||||||
let subLength = match[0].length;
|
let subLength = match[0].length;
|
||||||
@ -24,38 +27,41 @@ function __cleanNamespaces(query) {
|
|||||||
return query.replace(/(discord\.(ext\.)?)?(.+)/, '$3');
|
return query.replace(/(discord\.(ext\.)?)?(.+)/, '$3');
|
||||||
}
|
}
|
||||||
|
|
||||||
var Scorer = {
|
Scorer = {
|
||||||
|
|
||||||
// Implement the following function to further tweak the score for each result
|
// Implement the following function to further tweak the score for each result
|
||||||
// The function takes a result array [filename, title, anchor, descr, score]
|
// The function takes a result array [filename, title, anchor, descr, score]
|
||||||
// and returns the new score.
|
// and returns the new score.
|
||||||
|
score: (result) => {
|
||||||
|
// only inflate the score of things that are actual API reference things
|
||||||
|
const [, title, , , score] = result;
|
||||||
|
|
||||||
score: function(result) {
|
if (pattern !== null && title.startsWith('discord.')) {
|
||||||
// only inflate the score of things that are actual API reference things
|
let _score = __score(title, pattern);
|
||||||
if(_pattern !== null && result[1].startsWith('discord.')) {
|
if (_score === Number.MAX_VALUE) {
|
||||||
let _score = __score(result[1], _pattern);
|
return score;
|
||||||
if(_score === Number.MAX_VALUE) {
|
}
|
||||||
return result[4];
|
if (beenScored.has(title)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
beenScored.add(title);
|
||||||
|
let newScore = 100 + queryBeingDone.length - _score;
|
||||||
|
// console.log(`${title}: ${score} -> ${newScore} (${_score})`);
|
||||||
|
return newScore;
|
||||||
}
|
}
|
||||||
if(_beenScored.has(result[1])) {
|
return score;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
_beenScored.add(result[1]);
|
|
||||||
let newScore = 100 + _queryBeingDone.length - _score;
|
|
||||||
// console.log(`${result[1]}: ${result[4]} -> ${newScore} (${_score})`);
|
|
||||||
return newScore;
|
|
||||||
}
|
|
||||||
return result[4];
|
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
// query matches the full name of an object
|
// query matches the full name of an object
|
||||||
objNameMatch: 15,
|
objNameMatch: 15,
|
||||||
// or matches in the last dotted part of the object name
|
// or matches in the last dotted part of the object name
|
||||||
objPartialMatch: 11,
|
objPartialMatch: 11,
|
||||||
// Additive scores depending on the priority of the object
|
// Additive scores depending on the priority of the object
|
||||||
objPrio: {0: 15, // used to be importantResults
|
objPrio: {
|
||||||
1: 7, // used to be objectResults
|
0: 15, // used to be importantResults
|
||||||
2: -5}, // used to be unimportantResults
|
1: 7, // used to be objectResults
|
||||||
|
2: -5 // used to be unimportantResults
|
||||||
|
},
|
||||||
// Used when the priority is not in the mapping.
|
// Used when the priority is not in the mapping.
|
||||||
objPrioDefault: 0,
|
objPrioDefault: 0,
|
||||||
|
|
||||||
@ -67,12 +73,11 @@ var Scorer = {
|
|||||||
partialTerm: 2
|
partialTerm: 2
|
||||||
};
|
};
|
||||||
|
|
||||||
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
$(document).ready(function() {
|
const params = new URLSearchParams(window.location.search);
|
||||||
let params = $.getQueryParameters();
|
queryBeingDone = params.get('q');
|
||||||
if(params.q) {
|
if (queryBeingDone) {
|
||||||
_queryBeingDone = params.q[0];
|
let pattern = Array.from(queryBeingDone).map(escapeRegex).join('.*?');
|
||||||
let pattern = Array.from(_queryBeingDone).map(escapeRegex).join('.*?');
|
pattern = new RegExp(pattern, 'i');
|
||||||
_pattern = new RegExp(pattern, 'i');
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
103
docs/_static/settings.js
vendored
Normal file
103
docs/_static/settings.js
vendored
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
'use-strict';
|
||||||
|
|
||||||
|
let settingsModal;
|
||||||
|
|
||||||
|
class Setting {
|
||||||
|
constructor(name, defaultValue, setter) {
|
||||||
|
this.name = name;
|
||||||
|
this.defaultValue = defaultValue;
|
||||||
|
this.setValue = setter;
|
||||||
|
}
|
||||||
|
|
||||||
|
setElement() {
|
||||||
|
throw new TypeError('Abstract methods should be implemented.');
|
||||||
|
}
|
||||||
|
|
||||||
|
load() {
|
||||||
|
let value = JSON.parse(localStorage.getItem(this.name));
|
||||||
|
this.value = value === null ? this.defaultValue : value;
|
||||||
|
try {
|
||||||
|
this.setValue(this.value);
|
||||||
|
} catch (error) {
|
||||||
|
console.error(`Failed to apply setting "${this.name}" With value:`, this.value);
|
||||||
|
console.error(error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
update() {
|
||||||
|
throw new TypeError('Abstract methods should be implemented.');
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class CheckboxSetting extends Setting {
|
||||||
|
|
||||||
|
setElement() {
|
||||||
|
let element = document.querySelector(`input[name=${this.name}]`);
|
||||||
|
element.checked = this.value;
|
||||||
|
}
|
||||||
|
|
||||||
|
update(element) {
|
||||||
|
localStorage.setItem(this.name, element.checked);
|
||||||
|
this.setValue(element.checked);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class RadioSetting extends Setting {
|
||||||
|
|
||||||
|
setElement() {
|
||||||
|
let element = document.querySelector(`input[name=${this.name}][value=${this.value}]`);
|
||||||
|
element.checked = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
update(element) {
|
||||||
|
localStorage.setItem(this.name, `"${element.value}"`);
|
||||||
|
this.setValue(element.value);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function getRootAttributeToggle(attributeName, valueName) {
|
||||||
|
function toggleRootAttribute(set) {
|
||||||
|
if (set) {
|
||||||
|
document.documentElement.setAttribute(`data-${attributeName}`, valueName);
|
||||||
|
} else {
|
||||||
|
document.documentElement.removeAttribute(`data-${attributeName}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return toggleRootAttribute;
|
||||||
|
}
|
||||||
|
|
||||||
|
function setTheme(value) {
|
||||||
|
if (value === 'automatic') {
|
||||||
|
if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
||||||
|
document.documentElement.setAttribute('data-theme', 'dark');
|
||||||
|
} else {
|
||||||
|
document.documentElement.setAttribute('data-theme', 'light');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
document.documentElement.setAttribute('data-theme', value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const settings = [
|
||||||
|
new CheckboxSetting('useSerifFont', false, getRootAttributeToggle('font', 'serif')),
|
||||||
|
new RadioSetting('setTheme', 'automatic', setTheme)
|
||||||
|
]
|
||||||
|
|
||||||
|
function updateSetting(element) {
|
||||||
|
let setting = settings.find((s) => s.name == element.name);
|
||||||
|
if (setting) {
|
||||||
|
setting.update(element);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
settingsModal = new Modal(document.querySelector('div#settings.modal'));
|
||||||
|
for (const setting of settings) {
|
||||||
|
setting.load();
|
||||||
|
setting.setElement();
|
||||||
|
}
|
||||||
|
});
|
127
docs/_static/sidebar.js
vendored
Normal file
127
docs/_static/sidebar.js
vendored
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
class Sidebar {
|
||||||
|
constructor(element) {
|
||||||
|
this.element = element;
|
||||||
|
this.activeLink = null;
|
||||||
|
|
||||||
|
this.element.addEventListener('click', (e) => {
|
||||||
|
// If we click a navigation, close the hamburger menu
|
||||||
|
if (e.target.tagName == 'A' && this.element.classList.contains('sidebar-toggle')) {
|
||||||
|
this.element.classList.remove('sidebar-toggle');
|
||||||
|
let button = hamburgerToggle.firstElementChild;
|
||||||
|
button.textContent = 'menu';
|
||||||
|
|
||||||
|
// Scroll a little up to actually see the header
|
||||||
|
// Note: this is generally around ~55px
|
||||||
|
// A proper solution is getComputedStyle but it can be slow
|
||||||
|
// Instead let's just rely on this quirk and call it a day
|
||||||
|
// This has to be done after the browser actually processes
|
||||||
|
// the section movement
|
||||||
|
setTimeout(() => window.scrollBy(0, -100), 75);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
createCollapsableSections() {
|
||||||
|
let toc = this.element.querySelector('ul');
|
||||||
|
if (!toc) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
let allReferences = toc.querySelectorAll('a.reference.internal:not([href="#"])');
|
||||||
|
|
||||||
|
for (let ref of allReferences) {
|
||||||
|
|
||||||
|
let next = ref.nextElementSibling;
|
||||||
|
|
||||||
|
if (next && next.tagName === "UL") {
|
||||||
|
|
||||||
|
let icon = document.createElement('span');
|
||||||
|
icon.className = 'material-icons collapsible-arrow expanded';
|
||||||
|
icon.innerText = 'expand_more';
|
||||||
|
|
||||||
|
if (next.parentElement.tagName == "LI") {
|
||||||
|
next.parentElement.classList.add('no-list-style')
|
||||||
|
}
|
||||||
|
|
||||||
|
icon.addEventListener('click', () => {
|
||||||
|
if (icon.classList.contains('expanded')) {
|
||||||
|
this.collapseSection(icon);
|
||||||
|
} else {
|
||||||
|
this.expandSection(icon);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
ref.classList.add('ref-internal-padding')
|
||||||
|
ref.parentNode.insertBefore(icon, ref);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resize() {
|
||||||
|
let rect = this.element.getBoundingClientRect();
|
||||||
|
this.element.style.height = `calc(100vh - 1em - ${rect.top + document.body.offsetTop}px)`;
|
||||||
|
}
|
||||||
|
|
||||||
|
collapseSection(icon) {
|
||||||
|
icon.classList.remove('expanded');
|
||||||
|
icon.classList.add('collapsed');
|
||||||
|
let children = icon.nextElementSibling.nextElementSibling;
|
||||||
|
// <arrow><heading>
|
||||||
|
// --> <square><children>
|
||||||
|
setTimeout(() => children.style.display = "none", 75)
|
||||||
|
}
|
||||||
|
|
||||||
|
expandSection(icon) {
|
||||||
|
icon.classList.remove('collapse');
|
||||||
|
icon.classList.add('expanded');
|
||||||
|
let children = icon.nextElementSibling.nextElementSibling;
|
||||||
|
setTimeout(() => children.style.display = "block", 75)
|
||||||
|
}
|
||||||
|
|
||||||
|
setActiveLink(section) {
|
||||||
|
if (this.activeLink) {
|
||||||
|
this.activeLink.parentElement.classList.remove('active');
|
||||||
|
}
|
||||||
|
if (section) {
|
||||||
|
this.activeLink = document.querySelector(`#sidebar a[href="#${section.id}"]`);
|
||||||
|
if (this.activeLink) {
|
||||||
|
let headingChildren = this.activeLink.parentElement.parentElement;
|
||||||
|
let heading = headingChildren.previousElementSibling.previousElementSibling;
|
||||||
|
|
||||||
|
if (heading && headingChildren.style.display === 'none') {
|
||||||
|
this.activeLink = heading;
|
||||||
|
}
|
||||||
|
this.activeLink.parentElement.classList.add('active');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function getCurrentSection() {
|
||||||
|
let currentSection;
|
||||||
|
if (window.scrollY + window.innerHeight > bottomHeightThreshold) {
|
||||||
|
currentSection = sections[sections.length - 1];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (sections) {
|
||||||
|
sections.forEach(section => {
|
||||||
|
let rect = section.getBoundingClientRect();
|
||||||
|
if (rect.top + document.body.offsetTop < 1) {
|
||||||
|
currentSection = section;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return currentSection;
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
|
sidebar = new Sidebar(document.getElementById('sidebar'));
|
||||||
|
sidebar.resize();
|
||||||
|
sidebar.createCollapsableSections();
|
||||||
|
|
||||||
|
window.addEventListener('scroll', () => {
|
||||||
|
sidebar.setActiveLink(getCurrentSection());
|
||||||
|
sidebar.resize();
|
||||||
|
});
|
||||||
|
});
|
1241
docs/_static/style.css
vendored
1241
docs/_static/style.css
vendored
File diff suppressed because it is too large
Load Diff
214
docs/_templates/layout.html
vendored
214
docs/_templates/layout.html
vendored
@ -1,40 +1,194 @@
|
|||||||
{%- extends "basic/layout.html" %}
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
{% set show_source = False %}
|
<head>
|
||||||
{% set style = 'style.css' %}
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
{%- block extrahead %}
|
<title>{{ title|striptags|e }}{{ titlesuffix }}</title>
|
||||||
{{ super() }}
|
{%- block extrahead %} {% endblock %}
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9">
|
<!-- end extra head -->
|
||||||
{% endblock %}
|
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
|
||||||
|
<link rel="stylesheet" href="{{ pathto('_static/style.css', 1)|e }}" type="text/css" />
|
||||||
{%- block relbar2 %}{% endblock %}
|
<link rel="stylesheet" href="{{ pathto('_static/codeblocks.css', 1) }}" type="text/css" />
|
||||||
|
<link rel="stylesheet" href="{{ pathto('_static/icons.css', 1)|e }}" type="text/css" />
|
||||||
{% block header %}
|
{%- block css %}
|
||||||
{{ super() }}
|
{%- for css in css_files %}
|
||||||
{% if pagename == 'index' %}
|
{%- if css|attr("filename") %}
|
||||||
<div class="indexwrapper">
|
{{ css_tag(css) }}
|
||||||
{% endif %}
|
{%- else %}
|
||||||
{% endblock %}
|
<link rel="stylesheet" href="{{ pathto(css, 1)|e }}" type="text/css" />
|
||||||
|
{%- endif %}
|
||||||
|
{%- endfor %}
|
||||||
|
{%- endblock %}
|
||||||
|
{%- block scripts %}
|
||||||
|
<script id="documentation_options" data-url_root="{{ pathto('', 1) }}" src="{{ pathto('_static/documentation_options.js', 1) }}"></script>
|
||||||
|
{%- for js in script_files %}
|
||||||
|
{{ js_tag(js) }}
|
||||||
|
{%- endfor %}
|
||||||
|
{%- endblock %}
|
||||||
|
{%- if pageurl %}
|
||||||
|
<link rel="canonical" href="{{ pageurl|e }}" />
|
||||||
|
{%- endif %}
|
||||||
|
{%- if favicon %}
|
||||||
|
<link rel="shortcut icon" href="{{ pathto('_static/' + favicon, 1)|e }}"/>
|
||||||
|
{%- endif %}
|
||||||
|
{%- block linktags %}
|
||||||
|
{%- if hasdoc('about') %}
|
||||||
|
<link rel="author" title="{{ _('About these documents') }}" href="{{ pathto('about') }}" />
|
||||||
|
{%- endif %}
|
||||||
|
{%- if hasdoc('genindex') %}
|
||||||
|
<link rel="index" title="{{ _('Index') }}" href="{{ pathto('genindex') }}" />
|
||||||
|
{%- endif %}
|
||||||
|
{%- if hasdoc('search') %}
|
||||||
|
<link rel="search" title="{{ _('Search') }}" href="{{ pathto('search') }}" />
|
||||||
|
{%- endif %}
|
||||||
|
{%- if hasdoc('copyright') %}
|
||||||
|
<link rel="copyright" title="{{ _('Copyright') }}" href="{{ pathto('copyright') }}" />
|
||||||
|
{%- endif %}
|
||||||
|
{%- if next %}
|
||||||
|
<link rel="next" title="{{ next.title|striptags|e }}" href="{{ next.link|e }}" />
|
||||||
|
{%- endif %}
|
||||||
|
{%- if prev %}
|
||||||
|
<link rel="prev" title="{{ prev.title|striptags|e }}" href="{{ prev.link|e }}" />
|
||||||
|
{%- endif %}
|
||||||
|
{%- endblock %}
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
{%- block header %}{% endblock %}
|
||||||
|
<div class="main-grid">
|
||||||
|
{#- The main navigation header #}
|
||||||
|
<header class="grid-item">
|
||||||
|
<nav>
|
||||||
|
<a href="{{ pathto(master_doc)|e }}" class="main-heading">discord.py</a>
|
||||||
|
<a href="https://github.com/Rapptz/discord.py" title="GitHub"><span class="material-icons custom-icons">github</span></a>
|
||||||
|
<a href="{{ discord_invite }}" title="{{ _('Discord') }}"><span class="material-icons custom-icons">discord</span></a>
|
||||||
|
<a href="{{ pathto('faq') }}" title="FAQ"><span class="material-icons">help_center</span></a>
|
||||||
|
{#- If we have more links we can put them here #}
|
||||||
|
<a onclick="mobileSearch.open();" title="{{ _('Search') }}" id="open-search" class="mobile-only"><span class="material-icons">search</span></a>
|
||||||
|
<a onclick="mobileSearch.close();" title="{{ _('Close') }}" id="close-search" class="mobile-only" hidden><span class="material-icons">close</span></a>
|
||||||
|
</nav>
|
||||||
|
<nav class="mobile-only">
|
||||||
|
<form role="search" class="search" action="search.html" method="get">
|
||||||
|
<div class="search-wrapper">
|
||||||
|
<input type="search" name="q" placeholder="{{ _('Search documentation') }}" />
|
||||||
|
<button type="submit">
|
||||||
|
<span class="material-icons">search</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</nav>
|
||||||
|
</header>
|
||||||
|
{#- The sub-header with search and extension related selection #}
|
||||||
|
<div class="sub-header grid-item">
|
||||||
|
<label for="documentation_select">{{ _('View Documentation For') }}</label>
|
||||||
|
<select id="documentation_select" onchange="window.location = this.value;">
|
||||||
|
{%- if pagename is prefixedwith 'ext/' %}
|
||||||
|
<option value="{{ pathto(master_doc)|e }}">discord</option>
|
||||||
|
{%- else %}
|
||||||
|
<option value="{{ pathto(pagename) }}" selected>discord</option>
|
||||||
|
{%- endif %}
|
||||||
|
{%- for ext, p in discord_extensions %}
|
||||||
|
<option value="{{ pathto(p + '/index')|e }}" {% if pagename is prefixedwith p %}selected{% endif %}>{{ ext }}</option>
|
||||||
|
{%- endfor %}
|
||||||
|
</select>
|
||||||
|
<form role="search" class="search" action="search.html" method="get">
|
||||||
|
<div class="search-wrapper">
|
||||||
|
<input type="search" name="q" placeholder="{{ _('Search documentation') }}" />
|
||||||
|
<button type="submit">
|
||||||
|
<span class="material-icons">search</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
<a accesskey="S" class="settings" onclick="settingsModal.open();"><span class="material-icons">settings</span></a>
|
||||||
|
</div>
|
||||||
|
{#- The sidebar component #}
|
||||||
|
<aside class="grid-item">
|
||||||
|
{%- if display_toc %}
|
||||||
|
<span id="hamburger-toggle">
|
||||||
|
<span class="material-icons">menu</span>
|
||||||
|
</span>
|
||||||
|
{%- endif %}
|
||||||
|
<span id="settings-toggle" class="settings" onclick="settingsModal.open();">
|
||||||
|
<span class="material-icons">settings</span>
|
||||||
|
</span>
|
||||||
|
<div id="sidebar">
|
||||||
|
{%- include "localtoc.html" %}
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
{#- The actual body of the contents #}
|
||||||
|
<main class="grid-item">
|
||||||
|
{% block body %} {% endblock %}
|
||||||
|
</main>
|
||||||
{%- block footer %}
|
{%- block footer %}
|
||||||
<div class="footer">
|
<footer class="grid-item">
|
||||||
© Copyright {{ copyright }}.
|
{%- if show_copyright %}
|
||||||
{% trans sphinx_version=sphinx_version|e %}Created using <a href="http://sphinx-doc.org/">Sphinx</a> {{ sphinx_version }}.{% endtrans %}
|
{%- if hasdoc('copyright') %}
|
||||||
|
{% trans path=pathto('copyright'), copyright=copyright|e %}© <a href="{{ path }}">Copyright</a> {{ copyright }}.{% endtrans %}
|
||||||
|
{%- else %}
|
||||||
|
{% trans copyright=copyright|e %}© Copyright {{ copyright }}.{% endtrans %}
|
||||||
|
{%- endif %}
|
||||||
|
{%- endif %}
|
||||||
|
{%- if last_updated %}
|
||||||
|
{% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %}
|
||||||
|
{%- endif %}
|
||||||
|
{%- if show_sphinx %}
|
||||||
|
{% trans sphinx_version=sphinx_version|e %}Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> {{ sphinx_version }}.{% endtrans %}
|
||||||
|
{%- endif %}
|
||||||
|
</footer>
|
||||||
|
{%- endblock %}
|
||||||
</div>
|
</div>
|
||||||
{% if pagename == 'index' %}
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{%- if READTHEDOCS %}
|
{%- if READTHEDOCS %}
|
||||||
<script>
|
<script>
|
||||||
if (typeof READTHEDOCS_DATA !== 'undefined') {
|
if (typeof READTHEDOCS_DATA !== "undefined") {
|
||||||
if (!READTHEDOCS_DATA.features) {
|
if (!READTHEDOCS_DATA.features) {
|
||||||
READTHEDOCS_DATA.features = {};
|
READTHEDOCS_DATA.features = {};
|
||||||
}
|
}
|
||||||
READTHEDOCS_DATA.features.docsearch_disabled = true;
|
READTHEDOCS_DATA.features.docsearch_disabled = true;
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
{%- endblock %}
|
|
||||||
|
<div id="settings" class="modal" onclick="if (event.target == this){ settingsModal.close(); }" hidden>
|
||||||
|
<div class="modal-content">
|
||||||
|
<span class="close" onclick="settingsModal.close();" title="Close">
|
||||||
|
<span class="material-icons">close</span>
|
||||||
|
</span>
|
||||||
|
<h1>{{ _('Settings') }}</h1>
|
||||||
|
|
||||||
|
<h2>{{ _('Font') }}</h2>
|
||||||
|
<div class="setting">
|
||||||
|
<h3>{{ _('Use a serif font:') }}
|
||||||
|
<label class="toggle"
|
||||||
|
title="{{ _('Use a serif font? Your system font will be used, falling back to serif.')}}">
|
||||||
|
<input type="checkbox" name="useSerifFont" onclick="updateSetting(this);">
|
||||||
|
<span class="toggle-slider"></span>
|
||||||
|
</label>
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2>{{ _('Theme') }}</h2>
|
||||||
|
<div class="setting">
|
||||||
|
<h3>
|
||||||
|
<label class="toggle" title="{{ _('Set your theme based on your system preferences') }}">
|
||||||
|
<input type="radio" name="setTheme" onclick="updateSetting(this);" value="automatic" checked>
|
||||||
|
</label>
|
||||||
|
{{ _('Automatic') }}
|
||||||
|
</h3>
|
||||||
|
<h3>
|
||||||
|
<label class="toggle" title="{{ _('Set your theme to light theme') }}">
|
||||||
|
<input type="radio" name="setTheme" onclick="updateSetting(this);" value="light">
|
||||||
|
</label>
|
||||||
|
{{ _('Light') }}
|
||||||
|
</h3>
|
||||||
|
<h3>
|
||||||
|
<label class="toggle" title="{{ _('Set your theme to dark theme') }}">
|
||||||
|
<input type="radio" name="setTheme" onclick="updateSetting(this);" value="dark">
|
||||||
|
</label>
|
||||||
|
{{ _('Dark') }}
|
||||||
|
</h3>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
205
docs/api.rst
205
docs/api.rst
@ -30,48 +30,108 @@ There are two main ways to query version information about the library. For guar
|
|||||||
A string representation of the version. e.g. ``'1.0.0rc1'``. This is based
|
A string representation of the version. e.g. ``'1.0.0rc1'``. This is based
|
||||||
off of :pep:`440`.
|
off of :pep:`440`.
|
||||||
|
|
||||||
|
Clients
|
||||||
|
--------
|
||||||
|
|
||||||
Client
|
Client
|
||||||
-------
|
~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: Client
|
||||||
|
|
||||||
.. autoclass:: Client
|
.. autoclass:: Client
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
AutoShardedClient
|
||||||
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: AutoShardedClient
|
||||||
|
|
||||||
.. autoclass:: AutoShardedClient
|
.. autoclass:: AutoShardedClient
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
Application Info
|
||||||
|
------------------
|
||||||
|
|
||||||
|
AppInfo
|
||||||
|
~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: AppInfo
|
||||||
|
|
||||||
.. autoclass:: AppInfo()
|
.. autoclass:: AppInfo()
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
Team
|
||||||
|
~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: Team
|
||||||
|
|
||||||
.. autoclass:: Team()
|
.. autoclass:: Team()
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
TeamMember
|
||||||
|
~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: TeamMember
|
||||||
|
|
||||||
.. autoclass:: TeamMember()
|
.. autoclass:: TeamMember()
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
Voice
|
Voice Related
|
||||||
------
|
---------------
|
||||||
|
|
||||||
|
VoiceClient
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: VoiceClient
|
||||||
|
|
||||||
.. autoclass:: VoiceClient()
|
.. autoclass:: VoiceClient()
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
.. autoclass:: VoiceProtocol
|
AudioSource
|
||||||
:members:
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: AudioSource
|
||||||
|
|
||||||
.. autoclass:: AudioSource
|
.. autoclass:: AudioSource
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
PCMAudio
|
||||||
|
~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: PCMAudio
|
||||||
|
|
||||||
.. autoclass:: PCMAudio
|
.. autoclass:: PCMAudio
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
FFmpegAudio
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: FFmpegAudio
|
||||||
|
|
||||||
.. autoclass:: FFmpegAudio
|
.. autoclass:: FFmpegAudio
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
FFmpegPCMAudio
|
||||||
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: FFmpegPCMAudio
|
||||||
|
|
||||||
.. autoclass:: FFmpegPCMAudio
|
.. autoclass:: FFmpegPCMAudio
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
FFmpegOpusAudio
|
||||||
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: FFmpegOpusAudio
|
||||||
|
|
||||||
.. autoclass:: FFmpegOpusAudio
|
.. autoclass:: FFmpegOpusAudio
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
PCMVolumeTransformer
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: PCMVolumeTransformer
|
||||||
|
|
||||||
.. autoclass:: PCMVolumeTransformer
|
.. autoclass:: PCMVolumeTransformer
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
@ -2036,9 +2096,19 @@ Working with :meth:`Guild.audit_logs` is a complicated process with a lot of mac
|
|||||||
involved. The library attempts to make it easy to use and friendly. In order to accomplish
|
involved. The library attempts to make it easy to use and friendly. In order to accomplish
|
||||||
this goal, it must make use of a couple of data classes that aid in this goal.
|
this goal, it must make use of a couple of data classes that aid in this goal.
|
||||||
|
|
||||||
|
AuditLogEntry
|
||||||
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: AuditLogEntry
|
||||||
|
|
||||||
.. autoclass:: AuditLogEntry
|
.. autoclass:: AuditLogEntry
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
AuditLogChanges
|
||||||
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: AuditLogChanges
|
||||||
|
|
||||||
.. class:: AuditLogChanges
|
.. class:: AuditLogChanges
|
||||||
|
|
||||||
An audit log change set.
|
An audit log change set.
|
||||||
@ -2083,6 +2153,11 @@ this goal, it must make use of a couple of data classes that aid in this goal.
|
|||||||
| ``None`` | No attributes are set. |
|
| ``None`` | No attributes are set. |
|
||||||
+----------------------------------------+--------------------------------------------------+
|
+----------------------------------------+--------------------------------------------------+
|
||||||
|
|
||||||
|
AuditLogDiff
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: AuditLogDiff
|
||||||
|
|
||||||
.. class:: AuditLogDiff
|
.. class:: AuditLogDiff
|
||||||
|
|
||||||
Represents an audit log "change" object. A change object has dynamic
|
Represents an audit log "change" object. A change object has dynamic
|
||||||
@ -2428,6 +2503,8 @@ Webhook Support
|
|||||||
|
|
||||||
discord.py offers support for creating, editing, and executing webhooks through the :class:`Webhook` class.
|
discord.py offers support for creating, editing, and executing webhooks through the :class:`Webhook` class.
|
||||||
|
|
||||||
|
.. attributetable:: Webhook
|
||||||
|
|
||||||
.. autoclass:: Webhook
|
.. autoclass:: Webhook
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
@ -2459,18 +2536,43 @@ They are mainly there for usage with :func:`py:isinstance` and :func:`py:issubcl
|
|||||||
This library has a module related to abstract base classes, some of which are actually from the :doc:`abc <py:library/abc>` standard
|
This library has a module related to abstract base classes, some of which are actually from the :doc:`abc <py:library/abc>` standard
|
||||||
module, others which are not.
|
module, others which are not.
|
||||||
|
|
||||||
|
Snowflake
|
||||||
|
~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: discord.abc.Snowflake
|
||||||
|
|
||||||
.. autoclass:: discord.abc.Snowflake
|
.. autoclass:: discord.abc.Snowflake
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
User
|
||||||
|
~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: discord.abc.User
|
||||||
|
|
||||||
.. autoclass:: discord.abc.User
|
.. autoclass:: discord.abc.User
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
PrivateChannel
|
||||||
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: discord.abc.PrivateChannel
|
||||||
|
|
||||||
.. autoclass:: discord.abc.PrivateChannel
|
.. autoclass:: discord.abc.PrivateChannel
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
GuildChannel
|
||||||
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: discord.abc.GuildChannel
|
||||||
|
|
||||||
.. autoclass:: discord.abc.GuildChannel
|
.. autoclass:: discord.abc.GuildChannel
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
Messageable
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: discord.abc.Messageable
|
||||||
|
|
||||||
.. autoclass:: discord.abc.Messageable
|
.. autoclass:: discord.abc.Messageable
|
||||||
:members:
|
:members:
|
||||||
:exclude-members: history, typing
|
:exclude-members: history, typing
|
||||||
@ -2481,6 +2583,11 @@ module, others which are not.
|
|||||||
.. automethod:: discord.abc.Messageable.typing
|
.. automethod:: discord.abc.Messageable.typing
|
||||||
:async-with:
|
:async-with:
|
||||||
|
|
||||||
|
Connectable
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: discord.abc.Connectable
|
||||||
|
|
||||||
.. autoclass:: discord.abc.Connectable
|
.. autoclass:: discord.abc.Connectable
|
||||||
|
|
||||||
.. _discord_api_models:
|
.. _discord_api_models:
|
||||||
@ -2513,6 +2620,8 @@ the user of the library.
|
|||||||
ClientUser
|
ClientUser
|
||||||
~~~~~~~~~~~~
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: ClientUser
|
||||||
|
|
||||||
.. autoclass:: ClientUser()
|
.. autoclass:: ClientUser()
|
||||||
:members:
|
:members:
|
||||||
:inherited-members:
|
:inherited-members:
|
||||||
@ -2520,12 +2629,16 @@ ClientUser
|
|||||||
Relationship
|
Relationship
|
||||||
~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: Relationship
|
||||||
|
|
||||||
.. autoclass:: Relationship()
|
.. autoclass:: Relationship()
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
User
|
User
|
||||||
~~~~~
|
~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: User
|
||||||
|
|
||||||
.. autoclass:: User()
|
.. autoclass:: User()
|
||||||
:members:
|
:members:
|
||||||
:inherited-members:
|
:inherited-members:
|
||||||
@ -2540,24 +2653,32 @@ User
|
|||||||
Attachment
|
Attachment
|
||||||
~~~~~~~~~~~
|
~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: Attachment
|
||||||
|
|
||||||
.. autoclass:: Attachment()
|
.. autoclass:: Attachment()
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
Asset
|
Asset
|
||||||
~~~~~
|
~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: Asset
|
||||||
|
|
||||||
.. autoclass:: Asset()
|
.. autoclass:: Asset()
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
Message
|
Message
|
||||||
~~~~~~~
|
~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: Message
|
||||||
|
|
||||||
.. autoclass:: Message()
|
.. autoclass:: Message()
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
Reaction
|
Reaction
|
||||||
~~~~~~~~~
|
~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: Reaction
|
||||||
|
|
||||||
.. autoclass:: Reaction()
|
.. autoclass:: Reaction()
|
||||||
:members:
|
:members:
|
||||||
:exclude-members: users
|
:exclude-members: users
|
||||||
@ -2568,18 +2689,24 @@ Reaction
|
|||||||
CallMessage
|
CallMessage
|
||||||
~~~~~~~~~~~~
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: CallMessage
|
||||||
|
|
||||||
.. autoclass:: CallMessage()
|
.. autoclass:: CallMessage()
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
GroupCall
|
GroupCall
|
||||||
~~~~~~~~~~
|
~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: GroupCall
|
||||||
|
|
||||||
.. autoclass:: GroupCall()
|
.. autoclass:: GroupCall()
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
Guild
|
Guild
|
||||||
~~~~~~
|
~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: Guild
|
||||||
|
|
||||||
.. autoclass:: Guild()
|
.. autoclass:: Guild()
|
||||||
:members:
|
:members:
|
||||||
:exclude-members: audit_logs
|
:exclude-members: audit_logs
|
||||||
@ -2599,6 +2726,8 @@ Integration
|
|||||||
Member
|
Member
|
||||||
~~~~~~
|
~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: Member
|
||||||
|
|
||||||
.. autoclass:: Member()
|
.. autoclass:: Member()
|
||||||
:members:
|
:members:
|
||||||
:inherited-members:
|
:inherited-members:
|
||||||
@ -2613,36 +2742,48 @@ Member
|
|||||||
Spotify
|
Spotify
|
||||||
~~~~~~~~
|
~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: Spotify
|
||||||
|
|
||||||
.. autoclass:: Spotify()
|
.. autoclass:: Spotify()
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
VoiceState
|
VoiceState
|
||||||
~~~~~~~~~~~
|
~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: VoiceState
|
||||||
|
|
||||||
.. autoclass:: VoiceState()
|
.. autoclass:: VoiceState()
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
Emoji
|
Emoji
|
||||||
~~~~~
|
~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: Emoji
|
||||||
|
|
||||||
.. autoclass:: Emoji()
|
.. autoclass:: Emoji()
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
PartialEmoji
|
PartialEmoji
|
||||||
~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: PartialEmoji
|
||||||
|
|
||||||
.. autoclass:: PartialEmoji()
|
.. autoclass:: PartialEmoji()
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
Role
|
Role
|
||||||
~~~~~
|
~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: Role
|
||||||
|
|
||||||
.. autoclass:: Role()
|
.. autoclass:: Role()
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
TextChannel
|
TextChannel
|
||||||
~~~~~~~~~~~~
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: TextChannel
|
||||||
|
|
||||||
.. autoclass:: TextChannel()
|
.. autoclass:: TextChannel()
|
||||||
:members:
|
:members:
|
||||||
:inherited-members:
|
:inherited-members:
|
||||||
@ -2657,6 +2798,8 @@ TextChannel
|
|||||||
VoiceChannel
|
VoiceChannel
|
||||||
~~~~~~~~~~~~~
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: VoiceChannel
|
||||||
|
|
||||||
.. autoclass:: VoiceChannel()
|
.. autoclass:: VoiceChannel()
|
||||||
:members:
|
:members:
|
||||||
:inherited-members:
|
:inherited-members:
|
||||||
@ -2664,6 +2807,8 @@ VoiceChannel
|
|||||||
CategoryChannel
|
CategoryChannel
|
||||||
~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: CategoryChannel
|
||||||
|
|
||||||
.. autoclass:: CategoryChannel()
|
.. autoclass:: CategoryChannel()
|
||||||
:members:
|
:members:
|
||||||
:inherited-members:
|
:inherited-members:
|
||||||
@ -2671,6 +2816,8 @@ CategoryChannel
|
|||||||
DMChannel
|
DMChannel
|
||||||
~~~~~~~~~
|
~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: DMChannel
|
||||||
|
|
||||||
.. autoclass:: DMChannel()
|
.. autoclass:: DMChannel()
|
||||||
:members:
|
:members:
|
||||||
:inherited-members:
|
:inherited-members:
|
||||||
@ -2685,6 +2832,8 @@ DMChannel
|
|||||||
GroupChannel
|
GroupChannel
|
||||||
~~~~~~~~~~~~
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: GroupChannel
|
||||||
|
|
||||||
.. autoclass:: GroupChannel()
|
.. autoclass:: GroupChannel()
|
||||||
:members:
|
:members:
|
||||||
:inherited-members:
|
:inherited-members:
|
||||||
@ -2699,18 +2848,24 @@ GroupChannel
|
|||||||
PartialInviteGuild
|
PartialInviteGuild
|
||||||
~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: PartialInviteGuild
|
||||||
|
|
||||||
.. autoclass:: PartialInviteGuild()
|
.. autoclass:: PartialInviteGuild()
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
PartialInviteChannel
|
PartialInviteChannel
|
||||||
~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: PartialInviteChannel
|
||||||
|
|
||||||
.. autoclass:: PartialInviteChannel()
|
.. autoclass:: PartialInviteChannel()
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
Invite
|
Invite
|
||||||
~~~~~~~
|
~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: Invite
|
||||||
|
|
||||||
.. autoclass:: Invite()
|
.. autoclass:: Invite()
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
@ -2723,12 +2878,16 @@ Template
|
|||||||
WidgetChannel
|
WidgetChannel
|
||||||
~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: WidgetChannel
|
||||||
|
|
||||||
.. autoclass:: WidgetChannel()
|
.. autoclass:: WidgetChannel()
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
WidgetMember
|
WidgetMember
|
||||||
~~~~~~~~~~~~~
|
~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: WidgetMember
|
||||||
|
|
||||||
.. autoclass:: WidgetMember()
|
.. autoclass:: WidgetMember()
|
||||||
:members:
|
:members:
|
||||||
:inherited-members:
|
:inherited-members:
|
||||||
@ -2736,6 +2895,8 @@ WidgetMember
|
|||||||
Widget
|
Widget
|
||||||
~~~~~~~
|
~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: Widget
|
||||||
|
|
||||||
.. autoclass:: Widget()
|
.. autoclass:: Widget()
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
@ -2747,36 +2908,48 @@ MessageReference
|
|||||||
RawMessageDeleteEvent
|
RawMessageDeleteEvent
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: RawMessageDeleteEvent
|
||||||
|
|
||||||
.. autoclass:: RawMessageDeleteEvent()
|
.. autoclass:: RawMessageDeleteEvent()
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
RawBulkMessageDeleteEvent
|
RawBulkMessageDeleteEvent
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: RawBulkMessageDeleteEvent
|
||||||
|
|
||||||
.. autoclass:: RawBulkMessageDeleteEvent()
|
.. autoclass:: RawBulkMessageDeleteEvent()
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
RawMessageUpdateEvent
|
RawMessageUpdateEvent
|
||||||
~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: RawMessageUpdateEvent
|
||||||
|
|
||||||
.. autoclass:: RawMessageUpdateEvent()
|
.. autoclass:: RawMessageUpdateEvent()
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
RawReactionActionEvent
|
RawReactionActionEvent
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: RawReactionActionEvent
|
||||||
|
|
||||||
.. autoclass:: RawReactionActionEvent()
|
.. autoclass:: RawReactionActionEvent()
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
RawReactionClearEvent
|
RawReactionClearEvent
|
||||||
~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: RawReactionClearEvent
|
||||||
|
|
||||||
.. autoclass:: RawReactionClearEvent()
|
.. autoclass:: RawReactionClearEvent()
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
RawReactionClearEmojiEvent
|
RawReactionClearEmojiEvent
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: RawReactionClearEmojiEvent
|
||||||
|
|
||||||
.. autoclass:: RawReactionClearEmojiEvent()
|
.. autoclass:: RawReactionClearEmojiEvent()
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
@ -2807,12 +2980,16 @@ Object
|
|||||||
Embed
|
Embed
|
||||||
~~~~~~
|
~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: Embed
|
||||||
|
|
||||||
.. autoclass:: Embed
|
.. autoclass:: Embed
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
AllowedMentions
|
AllowedMentions
|
||||||
~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: AllowedMentions
|
||||||
|
|
||||||
.. autoclass:: AllowedMentions
|
.. autoclass:: AllowedMentions
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
@ -2831,54 +3008,72 @@ MemberCacheFlags
|
|||||||
File
|
File
|
||||||
~~~~~
|
~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: File
|
||||||
|
|
||||||
.. autoclass:: File
|
.. autoclass:: File
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
Colour
|
Colour
|
||||||
~~~~~~
|
~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: Colour
|
||||||
|
|
||||||
.. autoclass:: Colour
|
.. autoclass:: Colour
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
BaseActivity
|
BaseActivity
|
||||||
~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: BaseActivity
|
||||||
|
|
||||||
.. autoclass:: BaseActivity
|
.. autoclass:: BaseActivity
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
Activity
|
Activity
|
||||||
~~~~~~~~~
|
~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: Activity
|
||||||
|
|
||||||
.. autoclass:: Activity
|
.. autoclass:: Activity
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
Game
|
Game
|
||||||
~~~~~
|
~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: Game
|
||||||
|
|
||||||
.. autoclass:: Game
|
.. autoclass:: Game
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
Streaming
|
Streaming
|
||||||
~~~~~~~~~~~
|
~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: Streaming
|
||||||
|
|
||||||
.. autoclass:: Streaming
|
.. autoclass:: Streaming
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
CustomActivity
|
CustomActivity
|
||||||
~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: CustomActivity
|
||||||
|
|
||||||
.. autoclass:: CustomActivity
|
.. autoclass:: CustomActivity
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
Permissions
|
Permissions
|
||||||
~~~~~~~~~~~~
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: Permissions
|
||||||
|
|
||||||
.. autoclass:: Permissions
|
.. autoclass:: Permissions
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
PermissionOverwrite
|
PermissionOverwrite
|
||||||
~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
.. attributetable:: PermissionOverwrite
|
||||||
|
|
||||||
.. autoclass:: PermissionOverwrite
|
.. autoclass:: PermissionOverwrite
|
||||||
:members:
|
:members:
|
||||||
|
|
||||||
|
22
docs/conf.py
22
docs/conf.py
@ -38,7 +38,8 @@ extensions = [
|
|||||||
'sphinx.ext.napoleon',
|
'sphinx.ext.napoleon',
|
||||||
'sphinxcontrib_trio',
|
'sphinxcontrib_trio',
|
||||||
'details',
|
'details',
|
||||||
'exception_hierarchy'
|
'exception_hierarchy',
|
||||||
|
'attributetable',
|
||||||
]
|
]
|
||||||
|
|
||||||
autodoc_member_order = 'bysource'
|
autodoc_member_order = 'bysource'
|
||||||
@ -143,6 +144,14 @@ html_experimental_html5_writer = True
|
|||||||
# a list of builtin themes.
|
# a list of builtin themes.
|
||||||
html_theme = 'basic'
|
html_theme = 'basic'
|
||||||
|
|
||||||
|
html_context = {
|
||||||
|
'discord_invite': 'https://discord.gg/r3sSKJJ',
|
||||||
|
'discord_extensions': [
|
||||||
|
('discord.ext.commands', 'ext/commands'),
|
||||||
|
('discord.ext.tasks', 'ext/tasks'),
|
||||||
|
],
|
||||||
|
}
|
||||||
|
|
||||||
# Theme options are theme-specific and customize the look and feel of a theme
|
# Theme options are theme-specific and customize the look and feel of a theme
|
||||||
# further. For a list of options available for each theme, see the
|
# further. For a list of options available for each theme, see the
|
||||||
# documentation.
|
# documentation.
|
||||||
@ -166,7 +175,7 @@ html_theme = 'basic'
|
|||||||
# The name of an image file (within the static path) to use as favicon of the
|
# The name of an image file (within the static path) to use as favicon of the
|
||||||
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
||||||
# pixels large.
|
# pixels large.
|
||||||
#html_favicon = None
|
html_favicon = './images/discord_py_logo.ico'
|
||||||
|
|
||||||
# Add any paths that contain custom static files (such as style sheets) here,
|
# Add any paths that contain custom static files (such as style sheets) here,
|
||||||
# relative to this directory. They are copied after the builtin static files,
|
# relative to this directory. They are copied after the builtin static files,
|
||||||
@ -233,6 +242,13 @@ html_static_path = ['_static']
|
|||||||
# implements a search results scorer. If empty, the default will be used.
|
# implements a search results scorer. If empty, the default will be used.
|
||||||
html_search_scorer = '_static/scorer.js'
|
html_search_scorer = '_static/scorer.js'
|
||||||
|
|
||||||
|
html_js_files = [
|
||||||
|
'custom.js',
|
||||||
|
'settings.js',
|
||||||
|
'copy.js',
|
||||||
|
'sidebar.js'
|
||||||
|
]
|
||||||
|
|
||||||
# Output file base name for HTML help builder.
|
# Output file base name for HTML help builder.
|
||||||
htmlhelp_basename = 'discord.pydoc'
|
htmlhelp_basename = 'discord.pydoc'
|
||||||
|
|
||||||
@ -318,6 +334,6 @@ texinfo_documents = [
|
|||||||
#texinfo_no_detailmenu = False
|
#texinfo_no_detailmenu = False
|
||||||
|
|
||||||
def setup(app):
|
def setup(app):
|
||||||
app.add_js_file('custom.js')
|
|
||||||
if app.config.language == 'ja':
|
if app.config.language == 'ja':
|
||||||
app.config.intersphinx_mapping['py'] = ('https://docs.python.org/ja/3', None)
|
app.config.intersphinx_mapping['py'] = ('https://docs.python.org/ja/3', None)
|
||||||
|
app.config.html_context['discord_invite'] = 'https://discord.gg/nXzj3dg'
|
||||||
|
241
docs/extensions/attributetable.py
Normal file
241
docs/extensions/attributetable.py
Normal file
@ -0,0 +1,241 @@
|
|||||||
|
from sphinx.util.docutils import SphinxDirective
|
||||||
|
from sphinx.locale import _
|
||||||
|
from docutils import nodes
|
||||||
|
from sphinx import addnodes
|
||||||
|
|
||||||
|
from collections import OrderedDict, namedtuple
|
||||||
|
import importlib
|
||||||
|
import inspect
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
|
||||||
|
class attributetable(nodes.General, nodes.Element):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class attributetablecolumn(nodes.General, nodes.Element):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class attributetabletitle(nodes.TextElement):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class attributetableplaceholder(nodes.General, nodes.Element):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class attributetablebadge(nodes.TextElement):
|
||||||
|
pass
|
||||||
|
|
||||||
|
class attributetable_item(nodes.Part, nodes.Element):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def visit_attributetable_node(self, node):
|
||||||
|
self.body.append('<div class="py-attribute-table" data-move-to-id="%s">' % node['python-class'])
|
||||||
|
|
||||||
|
def visit_attributetablecolumn_node(self, node):
|
||||||
|
self.body.append(self.starttag(node, 'div', CLASS='py-attribute-table-column'))
|
||||||
|
|
||||||
|
def visit_attributetabletitle_node(self, node):
|
||||||
|
self.body.append(self.starttag(node, 'span'))
|
||||||
|
|
||||||
|
def visit_attributetablebadge_node(self, node):
|
||||||
|
attributes = {
|
||||||
|
'class': 'py-attribute-table-badge',
|
||||||
|
'title': node['badge-type'],
|
||||||
|
}
|
||||||
|
self.body.append(self.starttag(node, 'span', **attributes))
|
||||||
|
|
||||||
|
def visit_attributetable_item_node(self, node):
|
||||||
|
self.body.append(self.starttag(node, 'li', CLASS='py-attribute-table-entry'))
|
||||||
|
|
||||||
|
def depart_attributetable_node(self, node):
|
||||||
|
self.body.append('</div>')
|
||||||
|
|
||||||
|
def depart_attributetablecolumn_node(self, node):
|
||||||
|
self.body.append('</div>')
|
||||||
|
|
||||||
|
def depart_attributetabletitle_node(self, node):
|
||||||
|
self.body.append('</span>')
|
||||||
|
|
||||||
|
def depart_attributetablebadge_node(self, node):
|
||||||
|
self.body.append('</span>')
|
||||||
|
|
||||||
|
def depart_attributetable_item_node(self, node):
|
||||||
|
self.body.append('</li>')
|
||||||
|
|
||||||
|
_name_parser_regex = re.compile(r'(?P<module>[\w.]+\.)?(?P<name>\w+)')
|
||||||
|
|
||||||
|
class PyAttributeTable(SphinxDirective):
|
||||||
|
has_content = False
|
||||||
|
required_arguments = 1
|
||||||
|
optional_arguments = 0
|
||||||
|
final_argument_whitespace = False
|
||||||
|
option_spec = {}
|
||||||
|
|
||||||
|
def parse_name(self, content):
|
||||||
|
path, name = _name_parser_regex.match(content).groups()
|
||||||
|
if path:
|
||||||
|
modulename = path.rstrip('.')
|
||||||
|
else:
|
||||||
|
modulename = self.env.temp_data.get('autodoc:module')
|
||||||
|
if not modulename:
|
||||||
|
modulename = self.env.ref_context.get('py:module')
|
||||||
|
if modulename is None:
|
||||||
|
raise RuntimeError('modulename somehow None for %s in %s.' % (content, self.env.docname))
|
||||||
|
|
||||||
|
return modulename, name
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
"""If you're curious on the HTML this is meant to generate:
|
||||||
|
|
||||||
|
<div class="py-attribute-table">
|
||||||
|
<div class="py-attribute-table-column">
|
||||||
|
<span>_('Attributes')</span>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a href="...">
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="py-attribute-table-column">
|
||||||
|
<span>_('Methods')</span>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a href="..."></a>
|
||||||
|
<span class="py-attribute-badge" title="decorator">D</span>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
However, since this requires the tree to be complete
|
||||||
|
and parsed, it'll need to be done at a different stage and then
|
||||||
|
replaced.
|
||||||
|
"""
|
||||||
|
content = self.arguments[0].strip()
|
||||||
|
node = attributetableplaceholder('')
|
||||||
|
modulename, name = self.parse_name(content)
|
||||||
|
node['python-module'] = modulename
|
||||||
|
node['python-class'] = name
|
||||||
|
node['python-full-name'] = '%s.%s' % (modulename, name)
|
||||||
|
return [node]
|
||||||
|
|
||||||
|
def build_lookup_table(env):
|
||||||
|
# Given an environment, load up a lookup table of
|
||||||
|
# full-class-name: objects
|
||||||
|
result = {}
|
||||||
|
domain = env.domains['py']
|
||||||
|
|
||||||
|
ignored = {
|
||||||
|
'data', 'exception', 'module', 'class',
|
||||||
|
}
|
||||||
|
|
||||||
|
for (fullname, _, objtype, docname, _, _) in domain.get_objects():
|
||||||
|
if objtype in ignored:
|
||||||
|
continue
|
||||||
|
|
||||||
|
classname, _, child = fullname.rpartition('.')
|
||||||
|
try:
|
||||||
|
result[classname].append(child)
|
||||||
|
except KeyError:
|
||||||
|
result[classname] = [child]
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
TableElement = namedtuple('TableElement', 'fullname label badge')
|
||||||
|
|
||||||
|
def process_attributetable(app, doctree, fromdocname):
|
||||||
|
env = app.builder.env
|
||||||
|
|
||||||
|
lookup = build_lookup_table(env)
|
||||||
|
for node in doctree.traverse(attributetableplaceholder):
|
||||||
|
modulename, classname, fullname = node['python-module'], node['python-class'], node['python-full-name']
|
||||||
|
groups = get_class_results(lookup, modulename, classname, fullname)
|
||||||
|
table = attributetable('')
|
||||||
|
for label, subitems in groups.items():
|
||||||
|
if not subitems:
|
||||||
|
continue
|
||||||
|
table.append(class_results_to_node(label, sorted(subitems, key=lambda c: c.label)))
|
||||||
|
|
||||||
|
table['python-class'] = fullname
|
||||||
|
|
||||||
|
if not table:
|
||||||
|
node.replace_self([])
|
||||||
|
else:
|
||||||
|
node.replace_self([table])
|
||||||
|
|
||||||
|
def get_class_results(lookup, modulename, name, fullname):
|
||||||
|
module = importlib.import_module(modulename)
|
||||||
|
cls = getattr(module, name)
|
||||||
|
|
||||||
|
groups = OrderedDict([
|
||||||
|
(_('Attributes'), []),
|
||||||
|
(_('Methods'), []),
|
||||||
|
])
|
||||||
|
|
||||||
|
try:
|
||||||
|
members = lookup[fullname]
|
||||||
|
except KeyError:
|
||||||
|
return groups
|
||||||
|
|
||||||
|
for attr in members:
|
||||||
|
attrlookup = '%s.%s' % (fullname, attr)
|
||||||
|
key = _('Attributes')
|
||||||
|
badge = None
|
||||||
|
label = attr
|
||||||
|
|
||||||
|
for base in cls.__mro__:
|
||||||
|
value = base.__dict__.get(attr)
|
||||||
|
if value is not None:
|
||||||
|
break
|
||||||
|
|
||||||
|
if value is not None:
|
||||||
|
doc = value.__doc__ or ''
|
||||||
|
if inspect.iscoroutinefunction(value) or doc.startswith('|coro|'):
|
||||||
|
key = _('Methods')
|
||||||
|
badge = attributetablebadge('async', 'async')
|
||||||
|
badge['badge-type'] = _('coroutine')
|
||||||
|
elif isinstance(value, classmethod):
|
||||||
|
key = _('Methods')
|
||||||
|
label = '%s.%s' % (name, attr)
|
||||||
|
badge = attributetablebadge('cls', 'cls')
|
||||||
|
badge['badge-type'] = _('classmethod')
|
||||||
|
elif inspect.isfunction(value):
|
||||||
|
if doc.startswith(('A decorator', 'A shortcut decorator')):
|
||||||
|
# finicky but surprisingly consistent
|
||||||
|
badge = attributetablebadge('@', '@')
|
||||||
|
badge['badge-type'] = _('decorator')
|
||||||
|
key = _('Methods')
|
||||||
|
else:
|
||||||
|
key = _('Methods')
|
||||||
|
badge = attributetablebadge('def', 'def')
|
||||||
|
badge['badge-type'] = _('method')
|
||||||
|
|
||||||
|
groups[key].append(TableElement(fullname=attrlookup, label=label, badge=badge))
|
||||||
|
|
||||||
|
return groups
|
||||||
|
|
||||||
|
def class_results_to_node(key, elements):
|
||||||
|
title = attributetabletitle(key, key)
|
||||||
|
ul = nodes.bullet_list('')
|
||||||
|
for element in elements:
|
||||||
|
ref = nodes.reference('', '', internal=True,
|
||||||
|
refuri='#' + element.fullname,
|
||||||
|
anchorname='',
|
||||||
|
*[nodes.Text(element.label)])
|
||||||
|
para = addnodes.compact_paragraph('', '', ref)
|
||||||
|
if element.badge is not None:
|
||||||
|
ul.append(attributetable_item('', element.badge, para))
|
||||||
|
else:
|
||||||
|
ul.append(attributetable_item('', para))
|
||||||
|
|
||||||
|
return attributetablecolumn('', title, ul)
|
||||||
|
|
||||||
|
def setup(app):
|
||||||
|
app.add_directive('attributetable', PyAttributeTable)
|
||||||
|
app.add_node(attributetable, html=(visit_attributetable_node, depart_attributetable_node))
|
||||||
|
app.add_node(attributetablecolumn, html=(visit_attributetablecolumn_node, depart_attributetablecolumn_node))
|
||||||
|
app.add_node(attributetabletitle, html=(visit_attributetabletitle_node, depart_attributetabletitle_node))
|
||||||
|
app.add_node(attributetablebadge, html=(visit_attributetablebadge_node, depart_attributetablebadge_node))
|
||||||
|
app.add_node(attributetable_item, html=(visit_attributetable_item_node, depart_attributetable_item_node))
|
||||||
|
app.add_node(attributetableplaceholder)
|
||||||
|
app.connect('doctree-resolved', process_attributetable)
|
@ -1,5 +1,24 @@
|
|||||||
from sphinx.builders.html import StandaloneHTMLBuilder
|
from sphinx.builders.html import StandaloneHTMLBuilder
|
||||||
from sphinx.environment.adapters.indexentries import IndexEntries
|
from sphinx.environment.adapters.indexentries import IndexEntries
|
||||||
|
from sphinx.writers.html5 import HTML5Translator
|
||||||
|
|
||||||
|
class DPYHTML5Translator(HTML5Translator):
|
||||||
|
def visit_section(self, node):
|
||||||
|
self.section_level += 1
|
||||||
|
self.body.append(
|
||||||
|
self.starttag(node, 'section'))
|
||||||
|
|
||||||
|
def depart_section(self, node):
|
||||||
|
self.section_level -= 1
|
||||||
|
self.body.append('</section>\n')
|
||||||
|
|
||||||
|
def visit_table(self, node):
|
||||||
|
self.body.append('<div class="table-wrapper">')
|
||||||
|
super().visit_table(node)
|
||||||
|
|
||||||
|
def depart_table(self, node):
|
||||||
|
super().depart_table(node)
|
||||||
|
self.body.append('</div>')
|
||||||
|
|
||||||
class DPYStandaloneHTMLBuilder(StandaloneHTMLBuilder):
|
class DPYStandaloneHTMLBuilder(StandaloneHTMLBuilder):
|
||||||
# This is mostly copy pasted from Sphinx.
|
# This is mostly copy pasted from Sphinx.
|
||||||
@ -31,16 +50,26 @@ class DPYStandaloneHTMLBuilder(StandaloneHTMLBuilder):
|
|||||||
else:
|
else:
|
||||||
self.handle_page('genindex', genindexcontext, 'genindex.html')
|
self.handle_page('genindex', genindexcontext, 'genindex.html')
|
||||||
|
|
||||||
def get_builder(app):
|
|
||||||
|
def add_custom_jinja2(app):
|
||||||
|
env = app.builder.templates.environment
|
||||||
|
env.tests['prefixedwith'] = str.startswith
|
||||||
|
env.tests['suffixedwith'] = str.endswith
|
||||||
|
|
||||||
|
def add_builders(app):
|
||||||
"""This is necessary because RTD injects their own for some reason."""
|
"""This is necessary because RTD injects their own for some reason."""
|
||||||
try:
|
try:
|
||||||
original = app.registry.builders['readthedocs']
|
original = app.registry.builders['readthedocs']
|
||||||
except KeyError:
|
except KeyError:
|
||||||
return DPYStandaloneHTMLBuilder
|
app.set_translator('html', DPYHTML5Translator, override=True)
|
||||||
|
app.add_builder(DPYStandaloneHTMLBuilder, override=True)
|
||||||
else:
|
else:
|
||||||
injected_mro = tuple(base if base is not StandaloneHTMLBuilder else DPYStandaloneHTMLBuilder
|
injected_mro = tuple(base if base is not StandaloneHTMLBuilder else DPYStandaloneHTMLBuilder
|
||||||
for base in original.mro()[1:])
|
for base in original.mro()[1:])
|
||||||
return type(original.__name__, injected_mro, {'name': 'readthedocs'})
|
new_builder = type(original.__name__, injected_mro, {'name': 'readthedocs'})
|
||||||
|
app.set_translator('readthedocs', DPYHTML5Translator, override=True)
|
||||||
|
app.add_builder(new_builder, override=True)
|
||||||
|
|
||||||
def setup(app):
|
def setup(app):
|
||||||
app.add_builder(get_builder(app), override=True)
|
add_builders(app)
|
||||||
|
app.connect('builder-inited', add_custom_jinja2)
|
||||||
|
BIN
docs/images/discord_py_logo.ico
Normal file
BIN
docs/images/discord_py_logo.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 264 KiB |
4
docs/images/drop_down_icon.svg
Normal file
4
docs/images/drop_down_icon.svg
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<svg fill='white' height='24' viewBox='0 0 24 24' width='24' xmlns='http://www.w3.org/2000/svg'>
|
||||||
|
<path d='M7 10l5 5 5-5z'/>
|
||||||
|
<path d='M0 0h24v24H0z' fill='none'/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 177 B |
Binary file not shown.
Before Width: | Height: | Size: 28 KiB |
17
docs/images/snake.svg
Normal file
17
docs/images/snake.svg
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<svg style="width: 100%; height: 100%"
|
||||||
|
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1036 597.33331" height="597.333" width="1036">
|
||||||
|
<path d="M498.46 84.248c-1.6 1.665-2.4 3.597-2.4 5.93 0 2.333.8 4.265 2.4 5.863 1.667 1.67 3.6 2.47 5.932 2.47 2.332 0 4.265-.8 5.864-2.46 1.665-1.59 2.465-3.53 2.465-5.86 0-2.33-.8-4.26-2.46-5.93-1.6-1.6-3.53-2.4-5.86-2.4s-4.26.8-5.93 2.4m-9.06 5.93c0-2.33-.8-4.26-2.46-5.93-1.6-1.6-3.53-2.4-5.862-2.4s-4.265.8-5.93 2.4c-1.6 1.67-2.4 3.6-2.4 5.93 0 2.33.8 4.27 2.4 5.86 1.665 1.67 3.598 2.47 5.93 2.47s4.265-.8 5.864-2.46c1.663-1.593 2.463-3.53 2.463-5.86m46.647 0c0-2.333-.8-4.27-2.467-5.93-1.6-1.6-3.53-2.4-5.86-2.4s-4.265.8-5.93 2.4c-1.6 1.665-2.4 3.597-2.4 5.93 0 2.333.8 4.265 2.4 5.863 1.665 1.67 3.598 2.467 5.93 2.467s4.265-.8 5.864-2.468c1.667-1.598 2.467-3.53 2.467-5.86" fill="#e0e0e0"/>
|
||||||
|
<path d="M2748.2-850.22H155.382c-76.964 0-115.447-48.474-115.447-144.932V-4303.65c0-96.45 38.483-144.93 115.447-144.93H6321.57c76.97 0 115.45 48.48 115.45 144.93v3308.498c0 96.458-38.48 144.933-115.45 144.933H3737.75" fill="none" stroke="#e0e0e0" stroke-width="79.964" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" transform="matrix(.13334 0 0 .13333 0 597.333)"/>
|
||||||
|
<path d="M4177.05-3798.87v2178.5H998.996v-2178.5c0-133.44 66.474-199.91 199.914-199.91h2778.23c133.44 0 199.91 66.47 199.91 199.91z" fill="none" stroke="#e0e0e0" stroke-width="79.964" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" transform="matrix(.13334 0 0 .13333 0 597.333)"/>
|
||||||
|
<path d="M6274.1-4181.2v2844.7c0 82.97-36.49 124.45-108.95 124.45H322.307c-72.47 0-108.952-41.48-108.952-124.45v-2844.7c0-82.96 36.483-124.44 108.952-124.44H6165.15c72.46 0 108.95 41.48 108.95 124.44zM449.25-41.084h147.43m182.418 0h339.842m1407.86 0c0-91.458 46.98-151.43 140.94-179.92 23.99-7.497 50.97-12.493 80.46-15.993m0 0c24.49-2.497 51.48-3.997 79.96-3.997h820.63c32.49 0 61.97 2 88.96 5.497M1348.84-41.084H2526.8m221.4-195.913V-850.22m989.55 614.723c26.49 3 49.98 7.996 71.47 14.493 93.96 28.49 140.93 88.462 140.93 179.92m2024.08 0h50.98m-468.28 0h219.89m-1826.67 0h1416.86M3737.75-235.497V-850.22m212.4 809.136H2526.8M3737.75-850.22H2748.2" fill="none" stroke="#e0e0e0" stroke-width="79.964" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" transform="matrix(.13334 0 0 .13333 0 597.333)"/>
|
||||||
|
<path d="M2126.79-2789.58c-38.13 38.49-57.37 85.01-57.37 139.59 0 54.22 19.24 100.75 57.37 139.23 38.48 38.48 85.01 57.73 139.59 57.73 54.22 0 100.75-19.25 139.23-57.73 38.49-38.48 57.73-85.01 57.73-139.23 0-54.58-19.24-101.1-57.73-139.59-38.48-38.13-85.01-57.37-139.23-57.37-54.58 0-101.11 19.24-139.59 57.37z" fill="none" stroke="#e0e0e0" stroke-width="69.967" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" transform="matrix(.13334 0 0 .13333 0 597.333)"/>
|
||||||
|
<path d="M2640.7-3448.32c-286.51-11.2-546.09 38.83-778.73 150.43 143.08-106.7 307.5-172.47 493.27-197.66-6.3-14.34-18.9-29.04-38.13-43.73h-62.98c-210.25 36.73-380.62 103.9-511.11 201.16-197.66 325.7-291.76 678.68-281.62 1058.6 142.39 189.97 349.49 279.53 621.31 267.98l122.45-129.44c-148.68-52.82-255.03-123.49-318.7-212 214.1 133.99 465.63 199.41 754.24 196.26" fill="none" stroke="#e0e0e0" stroke-width="69.967" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" transform="matrix(.13334 0 0 .13333 0 597.333)"/>
|
||||||
|
<path d="M-3149.74-2789.58c-38.13 38.49-57.37 85.01-57.37 139.59 0 54.22 19.24 100.75 57.37 139.23 38.49 38.48 85.01 57.73 139.59 57.73 54.22 0 100.75-19.25 139.23-57.73 38.49-38.48 57.73-85.01 57.73-139.23 0-54.58-19.24-101.1-57.73-139.59-38.48-38.13-85.01-57.37-139.23-57.37-54.58 0-101.1 19.24-139.59 57.37z" fill="none" stroke="#e0e0e0" stroke-width="69.967" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" transform="matrix(-.13334 0 0 .13333 0 597.333)"/>
|
||||||
|
<path d="M-2635.83-3448.32c-286.51-11.2-546.09 38.83-778.73 150.43 143.08-106.7 307.5-172.47 493.27-197.66-6.3-14.34-18.89-29.04-38.13-43.73h-62.98c-210.25 36.73-380.62 103.9-511.11 201.16-197.66 325.7-291.76 678.68-281.62 1058.6 142.39 189.97 349.49 279.53 621.32 267.98l122.44-129.44c-148.68-52.82-255.03-123.49-318.7-212 214.1 133.99 465.63 199.41 754.24 196.26" fill="none" stroke="#e0e0e0" stroke-width="69.967" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" transform="matrix(-.13334 0 0 .13333 0 597.333)"/>
|
||||||
|
<path d="M474.47 230.785c-17.793 0-26.655 8.863-26.655 26.654v261.2-23.99H207.912h47.98v-58.9 34.91h143.94-47.98v23.99h95.963v-94.88c-.534-16.73-9.396-25.06-26.656-25.06H186.58c-17.792 0-26.656 8.86-26.656 26.65v163.85c0 17.26 8.33 26.12 25.057 26.65h333.8c16.66-.53 24.99-9.39 24.99-26.65V326.74h-34.65c-16.66.667-24.65-7.33-23.99-23.987h300.28c4.2-7.13 6.27-15.126 6.27-23.99v-21.32c0-17.792-8.86-26.655-26.65-26.655zm-13.327 311.842l23.99 22.588-23.99-22.588" fill="#eadc62"/>
|
||||||
|
<path d="M777.616 312.677c3.132-3.132 5.73-6.397 7.796-9.928h-300.28c-.665 16.65 7.33 24.65 23.992 23.98h234.572c13.26 0 24.523-4.67 33.92-14.06" fill="#f2edc8"/>
|
||||||
|
<path d="M3890.68-40.99H1387.32m1971.1-1440.85v-1067.51c0-133.44 66.47-199.91 199.91-199.91h2179.01c133.44 0 199.91 66.47 199.91 199.91v159.93c0 66.47-15.49 126.44-46.98 179.92" fill="none" stroke="#000" stroke-width="79.964" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" transform="matrix(.13334 0 0 .13333 0 597.333)"/>
|
||||||
|
<path d="M5890.27-2209.5c-15.49 26.48-34.98 50.97-58.47 74.46-70.47 70.47-154.93 105.45-254.39 105.45H4078.1M3358.42-590.243V-770.16m719.68-1259.43h-259.88m-459.8 1259.43v-711.68M3638.3-240.9l-179.92-169.423M4449.93-40.99h-559.25m187.42-1988.6V-240.9c0 129.44-62.48 195.91-187.42 199.91m1007.04 0H4717.8M1559.24-770.16h359.84m4777.83-1259.43l-179.92-179.91m0 0l179.92-179.92M949.022-40.99h438.298M6516.99-2209.5h-626.72m-3971.19 997.54v261.88m0 0v179.92m1079.51-179.92h-359.84m0 0v179.92m-719.67-179.92h719.67m0 179.92h-719.67M1387.32-40.99c-125.44-4-187.91-70.47-187.91-199.91v-1228.94c0-133.44 66.47-199.91 199.9-199.91h1759.2c129.45 0 195.92 62.47 199.91 187.91m-719.67 711.68h719.67" fill="none" stroke="#000" stroke-width="79.964" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" transform="matrix(.13334 0 0 .13333 0 597.333)"/>
|
||||||
|
<path d="M7716.44-2209.5H7356.6m0 539.75l-179.92-179.92m179.92-899.59l-179.92 179.92" fill="none" stroke="#e0e0e0" stroke-width="99.954" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" transform="matrix(.13334 0 0 .13333 0 597.333)"/>
|
||||||
|
<path d="M769.485 258.24c-2.332-2.333-5.13-3.467-8.462-3.467s-6.198 1.134-8.53 3.466c-2.333 2.33-3.466 5.19-3.466 8.52s1.133 6.13 3.466 8.46c2.332 2.33 5.198 3.53 8.53 3.53 3.332 0 6.13-1.2 8.462-3.53 2.334-2.34 3.532-5.13 3.532-8.47 0-3.33-1.198-6.2-3.532-8.53"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 6.7 KiB |
17
docs/images/snake_dark.svg
Normal file
17
docs/images/snake_dark.svg
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<svg style="width: 100%; height: 100%"
|
||||||
|
xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1036 597.33331" height="597.333" width="1036">
|
||||||
|
<path d="M498.46 84.248c-1.6 1.665-2.4 3.597-2.4 5.93 0 2.333.8 4.265 2.4 5.863 1.667 1.67 3.6 2.47 5.932 2.47 2.332 0 4.265-.8 5.864-2.46 1.665-1.59 2.465-3.53 2.465-5.86 0-2.33-.8-4.26-2.46-5.93-1.6-1.6-3.53-2.4-5.86-2.4s-4.26.8-5.93 2.4m-9.06 5.93c0-2.33-.8-4.26-2.46-5.93-1.6-1.6-3.53-2.4-5.862-2.4s-4.265.8-5.93 2.4c-1.6 1.67-2.4 3.6-2.4 5.93 0 2.33.8 4.27 2.4 5.86 1.665 1.67 3.598 2.47 5.93 2.47s4.265-.8 5.864-2.46c1.663-1.593 2.463-3.53 2.463-5.86m46.647 0c0-2.333-.8-4.27-2.467-5.93-1.6-1.6-3.53-2.4-5.86-2.4s-4.265.8-5.93 2.4c-1.6 1.665-2.4 3.597-2.4 5.93 0 2.333.8 4.265 2.4 5.863 1.665 1.67 3.598 2.467 5.93 2.467s4.265-.8 5.864-2.468c1.667-1.598 2.467-3.53 2.467-5.86" fill="#161616"/>
|
||||||
|
<path d="M2748.2-850.22H155.382c-76.964 0-115.447-48.474-115.447-144.932V-4303.65c0-96.45 38.483-144.93 115.447-144.93H6321.57c76.97 0 115.45 48.48 115.45 144.93v3308.498c0 96.458-38.48 144.933-115.45 144.933H3737.75" fill="none" stroke="#161616" stroke-width="79.964" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" transform="matrix(.13334 0 0 .13333 0 597.333)"/>
|
||||||
|
<path d="M4177.05-3798.87v2178.5H998.996v-2178.5c0-133.44 66.474-199.91 199.914-199.91h2778.23c133.44 0 199.91 66.47 199.91 199.91z" fill="none" stroke="#161616" stroke-width="79.964" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" transform="matrix(.13334 0 0 .13333 0 597.333)"/>
|
||||||
|
<path d="M6274.1-4181.2v2844.7c0 82.97-36.49 124.45-108.95 124.45H322.307c-72.47 0-108.952-41.48-108.952-124.45v-2844.7c0-82.96 36.483-124.44 108.952-124.44H6165.15c72.46 0 108.95 41.48 108.95 124.44zM449.25-41.084h147.43m182.418 0h339.842m1407.86 0c0-91.458 46.98-151.43 140.94-179.92 23.99-7.497 50.97-12.493 80.46-15.993m0 0c24.49-2.497 51.48-3.997 79.96-3.997h820.63c32.49 0 61.97 2 88.96 5.497M1348.84-41.084H2526.8m221.4-195.913V-850.22m989.55 614.723c26.49 3 49.98 7.996 71.47 14.493 93.96 28.49 140.93 88.462 140.93 179.92m2024.08 0h50.98m-468.28 0h219.89m-1826.67 0h1416.86M3737.75-235.497V-850.22m212.4 809.136H2526.8M3737.75-850.22H2748.2" fill="none" stroke="#161616" stroke-width="79.964" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" transform="matrix(.13334 0 0 .13333 0 597.333)"/>
|
||||||
|
<path d="M2126.79-2789.58c-38.13 38.49-57.37 85.01-57.37 139.59 0 54.22 19.24 100.75 57.37 139.23 38.48 38.48 85.01 57.73 139.59 57.73 54.22 0 100.75-19.25 139.23-57.73 38.49-38.48 57.73-85.01 57.73-139.23 0-54.58-19.24-101.1-57.73-139.59-38.48-38.13-85.01-57.37-139.23-57.37-54.58 0-101.11 19.24-139.59 57.37z" fill="none" stroke="#161616" stroke-width="69.967" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" transform="matrix(.13334 0 0 .13333 0 597.333)"/>
|
||||||
|
<path d="M2640.7-3448.32c-286.51-11.2-546.09 38.83-778.73 150.43 143.08-106.7 307.5-172.47 493.27-197.66-6.3-14.34-18.9-29.04-38.13-43.73h-62.98c-210.25 36.73-380.62 103.9-511.11 201.16-197.66 325.7-291.76 678.68-281.62 1058.6 142.39 189.97 349.49 279.53 621.31 267.98l122.45-129.44c-148.68-52.82-255.03-123.49-318.7-212 214.1 133.99 465.63 199.41 754.24 196.26" fill="none" stroke="#161616" stroke-width="69.967" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" transform="matrix(.13334 0 0 .13333 0 597.333)"/>
|
||||||
|
<path d="M-3149.74-2789.58c-38.13 38.49-57.37 85.01-57.37 139.59 0 54.22 19.24 100.75 57.37 139.23 38.49 38.48 85.01 57.73 139.59 57.73 54.22 0 100.75-19.25 139.23-57.73 38.49-38.48 57.73-85.01 57.73-139.23 0-54.58-19.24-101.1-57.73-139.59-38.48-38.13-85.01-57.37-139.23-57.37-54.58 0-101.1 19.24-139.59 57.37z" fill="none" stroke="#161616" stroke-width="69.967" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" transform="matrix(-.13334 0 0 .13333 0 597.333)"/>
|
||||||
|
<path d="M-2635.83-3448.32c-286.51-11.2-546.09 38.83-778.73 150.43 143.08-106.7 307.5-172.47 493.27-197.66-6.3-14.34-18.89-29.04-38.13-43.73h-62.98c-210.25 36.73-380.62 103.9-511.11 201.16-197.66 325.7-291.76 678.68-281.62 1058.6 142.39 189.97 349.49 279.53 621.32 267.98l122.44-129.44c-148.68-52.82-255.03-123.49-318.7-212 214.1 133.99 465.63 199.41 754.24 196.26" fill="none" stroke="#161616" stroke-width="69.967" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" transform="matrix(-.13334 0 0 .13333 0 597.333)"/>
|
||||||
|
<path d="M474.47 230.785c-17.793 0-26.655 8.863-26.655 26.654v261.2-23.99H207.912h47.98v-58.9 34.91h143.94-47.98v23.99h95.963v-94.88c-.534-16.73-9.396-25.06-26.656-25.06H186.58c-17.792 0-26.656 8.86-26.656 26.65v163.85c0 17.26 8.33 26.12 25.057 26.65h333.8c16.66-.53 24.99-9.39 24.99-26.65V326.74h-34.65c-16.66.667-24.65-7.33-23.99-23.987h300.28c4.2-7.13 6.27-15.126 6.27-23.99v-21.32c0-17.792-8.86-26.655-26.65-26.655zm-13.327 311.842l23.99 22.588-23.99-22.588" fill="#376fa1"/>
|
||||||
|
<path d="M777.616 312.677c3.132-3.132 5.73-6.397 7.796-9.928h-300.28c-.665 16.65 7.33 24.65 23.992 23.98h234.572c13.26 0 24.523-4.67 33.92-14.06" fill="#578fc1"/>
|
||||||
|
<path d="M3890.68-40.99H1387.32m1971.1-1440.85v-1067.51c0-133.44 66.47-199.91 199.91-199.91h2179.01c133.44 0 199.91 66.47 199.91 199.91v159.93c0 66.47-15.49 126.44-46.98 179.92" fill="none" stroke="#000" stroke-width="79.964" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" transform="matrix(.13334 0 0 .13333 0 597.333)"/>
|
||||||
|
<path d="M5890.27-2209.5c-15.49 26.48-34.98 50.97-58.47 74.46-70.47 70.47-154.93 105.45-254.39 105.45H4078.1M3358.42-590.243V-770.16m719.68-1259.43h-259.88m-459.8 1259.43v-711.68M3638.3-240.9l-179.92-169.423M4449.93-40.99h-559.25m187.42-1988.6V-240.9c0 129.44-62.48 195.91-187.42 199.91m1007.04 0H4717.8M1559.24-770.16h359.84m4777.83-1259.43l-179.92-179.91m0 0l179.92-179.92M949.022-40.99h438.298M6516.99-2209.5h-626.72m-3971.19 997.54v261.88m0 0v179.92m1079.51-179.92h-359.84m0 0v179.92m-719.67-179.92h719.67m0 179.92h-719.67M1387.32-40.99c-125.44-4-187.91-70.47-187.91-199.91v-1228.94c0-133.44 66.47-199.91 199.9-199.91h1759.2c129.45 0 195.92 62.47 199.91 187.91m-719.67 711.68h719.67" fill="none" stroke="#000" stroke-width="79.964" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" transform="matrix(.13334 0 0 .13333 0 597.333)"/>
|
||||||
|
<path d="M7716.44-2209.5H7356.6m0 539.75l-179.92-179.92m179.92-899.59l-179.92 179.92" fill="none" stroke="#161616" stroke-width="99.954" stroke-linecap="round" stroke-linejoin="round" stroke-miterlimit="10" transform="matrix(.13334 0 0 .13333 0 597.333)"/>
|
||||||
|
<path d="M769.485 258.24c-2.332-2.333-5.13-3.467-8.462-3.467s-6.198 1.134-8.53 3.466c-2.333 2.33-3.466 5.19-3.466 8.52s1.133 6.13 3.466 8.46c2.332 2.33 5.198 3.53 8.53 3.53 3.332 0 6.13-1.2 8.462-3.53 2.334-2.34 3.532-5.13 3.532-8.47 0-3.33-1.198-6.2-3.532-8.53"/>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 6.6 KiB |
@ -6,7 +6,8 @@
|
|||||||
Welcome to discord.py
|
Welcome to discord.py
|
||||||
===========================
|
===========================
|
||||||
|
|
||||||
.. image:: /images/snake.png
|
.. image:: /images/snake.svg
|
||||||
|
.. image:: /images/snake_dark.svg
|
||||||
|
|
||||||
discord.py is a modern, easy to use, feature-rich, and async ready API wrapper
|
discord.py is a modern, easy to use, feature-rich, and async ready API wrapper
|
||||||
for Discord.
|
for Discord.
|
||||||
|
4
setup.py
4
setup.py
@ -36,8 +36,8 @@ with open('README.rst') as f:
|
|||||||
extras_require = {
|
extras_require = {
|
||||||
'voice': ['PyNaCl==1.3.0'],
|
'voice': ['PyNaCl==1.3.0'],
|
||||||
'docs': [
|
'docs': [
|
||||||
'sphinx==1.8.5',
|
'sphinx==3.0.3',
|
||||||
'sphinxcontrib_trio==1.1.1',
|
'sphinxcontrib_trio==1.1.2',
|
||||||
'sphinxcontrib-websupport',
|
'sphinxcontrib-websupport',
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user