64 lines
3.1 KiB
HTML
64 lines
3.1 KiB
HTML
|
<!DOCTYPE html>
|
||
|
<html lang="en">
|
||
|
<head>
|
||
|
<meta charset="UTF-8">
|
||
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||
|
<meta name="description" content="Arch's Discord Bots">
|
||
|
<title>Discord Bots | arch.dog</title>
|
||
|
<link rel="stylesheet" href="./styles.css">
|
||
|
</head>
|
||
|
<body>
|
||
|
<main>
|
||
|
<h1>Discord Bots</h1>
|
||
|
<p>Over time, I write Discord bots to do various small tasks for servers.
|
||
|
You may also find them useful!</p>
|
||
|
<section>
|
||
|
<h2>DupliKate <small>track duplicate links</small></h2>
|
||
|
<p>
|
||
|
It's fairly common for the same link to be shared by multiple members over the
|
||
|
course of a day or week. DupliKate keeps track of links posted and notifies a
|
||
|
member if they post the same link in a channel as someone else in the last week.
|
||
|
<a href="https://discord.com/oauth2/authorize?client_id=1253304869947707468"><strong>invite!</strong></a></p>
|
||
|
<details><summary>Demo</summary>
|
||
|
<div style="position: relative; padding-top: 63.83467278989667%;">
|
||
|
<iframe
|
||
|
src="https://customer-zfvj02miabg1w5iq.cloudflarestream.com/245f2a15721d75411bd70173e0532dd5/iframe?poster=https%3A%2F%2Fcustomer-zfvj02miabg1w5iq.cloudflarestream.com%2F245f2a15721d75411bd70173e0532dd5%2Fthumbnails%2Fthumbnail.jpg%3Ftime%3D%26height%3D600"
|
||
|
loading="lazy"
|
||
|
style="border: none; position: absolute; top: 0; left: 0; height: 100%; width: 100%;"
|
||
|
allow="accelerometer; gyroscope; autoplay; encrypted-media; picture-in-picture;"
|
||
|
allowfullscreen="true"
|
||
|
></iframe>
|
||
|
</div>
|
||
|
</details>
|
||
|
<p>
|
||
|
Links are stored as a SipHash string (link-channel_id) associated with the message
|
||
|
ID and server ID. This is to enable checking duplicate links while not revealing
|
||
|
the link itself. No other information is stored.
|
||
|
</p>
|
||
|
</section>
|
||
|
<section>
|
||
|
<h2>Nitter Bot <small>translate twitter links to nitter</small></h2>
|
||
|
<p>
|
||
|
These days it's usual to use a Twitter embed fixer like fxtwitter or vxtwitter
|
||
|
when linking Twitter content for a better embed experience. This bot provides the
|
||
|
<code>/nitter</code> command to parse and post a link to a Nitter instance
|
||
|
(nitter.gmem.ca), along with prefetching the page to cache it ahead of time.
|
||
|
<a href="https://discord.com/oauth2/authorize?client_id=1225778028983095296"><strong>invite!</strong></a></p>
|
||
|
<details><summary>Demo</summary>
|
||
|
<div style="position: relative; padding-top: 63.83467278989667%;">
|
||
|
<iframe
|
||
|
src="https://customer-zfvj02miabg1w5iq.cloudflarestream.com/f2fee5254419c86fae637569a939fcf3/iframe?poster=https%3A%2F%2Fcustomer-zfvj02miabg1w5iq.cloudflarestream.com%2Ff2fee5254419c86fae637569a939fcf3%2Fthumbnails%2Fthumbnail.jpg%3Ftime%3D%26height%3D600"
|
||
|
loading="lazy"
|
||
|
style="border: none; position: absolute; top: 0; left: 0; height: 100%; width: 100%;"
|
||
|
allow="accelerometer; gyroscope; autoplay; encrypted-media; picture-in-picture;"
|
||
|
allowfullscreen="true"
|
||
|
></iframe>
|
||
|
</div>
|
||
|
</details>
|
||
|
<p>This bot does not store any information directly. The Nitter instance in use contains
|
||
|
a custom patch to more aggresively cache posts to avoid rate limiting.</p>
|
||
|
</section>
|
||
|
</main>
|
||
|
</body>
|
||
|
</html>
|