Advertisement
Guest User

Untitled

a guest
Feb 16th, 2019
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 19.87 KB | None | 0 0
  1. import discord
  2. import os
  3. from os import system
  4. import logging
  5. import json
  6. import re
  7. from random import randint
  8. from keepalive import keep_alive
  9. from time import sleep
  10. import datetime
  11. import traceback
  12.  
  13. client = discord.Client()
  14.  
  15. with open('accountusers.json') as data_file:
  16. client_data = json.load(data_file)
  17. print(client_data)
  18. admins = ["RealHuashan", "DarkFire014", "The Geckoverlord"]
  19.  
  20. 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
  21.  
  22.  
  23. def is_float(input):
  24. try:
  25. num = float(input)
  26. except ValueError:
  27. return False
  28. return True
  29.  
  30.  
  31. def is_int(input):
  32. try:
  33. num = int(input)
  34. except ValueError:
  35. return False
  36. return True
  37.  
  38.  
  39. def my_time(short=False):
  40. currentDT = datetime.datetime.now()
  41. return currentDT.strftime("%m/%d/%y at %I:%M %p")
  42.  
  43.  
  44. def emoji(text):
  45. return {
  46. "r": "<:rock:540379493492326420>",
  47. "p": ":newspaper:",
  48. "s": ":scissors:"
  49. }.get(text.lower(), "(fail)")
  50.  
  51.  
  52. def channel(name):
  53. '''Takes a channel name,
  54. and returns a channel of it.'''
  55. channel_ID = {
  56. "bot-logs": "541133746925993994",
  57. "suggestions": "538868712308998154",
  58. "spam": "540371788404752388",
  59. "maps": "543594540968181801"
  60. }.get(name.lower(), "(fail)")
  61. return client.get_channel(str(channel_ID))
  62.  
  63.  
  64. def read_data(key=None):
  65. if key == None:
  66. return
  67.  
  68.  
  69. def write_data(key=None, value=None):
  70. if key != None and value != None:
  71. client_data[key] = value
  72. userdict = json.dumps(client_data) # Make the data
  73. f = open("accountusers.json", "w")
  74. f.write(userdict)
  75. f.close()
  76.  
  77.  
  78. i = 0
  79. for user in admins:
  80. i = i + 1
  81. if i < len(admins):
  82. helpstring = helpstring + "*" + user + "*, "
  83. else:
  84. helpstring = helpstring + "and *" + user + "*."
  85.  
  86.  
  87. def switch(x, message): #basic commands
  88. return {
  89. '~hello':
  90. "Hello! How are you doing, " + message.author.name + "?",
  91. '~hi':
  92. "Hi! How are you doing, " + message.author.name + "?",
  93. '~solve':
  94. "This feature is coming soon. REALHUASHAN IS SLOW! <:insane:538210329440682004>",
  95. '~ping':
  96. ":ping_pong: " + str(randint(70, 210)) + "ms",
  97. '~help':
  98. helpstring
  99. }.get(x, "Unknown command! `~help` for all commands")
  100.  
  101.  
  102. @client.event
  103. async def on_ready(): #when the bot starts
  104. await client.send_message(channel("bot-logs"), "Connected " + my_time())
  105. print("The bot is ready!")
  106.  
  107.  
  108. @client.event
  109. async def on_member_join(member):
  110. await client.send_message(channel("general"), )
  111.  
  112.  
  113. @client.event
  114. async def on_member_remove(member):
  115. print("leave")
  116.  
  117.  
  118. @client.event
  119. async def on_error(event, *args, **kwargs):
  120. message = args[0] #Gets the message object
  121. embed = discord.Embed(
  122. title="```" + "sample error (bugs?)=" + "```",
  123. description="Data:",
  124. color=0xff2700)
  125. embed.set_author(name="Error")
  126. embed.add_field(name="Occurred at:", value=my_time(), inline=True)
  127. embed.add_field(name="Channel:", value=message.channel, inline=True)
  128. embed.add_field(
  129. name="Content: ", value="```" + message.content + "```", inline=False)
  130. embed.add_field(name="Author:", value=message.author.mention, inline=True)
  131. embed.add_field(name="Message ID:", value=message.id, inline=True)
  132. embed.add_field(name="Time sent:", value=message.timestamp.strftime("%m/%d/%y at %I:%M %p"), inline=True)
  133. await client.send_message(channel("bot-logs"), embed=embed)
  134.  
  135.  
  136. @client.event
  137. async def on_message(message):
  138. if message.author != client.user:
  139. if message.content[0:9].lower() == "~~status ":
  140. for user in admins:
  141. if message.author.name == user:
  142. await client.change_presence(
  143. game=discord.Game(name=message.content[9:] + ": ~help")
  144. )
  145. await client.send_message(message.channel, "Success.")
  146. elif message.content[0:5].lower() == "~~ban":
  147. for user in admins:
  148. if message.author.name == user:
  149. args = "".join(message.content.split(" ")[1:])
  150. if len(args) < 1:
  151. await client.send_message(
  152. message.channel,
  153. "Usage: `~~ban @Member1 [@Member2] ...`")
  154. else:
  155. user_ids = re.findall(r'<@\d{17,18}>', args)
  156. i = 0
  157. server = message.server
  158. for user_id in user_ids:
  159. user_ids[i] = re.sub(r'<|@|>', '', user_id)
  160. await client.ban(server.get_member(user_id))
  161. i = i + 1
  162. elif message.content[0:9].lower() == "~~kill":
  163. for user in admins:
  164. if message.author.name == user:
  165. await client.send_message(
  166. message.channel,
  167. "Attempting kill...\nNo message after this means success."
  168. )
  169. system("pykill -9 python")
  170. await client.send_message(
  171. message.channel,
  172. "It seems like the kill has timed out.")
  173. elif message.content[0:6].lower() == "~~spam":
  174. if message.content[7:] == "":
  175. await client.send_message(
  176. message.channel,
  177. "Include all required arguments: `~~spam`%`message``&`*`times to repeat`*`&`*`[delay]`*\nSeparate them with `&`."
  178. )
  179. else:
  180. parts = message.content.split("%")
  181. args = str(parts[1:]).split("&")
  182. i = 0
  183. for arg in args:
  184. args[i] = re.sub("(\['|'\])", "", args[i])
  185. i = i + 1
  186.  
  187. if len(args) == 1:
  188. await client.send_message(
  189. message.channel, "Too few arguments received! Found " +
  190. str(len(args)) + ", expected minimum 2.")
  191. elif len(args) == 2:
  192. try:
  193. if int(args[1]) > 250:
  194. await client.send_message(
  195. message.channel,
  196. "Maximum repeat is 250 times.")
  197. elif len(str(args[0])) > 2000:
  198. await client.send_message(
  199. message.channel,
  200. "Your message exceeded the maximum length of 2000 characters."
  201. )
  202. else:
  203. await client.send_message(message.channel,
  204. "Starting...")
  205. for i in range(int(args[1])):
  206. await client.send_message(
  207. channel("spam"), args[0])
  208. await client.send_message(message.channel,
  209. "Finished.")
  210. except ValueError:
  211. await client.send_message(
  212. message.channel,
  213. "The repeat value was not a number. Please enter a value in milliseconds."
  214. )
  215. elif len(args) == 3:
  216. try:
  217. repeat = int(args[1])
  218. if int(repeat) > 250:
  219. await client.send_message(
  220. message.channel,
  221. "Maximum repeat is 250 times.")
  222. elif len(str(args[0])) > 2000:
  223. await client.send_message(
  224. message.channel,
  225. "Maximum length is 2000 characters.")
  226. elif int(args[2]) / 1000 > 10:
  227. await client.send_message(
  228. message.channel,
  229. "Maximum delay is 10000 milliseconds.")
  230. else:
  231. await client.send_message(message.channel,
  232. "Starting...")
  233. for i in range(repeat):
  234. await client.send_message(
  235. channel("spam"), args[0])
  236. sleep(int(args[2]) / 1000)
  237. await client.send_message(message.channel,
  238. "Finished.")
  239. except ValueError:
  240. await client.send_message(
  241. message.channel,
  242. "The value(s) entered raised an unknown ValueError. Please try again."
  243. )
  244. else:
  245. await client.send_message(
  246. message.channel, "Too many arguments received! Found "
  247. + str(len(args)) + ", expected maximum 3.")
  248. elif message.content[0:8].lower() == "~suggest":
  249. if message.content[0:9] == "~suggest ":
  250. embed = discord.Embed(
  251. title=message.content[9:],
  252. description="Vote on it by reacting below.",
  253. color=0xf8c600)
  254. embed.set_author(
  255. name=message.author.name,
  256. icon_url=message.author.avatar_url)
  257. embed.set_footer(text="Sent " + my_time())
  258.  
  259. await client.send_message(channel("suggestions"), embed=embed)
  260. await client.send_message(
  261. message.author,
  262. "Your suggestion has been sent. Go see it in {}!".format(
  263. channel("suggestions")))
  264.  
  265. else:
  266. await client.send_message(
  267. message.channel,
  268. "What is your suggestion? Retry the command.")
  269. elif message.content[0:9].lower() == "~register":
  270. if message.author.id in client_data:
  271. await client.send_message(message.channel,
  272. "You already have an account.")
  273. else:
  274. write_data(message.author.id, [50, ""])
  275. await client.send_message(
  276. message.channel, "Success. Your starting balance is ₮50")
  277. elif message.content == "~daily":
  278. if message.author.id in client_data:
  279. write_data(message.author.id,
  280. client_data[message.author.id] + 50)
  281. else:
  282. await client.send_message(
  283. message.channel,
  284. "You don't have an account. Make one with `~register`.")
  285. elif message.content.lower(
  286. ) == "letterone makes bad maps" or message.content.lower(
  287. ) == "letterone makes trash maps" or message.content.lower(
  288. ) == "letterone sucks" or message.content.lower(
  289. )[0:16] == "letterone is bad":
  290. await client.send_message(message.channel, "False statement.")
  291. elif message.content.lower(
  292. ) == "letterone makes good maps" or message.content.lower(
  293. ) == "letterone makes great maps" or message.content.lower(
  294. )[0:17] == "letterone is good" or message.content.lower(
  295. )[0:16] == "letterone is god":
  296. await client.send_message(message.channel, "I agree.")
  297. elif message.content[0:9].lower(
  298. ) == "~coinflip" or message.content[0:4] == "~cf ":
  299. if message.author.id in client_data:
  300. res_int = randint(0, 1)
  301. if int(client_data[message.author.id]) > 10:
  302. bet_amount = message.content[10:]
  303. if message.content[0:3] == "~cf":
  304. bet_amount = message.content[4:]
  305. max_bet = client_data[message.author.id] * 0.9
  306. min_bet = client_data[message.author.id] * 0.10
  307.  
  308. if bet_amount.lower() == "max":
  309. bet_amount = max_bet
  310. elif bet_amount.lower() == "min":
  311. bet_amount = min_bet
  312.  
  313. if bet_amount == "" or message.content == "~coinflip" or message.content == "~cf":
  314. await client.send_message(
  315. message.channel,
  316. "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."
  317. )
  318. elif is_int(bet_amount
  319. ) == False and bet_amount.lower() != "max":
  320. after_message = " "
  321. if is_float(bet_amount):
  322. after_message = " You can only bet whole amounts."
  323.  
  324. await client.send_message(
  325. message.channel, "You can't bet \"" +
  326. str(bet_amount) + "\"." + after_message)
  327. elif float(round(float(bet_amount))) > round(
  328. float(max_bet)):
  329. if int(bet_amount) > client_data[message.author.id]:
  330. await client.send_message(
  331. message.channel,
  332. "You don't have ₮" + str(bet_amount) +
  333. ". The maximum you can bet is ₮" + str(
  334. round(max_bet)) + ".")
  335. else:
  336. await client.send_message(
  337. message.channel,
  338. "The maximum you can bet is ₮" + str(
  339. round(max_bet)) + ".")
  340. elif float(round(float(bet_amount))) < round(
  341. float(min_bet)):
  342. await client.send_message(
  343. message.channel,
  344. "The minimum you can bet is ₮" + str(
  345. round(min_bet)) + ".")
  346. else: # If the user actually bets something valid
  347. if res_int == 0:
  348. result = "__Heads__! You win. Now you have ₮"
  349. new_amount = client_data[message.author.id] + int(
  350. bet_amount)
  351. else:
  352. result = "__Tails__! You lose. Now you have ₮"
  353. new_amount = client_data[message.author.id] - int(
  354. bet_amount)
  355. await client.send_message(message.channel,
  356. result + str(new_amount))
  357. write_data(message.author.id, new_amount)
  358. else:
  359. await client.send_message(
  360. message.channel,
  361. "You don't have enough money to be able to bet! The minimum balance is ₮10.\nCollect your daily allowance using `~daily`."
  362. )
  363. else:
  364. await client.send_message(
  365. message.channel,
  366. "You can't play without an account! Make one with `~register`"
  367. )
  368. elif message.content[0:4] == "~rps":
  369. choice = message.content[5:]
  370. #create a list of play options
  371. t = ["r", "p", "s"]
  372.  
  373. #assign a random play to the computer
  374. computer = t[randint(0, 2)]
  375. if message.content == "~rps" or choice == "":
  376. await client.send_message(
  377. message.channel,
  378. "What do you choose? For example, `~rps r`")
  379. else:
  380. if choice == computer:
  381. await client.send_message(message.channel, "Tie!")
  382. elif choice == "r":
  383. if computer == "p":
  384. await client.send_message(
  385. message.channel, "You lose! " + emoji(computer) +
  386. " covers " + emoji(choice))
  387. else:
  388. await client.send_message(
  389. message.channel, "You win! " + emoji(choice) +
  390. " smashes " + emoji(computer))
  391. elif choice == "p":
  392. if computer == "s":
  393. await client.send_message(
  394. message.channel, "You lose! " + emoji(computer) +
  395. " cut " + emoji(choice))
  396. else:
  397. await client.send_message(
  398. message.channel, "You win! " + emoji(choice) +
  399. " covers " + emoji(computer))
  400. elif choice == "s":
  401. if computer == "r":
  402. await client.send_message(
  403. message.channel, "You lose... " + emoji(computer) +
  404. " smashes " + emoji(choice))
  405. else:
  406. await client.send_message(
  407. message.channel, "You win! " + emoji(choice) +
  408. " cut " + emoji(computer))
  409. else:
  410. await client.send_message(
  411. message.channel,
  412. "That's not a valid play. Check your spelling!")
  413. elif message.content[0:5].lower() == "-help": # In case user is bad
  414. await client.send_message(
  415. message.channel,
  416. "My prefix is a tilde (`~`), not a dash (`-`)! :smiley:".
  417. format(message.author.name)) # Roast user
  418. elif message.content.lower() == "~balance":
  419. if message.author.id in client_data:
  420. await client.send_message(
  421. message.channel,
  422. "You have ₮" + str(client_data[message.author.id]))
  423. else:
  424. await client.send_message(
  425. message.channel,
  426. "You don't have an account. Create one with `~register`")
  427. elif message.content[0:1] == "~" and message.content[
  428. 0:2] != "~~": # Make sure user is not using MD
  429. await client.send_message(message.channel,
  430. switch(message.content.lower(), message))
  431.  
  432.  
  433. keep_alive()
  434. token = os.environ.get("DISCORD_BOT_SECRET")
  435. client.run(token)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement