A 1.1.1.1 DNS resolver built for Discord
This documentation is also available on Cloudflare's developer documentation site
1.1.1.1 works from a Discord server, thanks to the 1.1.1.1 bot. Invite the bot to your Discord server to start using DNS over Discord. Or, add the bot to your Discord account to use it anywhere in Discord.
Once the bot is in your server, type /dig
to start performing DNS lookups. This will provide a native interface within Discord that allows you to specify the domain to lookup, an optional DNS record type and an optional flag for a short result.
If only a domain is given for the command, the bot will default to looking for A
DNS records, and will return the full format result, not the short form.
Example:
/dig domain: cloudflare.com
Discord has a limit of 25 options in slash commands, so DNS over Discord offers the 25 most common DNS record types to choose from.
Supported DNS record types
A
AAAA
CAA
CDNSKEY
CDS
CERT
CNAME
DNSKEY
DS
HINFO
HTTPS
LOC
MX
NAPTR
NS
PTR
SMIMEA
SOA
SPF
SRV
SSHFP
SVCB
TLSA
TXT
URI
To query other DNS record types, or multiple record types at once, use the /multi-dig
command.
DNS over Discord has an optional flag in the /dig
command that allows the user to request a response in the short form.
When you request a response in the short form, the name and TTL columns will be excluded. The command only returns the data column without formatting, similar to the equivalent dig
command-line interface response.
Example:
/dig domain: cloudflare.com type: AAAA records short: True
You can disable DNSSEC checking in the dig
command by passing cdflag
as true. This will get the records even if validation fails.
Example:
/dig domain: cloudflare.com type: AAAA records cdflag: True
You can refresh the DNS lookup results by clicking the Refresh button. Clicking it will trigger the bot to re-request the DNS query in the message, and update the results in the message. Any user can click this button.
The refresh button is available on all responses to the /dig
command, including those that resulted in an error, such as an unknown domain or no records found.
By default, the DNS over Discord bot uses Cloudflare's 1.1.1.1 DNS service. You can run the DNS lookup with alternate DNS providers by selecting the dropdown below the result. This shows you a list of available providers. Selecting a new provider updates the results in the message. Any user can change the DNS provider.
Supported DNS providers
If you want to look up multiple DNS record types at once, use the /multi-dig
command. This allows you to specify any supported DNS record type, and multiple types separated by a space.
Example:
/multi-dig domain: cloudflare.com types: A AAAA
When providing DNS record types for the /multi-dig
command, Discord will not prompt you with options. You have to provide a space-separated list of valid DNS record types to lookup, as any invalid options will be silently dropped. A
records will be used as the default if no valid types are given.
DNS record types supported and considered valid by the bot
Use a *
(asterisk) in place of a record type to get DNS results for all supported types.
A
AAAA
AFSDB
APL
CAA
CDNSKEY
CDS
CERT
CNAME
CSYNC
DHCID
DLV
DNAME
DNSKEY
DS
EUI48
EUI64
HINFO
HIP
HTTPS
IPSECKEY
KEY
KX
LOC
MX
NAPTR
NS
NSEC
NSEC3
NSEC3PARAM
OPENPGPKEY
PTR
RP
SMIMEA
SOA
SPF
SRV
SSHFP
SVCB
TA
TKEY
TLSA
TXT
URI
ZONEMD
Like the main /dig
command, the /multi-dig
command also supports the optional short flag after the types have been specified in the slash command.
Example:
/multi-dig domain: cloudflare.com types: CDS CDNSKEY short: True
Exactly like dig
command, you can disable dns checking by passing cdflag
as true. This will get the records even if validation fails.
Example:
/multi-dig domain: cloudflare.com type: AAAA records cdflag: True
The /multi-dig
command also provides a refresh button below each set of DNS results requested (or after each block of 10 DNS record types, if you requested more than 10).
As with the /dig
command, any user can press the refresh button to refresh the displayed DNS results, including for DNS queries that had previously failed.
Like the /dig
command, you can change the DNS provider when using the /multi-dig
command. The menu appears after each set of DNS results (or after each block of results if more than 10 record types are requested).
This menu can be used be any user to change the DNS provider used for the lookup.
Supported DNS providers
The /whois
command allows you to perform a RDAP/WHOIS lookup right in Discord for a given domain, IP or ASN.
Examples:
/whois query: cloudflare.com
/whois query: 104.16.132.229
/whois query: 2606:4700::6810:84e5
/whois query: 13335
The bot also has a set of helper commands available to get more information about the bot and quick links.
The /help
command provides in-Discord documentation about all the commands available in the 1.1.1.1 DNS over Discord bot.
Example:
/help
The /privacy
command displays the Privacy Policy notice for using the 1.1.1.1 DNS over Discord bot. You can also refer to the Privacy Policy page to access it.
Example:
/privacy
The /terms
command displays the Terms of Service notice for using the 1.1.1.1 DNS over Discord bot. You can also refer to the Terms of Service page to access it.
Example:
/terms
The DNS over Discord bot is open-source, and the /github
command provides a quick link to access the GitHub repository. The GitHub repository can be accessed at https://github.com/MattIPv4/DNS-over-Discord/.
Example:
/github
The /invite
command provides the user with a quick link to invite the 1.1.1.1 DNS over Discord bot to another Discord server, or to add it to a Discord account.
The bot can be invited at any time with https://dns-over-discord.v4.wtf/invite.
The bot can also be added to accounts with https://dns-over-discord.v4.wtf/invite/user.
/invite
- Create your test Discord application at https://discord.com/developers/applications (this does not need a bot account, just the application).
- Create your
development.env
file.- Copy
development.env.sample
and fill out the information from your Discord application, plus the ID of your test server/guild. - A Sentry DSN is required, but the token/org/project can be set to empty if source map uploads are not required.
- Copy
- Authenticate with Wrangler by running
npx wrangler login
. - Update
wrangler.toml
for your account.- Use
npx wrangler whoami
to get your account ID, update the value inwrangler.toml
to match. - Use
npx wrangler kv:namespace create "CACHE"
to create the KV namespace, update theid
andpreview_id
inwrangler.toml
to match.
- Use
- Develop with the worker by running
npm run dev
. - (Optional) Start an HTTP tunnel to your local development server by running
npm run tunnel
, using cloudflared.
To test the user-installed commands functionality, you'll need to make sure your Discord application has the User Install option enabled.
You'll then need to make sure that the TEST_GUILD_ID
in development.env
is commented out, as user-installed commands need to be registered globally.
After that, start the worker as usual with npm run dev
, install the application to your Discord user, and test the commands.
If you no longer wish to have the commands registered globally, leave TEST_GUILD_ID
commented and update webpack.config.js
to pass an empty array to the registerCommands
call, then start the worker again to remove the global commands.
wrangler.toml
and this repository is currently designed for a staging deployment and a production deployment.
Ensure that you've created and configured staging.env
and production.env
appropriately (staging.env
has a test server/guild by default, but this can be removed to stage global commands).
Ensure that the staging/production environments in wrangler.toml
have been updated with your zone IDs and routes for the workers.
Ensure that the KV namespaces are created for staging/production environments and are configured in wrangler.toml
.
Use npx wrangler kv:namespace create "CACHE" --env <staging/production>
.
To deploy from local, run npm run publish:staging
to deploy to staging, and npm run publish:production
to deploy to the production environment.
To deploy using GitHub, run make deploy-staging
to force push and deploy to staging, and make deploy-production
to force push and deploy to the production environment.
Live logs for both environments can be accessed with npm run logs:staging
and npm run logs:production
as needed.
Contributions are always welcome to this project!
Take a look at any existing issues on this repository for starting places to help contribute towards, or simply create your own new contribution to the project.
Please make sure to follow the existing standards within the project such as code styles, naming conventions and commenting/documentation.
When you are ready, simply create a pull request for your contribution and I will review it whenever I can!
You can also help me and the project out by sponsoring me through GitHub Sponsors (preferred), contributing through a donation on PayPal or by supporting me monthly on my Patreon page.
Need support with this project, have found an issue or want to chat with others about contributing to the project?
Please check the project's issues page first for support & bugs!
Not found what you need here?
- If you have an issue, please create a GitHub issue here to report the situation, include as much detail as you can!
- or, You can join our Slack workspace to discuss any issue, to get support for the project or to chat with contributors and myself: