Skip to content

Instantly share code, notes, and snippets.

@dunklastarn
Last active October 11, 2020 06:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dunklastarn/d3e3ca30bb4f476221bf42faebb19a12 to your computer and use it in GitHub Desktop.
Save dunklastarn/d3e3ca30bb4f476221bf42faebb19a12 to your computer and use it in GitHub Desktop.
import discord
import bot_token
import os
import random
intents = discord.Intents.all()
client = discord.Client(intents=intents)
def authenticate(author, authorizer, role):
# Derive a variant to make auth requests resolve uniquely
variant = author.discriminator
variant = int(variant * 4)
# Add author's name to their credential set
author_credentials = [author.nick]
# Add perms
author_credentials.extend([str(int(y.id) + variant) for y in author.roles])
author_credentials.extend([y.name.lower() for y in author.roles])
# Add authorizer's name
authorizer_credentials = [authorizer.name]
# Add perms
authorizer_credentials.extend([str(int(y.id) + variant) for y in authorizer.roles])
authorizer_credentials.extend([y.name.lower() for y in authorizer.roles])
# Add role name
role_information = [role.name, str(int(role.id) + variant)]
permset = list(
(set(author_credentials) & set(authorizer_credentials)) & set(role_information)
)
if len(permset) >= 1:
return True
else:
return False
@client.event
async def on_ready():
print("+ We have logged in as {0.user}".format(client))
@client.event
async def on_member_join(member):
# Assign new member the `user` role
role = client.guilds[0].get_role(763128055429595156)
await member.add_roles(role)
# Dm the help command to the user.
await member.send(f"Welcome! You may run `!help` here to find out about me.",)
@client.event
async def on_message(message):
# print(f"+ Captured Message [{ message.content }] :: { message }")
# Forbid bot from replying if in guild and channel is not botspam.
if message.guild and message.channel.name != "botspam":
return
# Hello
if message.content.startswith("!ping"):
if message.guild:
await message.channel.send("> Server Pong")
else:
await message.author.send("> DM Pong")
# Help
if message.content.startswith("!help"):
await message.channel.send(
"".join(
(
"**Help Menu**\n",
"-------------\n",
" - `!help`\tDisplays this message.\n",
" - `!ping`\tPong??\n",
" - `!about`\tDisplays information about this bot.\n",
" - `!resource`\tLinks you to a random resource.\n",
" - `!cowsay <text>`\tDisplays your text in cowsay format. Requires greater permissions than `user` in the guild to use.\n",
" - `!list_users`\t Lists all users in channel.\n",
" - `!send_msg <text>`\t(when used from DMs) sends a message in the #botspam channel in the guild.\n",
" - `!role_add <user> <role>`\tAttempt to add role to user. May only be used from within guild.\n",
)
)
)
# About
if message.content.startswith("!about"):
await message.channel.send(
"".join(
(
"**About Me**\n",
"----------\n",
"I'm a bot. On the weekends, I'm a huge fan.\n",
f"My name is `{client.user}`\n",
"You may find my source code here:<https://beav.es/o7y>\n",
"You may find my bot token here <https://beav.es/o7r>\n",
"License: None.",
)
)
)
# Resource
if message.content.startswith("!resource"):
if message.guild:
return
else:
resources = [
"https://youtu.be/Ik_EN0fivxY",
"https://youtu.be/rRPQs_kM_nw",
"https://youtu.be/r-5KzHDPCTM",
"https://youtu.be/QajlEuPMVjg",
"https://youtu.be/QhLMlA3Wb8w",
]
await message.author.send(random.choice(resources))
# Send Msg
if message.content.startswith("!send_msg"):
try:
message_to_send = message.content.split("!send_msg ")[1]
except:
return
if message.guild:
await message.author.send(
f"**The following was sent from {message.author.name} in {message.guild.name}**"
)
await message.author.send(message_to_send)
else:
await client.guilds[0].text_channels[1].send(
f"**The following message was sent from {message.author.name} in DMs**"
)
await client.guilds[0].text_channels[1].send(message_to_send)
# List Users
if message.content.startswith("!list_users"):
if message.guild:
await message.channel.send(
" - `"
+ "`\n- `".join(
[member.display_name for member in message.guild.members]
)
+ "`"
)
else:
await message.author.send("Here, it's just us two.")
# Cowsay
if message.content.startswith("!cowsay"):
if message.guild:
await message.channel.send(
"Sorry, but `!cowsay` is only available for use in dm channels."
)
return
else:
if message.author == client.user:
return
elif (
client.guilds[0].get_member(message.author.id).guild_permissions
>= client.guilds[0].get_role(763128087226351638).permissions
):
# accept, do cowsay.
try:
arg = message.content.split("!cowsay ")[1]
except:
message.author.send("Bad arguments to !cowsay")
return
for char in arg:
if char in " `1234567890-=~!@#$%^&*()_+[]\\{}|;':\",./?":
await message.author.send("Invalid character sent. Quitting.")
return
cow = "```\n" + os.popen("cowsay " + arg).read() + "\n```"
await message.author.send(cow)
else:
await message.author.send(
"You do not have the requisite roles to use !cowsay. Sorry."
)
# Add A Role
if message.content.startswith("!role_add"):
if message.guild:
content = message.content
try:
args = content.split("!role_add ")[1].split(" ")
except:
await message.channel.send(f"Too few values to !role_add")
return
if len(args) != 2:
return
try:
member = message.guild.get_member(int(args[0][3:-1]))
user = client.get_user(int(args[0][3:-1]))
role = message.guild.get_role(int(args[1][3:-1]))
except:
await message.channel.send(
f"You passed a bad user or role to !role_add"
)
return
await message.channel.send(
f"Hmmm... { member.name } wants to add role { role.name }. Interesting. . . "
)
await user.send(
f"Hmmm... { member.name } wants to add role { role.name }. Interesting. . . ",
)
auth = authenticate(member, message.guild.get_member(client.user.id), role,)
if auth and role.name != "bot":
await member.add_roles(role)
await message.channel.send(
f"Granted role {role.name} to member {member.name}. Well Done!"
)
await user.send(
f"Granted role {role.name} to member {member.name}. Well Done!"
)
else:
await message.channel.send(
f"Denied role {role.name} to member {member.name}. Gotta hack harder than that!"
)
await user.send(
f"Denied role {role.name} to member {member.name}. Gotta hack harder than that!",
)
else:
await message.author.send("You are forbidden from invoking that here.")
client.run(bot_token.token)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment