This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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