Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import discord
- import os
- from os import system
- import logging
- import json
- import re
- from random import randint
- from keepalive import keep_alive
- from time import sleep
- import datetime
- import traceback
- client = discord.Client()
- with open('accountusers.json') as data_file:
- client_data = json.load(data_file)
- print(client_data)
- admins = ["RealHuashan", "DarkFire014", "The Geckoverlord"]
- helpstring = "***What can I do?***\n\n__Basic commands:__\n`~hello`\n`~ping`\n`~help`\n`~suggest` *`suggestion`* Sends a suggestion to #suggestions so it can be voted on. Do I have to explain?\n\n`~register` Registers an account so you can play\n`~balance` Check our account balance.\n`~daily` Collect your daily allowance. It increases when on a streak.\n__Games__\n`~coinflip`/`~cf` *`bet`* Place a bet. A coin is flipped and if it lands on __heads__, you win the amount of money that you bet! Watch out, if you lose you lose money!\nYou have to **make an account first** with `~register`. Maximum bet amount is 90% of your account balance. **Pro Tip:** Instead of calculating, you can use `~coinflip` `max`/`min`)\n`~rps` `r`/`p`/`s` Play __R__ock __P__aper __S__cissors against the computer.\n**Admin commands: (double prefix)**\n`~~status` `status`\n`~~kill` Kill the bot's script\n`~~spam``%``message``&`*`repeat`**`[delay]`*\n\nNew features are constantly being added; so stay alert! My developer is *RealHuashan#4675*. Message him if you have any questions/comments.\n**Admins:**\n" # Admins list be added here
- def is_float(input):
- try:
- num = float(input)
- except ValueError:
- return False
- return True
- def is_int(input):
- try:
- num = int(input)
- except ValueError:
- return False
- return True
- def my_time(short=False):
- currentDT = datetime.datetime.now()
- return currentDT.strftime("%m/%d/%y at %I:%M %p")
- def emoji(text):
- return {
- "r": "<:rock:540379493492326420>",
- "p": ":newspaper:",
- "s": ":scissors:"
- }.get(text.lower(), "(fail)")
- def channel(name):
- '''Takes a channel name,
- and returns a channel of it.'''
- channel_ID = {
- "bot-logs": "541133746925993994",
- "suggestions": "538868712308998154",
- "spam": "540371788404752388",
- "maps": "543594540968181801"
- }.get(name.lower(), "(fail)")
- return client.get_channel(str(channel_ID))
- def read_data(key=None):
- if key == None:
- return
- def write_data(key=None, value=None):
- if key != None and value != None:
- client_data[key] = value
- userdict = json.dumps(client_data) # Make the data
- f = open("accountusers.json", "w")
- f.write(userdict)
- f.close()
- i = 0
- for user in admins:
- i = i + 1
- if i < len(admins):
- helpstring = helpstring + "*" + user + "*, "
- else:
- helpstring = helpstring + "and *" + user + "*."
- def switch(x, message): #basic commands
- return {
- '~hello':
- "Hello! How are you doing, " + message.author.name + "?",
- '~hi':
- "Hi! How are you doing, " + message.author.name + "?",
- '~solve':
- "This feature is coming soon. REALHUASHAN IS SLOW! <:insane:538210329440682004>",
- '~ping':
- ":ping_pong: " + str(randint(70, 210)) + "ms",
- '~help':
- helpstring
- }.get(x, "Unknown command! `~help` for all commands")
- @client.event
- async def on_ready(): #when the bot starts
- await client.send_message(channel("bot-logs"), "Connected " + my_time())
- print("The bot is ready!")
- @client.event
- async def on_member_join(member):
- await client.send_message(channel("general"), )
- @client.event
- async def on_member_remove(member):
- print("leave")
- @client.event
- async def on_error(event, *args, **kwargs):
- message = args[0] #Gets the message object
- embed = discord.Embed(
- title="```" + "sample error (bugs?)=" + "```",
- description="Data:",
- color=0xff2700)
- embed.set_author(name="Error")
- embed.add_field(name="Occurred at:", value=my_time(), inline=True)
- embed.add_field(name="Channel:", value=message.channel, inline=True)
- embed.add_field(
- name="Content: ", value="```" + message.content + "```", inline=False)
- embed.add_field(name="Author:", value=message.author.mention, inline=True)
- embed.add_field(name="Message ID:", value=message.id, inline=True)
- embed.add_field(name="Time sent:", value=message.timestamp.strftime("%m/%d/%y at %I:%M %p"), inline=True)
- await client.send_message(channel("bot-logs"), embed=embed)
- @client.event
- async def on_message(message):
- if message.author != client.user:
- if message.content[0:9].lower() == "~~status ":
- for user in admins:
- if message.author.name == user:
- await client.change_presence(
- game=discord.Game(name=message.content[9:] + ": ~help")
- )
- await client.send_message(message.channel, "Success.")
- elif message.content[0:5].lower() == "~~ban":
- for user in admins:
- if message.author.name == user:
- args = "".join(message.content.split(" ")[1:])
- if len(args) < 1:
- await client.send_message(
- message.channel,
- "Usage: `~~ban @Member1 [@Member2] ...`")
- else:
- user_ids = re.findall(r'<@\d{17,18}>', args)
- i = 0
- server = message.server
- for user_id in user_ids:
- user_ids[i] = re.sub(r'<|@|>', '', user_id)
- await client.ban(server.get_member(user_id))
- i = i + 1
- elif message.content[0:9].lower() == "~~kill":
- for user in admins:
- if message.author.name == user:
- await client.send_message(
- message.channel,
- "Attempting kill...\nNo message after this means success."
- )
- system("pykill -9 python")
- await client.send_message(
- message.channel,
- "It seems like the kill has timed out.")
- elif message.content[0:6].lower() == "~~spam":
- if message.content[7:] == "":
- await client.send_message(
- message.channel,
- "Include all required arguments: `~~spam`%`message``&`*`times to repeat`*`&`*`[delay]`*\nSeparate them with `&`."
- )
- else:
- parts = message.content.split("%")
- args = str(parts[1:]).split("&")
- i = 0
- for arg in args:
- args[i] = re.sub("(\['|'\])", "", args[i])
- i = i + 1
- if len(args) == 1:
- await client.send_message(
- message.channel, "Too few arguments received! Found " +
- str(len(args)) + ", expected minimum 2.")
- elif len(args) == 2:
- try:
- if int(args[1]) > 250:
- await client.send_message(
- message.channel,
- "Maximum repeat is 250 times.")
- elif len(str(args[0])) > 2000:
- await client.send_message(
- message.channel,
- "Your message exceeded the maximum length of 2000 characters."
- )
- else:
- await client.send_message(message.channel,
- "Starting...")
- for i in range(int(args[1])):
- await client.send_message(
- channel("spam"), args[0])
- await client.send_message(message.channel,
- "Finished.")
- except ValueError:
- await client.send_message(
- message.channel,
- "The repeat value was not a number. Please enter a value in milliseconds."
- )
- elif len(args) == 3:
- try:
- repeat = int(args[1])
- if int(repeat) > 250:
- await client.send_message(
- message.channel,
- "Maximum repeat is 250 times.")
- elif len(str(args[0])) > 2000:
- await client.send_message(
- message.channel,
- "Maximum length is 2000 characters.")
- elif int(args[2]) / 1000 > 10:
- await client.send_message(
- message.channel,
- "Maximum delay is 10000 milliseconds.")
- else:
- await client.send_message(message.channel,
- "Starting...")
- for i in range(repeat):
- await client.send_message(
- channel("spam"), args[0])
- sleep(int(args[2]) / 1000)
- await client.send_message(message.channel,
- "Finished.")
- except ValueError:
- await client.send_message(
- message.channel,
- "The value(s) entered raised an unknown ValueError. Please try again."
- )
- else:
- await client.send_message(
- message.channel, "Too many arguments received! Found "
- + str(len(args)) + ", expected maximum 3.")
- elif message.content[0:8].lower() == "~suggest":
- if message.content[0:9] == "~suggest ":
- embed = discord.Embed(
- title=message.content[9:],
- description="Vote on it by reacting below.",
- color=0xf8c600)
- embed.set_author(
- name=message.author.name,
- icon_url=message.author.avatar_url)
- embed.set_footer(text="Sent " + my_time())
- await client.send_message(channel("suggestions"), embed=embed)
- await client.send_message(
- message.author,
- "Your suggestion has been sent. Go see it in {}!".format(
- channel("suggestions")))
- else:
- await client.send_message(
- message.channel,
- "What is your suggestion? Retry the command.")
- elif message.content[0:9].lower() == "~register":
- if message.author.id in client_data:
- await client.send_message(message.channel,
- "You already have an account.")
- else:
- write_data(message.author.id, [50, ""])
- await client.send_message(
- message.channel, "Success. Your starting balance is ₮50")
- elif message.content == "~daily":
- if message.author.id in client_data:
- write_data(message.author.id,
- client_data[message.author.id] + 50)
- else:
- await client.send_message(
- message.channel,
- "You don't have an account. Make one with `~register`.")
- elif message.content.lower(
- ) == "letterone makes bad maps" or message.content.lower(
- ) == "letterone makes trash maps" or message.content.lower(
- ) == "letterone sucks" or message.content.lower(
- )[0:16] == "letterone is bad":
- await client.send_message(message.channel, "False statement.")
- elif message.content.lower(
- ) == "letterone makes good maps" or message.content.lower(
- ) == "letterone makes great maps" or message.content.lower(
- )[0:17] == "letterone is good" or message.content.lower(
- )[0:16] == "letterone is god":
- await client.send_message(message.channel, "I agree.")
- elif message.content[0:9].lower(
- ) == "~coinflip" or message.content[0:4] == "~cf ":
- if message.author.id in client_data:
- res_int = randint(0, 1)
- if int(client_data[message.author.id]) > 10:
- bet_amount = message.content[10:]
- if message.content[0:3] == "~cf":
- bet_amount = message.content[4:]
- max_bet = client_data[message.author.id] * 0.9
- min_bet = client_data[message.author.id] * 0.10
- if bet_amount.lower() == "max":
- bet_amount = max_bet
- elif bet_amount.lower() == "min":
- bet_amount = min_bet
- if bet_amount == "" or message.content == "~coinflip" or message.content == "~cf":
- await client.send_message(
- message.channel,
- "Dude, how much are you going to bet?\nUse `~coinflip` *`bet`* where *bet* is the amount you want to bet. For example, type `~coinflip 32` to bet ₮32.\nSee `~help` for more."
- )
- elif is_int(bet_amount
- ) == False and bet_amount.lower() != "max":
- after_message = " "
- if is_float(bet_amount):
- after_message = " You can only bet whole amounts."
- await client.send_message(
- message.channel, "You can't bet \"" +
- str(bet_amount) + "\"." + after_message)
- elif float(round(float(bet_amount))) > round(
- float(max_bet)):
- if int(bet_amount) > client_data[message.author.id]:
- await client.send_message(
- message.channel,
- "You don't have ₮" + str(bet_amount) +
- ". The maximum you can bet is ₮" + str(
- round(max_bet)) + ".")
- else:
- await client.send_message(
- message.channel,
- "The maximum you can bet is ₮" + str(
- round(max_bet)) + ".")
- elif float(round(float(bet_amount))) < round(
- float(min_bet)):
- await client.send_message(
- message.channel,
- "The minimum you can bet is ₮" + str(
- round(min_bet)) + ".")
- else: # If the user actually bets something valid
- if res_int == 0:
- result = "__Heads__! You win. Now you have ₮"
- new_amount = client_data[message.author.id] + int(
- bet_amount)
- else:
- result = "__Tails__! You lose. Now you have ₮"
- new_amount = client_data[message.author.id] - int(
- bet_amount)
- await client.send_message(message.channel,
- result + str(new_amount))
- write_data(message.author.id, new_amount)
- else:
- await client.send_message(
- message.channel,
- "You don't have enough money to be able to bet! The minimum balance is ₮10.\nCollect your daily allowance using `~daily`."
- )
- else:
- await client.send_message(
- message.channel,
- "You can't play without an account! Make one with `~register`"
- )
- elif message.content[0:4] == "~rps":
- choice = message.content[5:]
- #create a list of play options
- t = ["r", "p", "s"]
- #assign a random play to the computer
- computer = t[randint(0, 2)]
- if message.content == "~rps" or choice == "":
- await client.send_message(
- message.channel,
- "What do you choose? For example, `~rps r`")
- else:
- if choice == computer:
- await client.send_message(message.channel, "Tie!")
- elif choice == "r":
- if computer == "p":
- await client.send_message(
- message.channel, "You lose! " + emoji(computer) +
- " covers " + emoji(choice))
- else:
- await client.send_message(
- message.channel, "You win! " + emoji(choice) +
- " smashes " + emoji(computer))
- elif choice == "p":
- if computer == "s":
- await client.send_message(
- message.channel, "You lose! " + emoji(computer) +
- " cut " + emoji(choice))
- else:
- await client.send_message(
- message.channel, "You win! " + emoji(choice) +
- " covers " + emoji(computer))
- elif choice == "s":
- if computer == "r":
- await client.send_message(
- message.channel, "You lose... " + emoji(computer) +
- " smashes " + emoji(choice))
- else:
- await client.send_message(
- message.channel, "You win! " + emoji(choice) +
- " cut " + emoji(computer))
- else:
- await client.send_message(
- message.channel,
- "That's not a valid play. Check your spelling!")
- elif message.content[0:5].lower() == "-help": # In case user is bad
- await client.send_message(
- message.channel,
- "My prefix is a tilde (`~`), not a dash (`-`)! :smiley:".
- format(message.author.name)) # Roast user
- elif message.content.lower() == "~balance":
- if message.author.id in client_data:
- await client.send_message(
- message.channel,
- "You have ₮" + str(client_data[message.author.id]))
- else:
- await client.send_message(
- message.channel,
- "You don't have an account. Create one with `~register`")
- elif message.content[0:1] == "~" and message.content[
- 0:2] != "~~": # Make sure user is not using MD
- await client.send_message(message.channel,
- switch(message.content.lower(), message))
- keep_alive()
- token = os.environ.get("DISCORD_BOT_SECRET")
- client.run(token)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement