· 6 years ago · Sep 18, 2019, 03:45 AM
1import discord
2#import youtube_dl
3#import nacl
4import math
5import datetime
6import sqlite3
7import random
8import time
9from sqlite3 import Error
10
11TOKEN = ''
12
13client = discord.Client()
14
15conn = sqlite3.connect("currency.db")
16cursor = conn.cursor()
17
18'''
19Class Troop lists all the troops currently available in the shop for purchase along with each troop's properties.
20
21Type = Offensive or Defensive Troop
22Name = Name of the Troop
23Dmg = The amount of damage the troop does per second
24Cost = How much the troop costs
25Desc = Description of the Troop
26curr = Currency needed to buy the troop (Bits or Iron)
27'''
28
29class Troop():
30 def __init__(self, type, name, dmg, cost, desc, curr):
31 self._type = type
32 self._name = name
33 self._dmg = dmg
34 self._cost = cost
35 self._desc = desc
36 self._curr = curr
37
38troops = [Troop("offensive", "Soldier", "1", "1000", "Infantry unit. Good for attacking in numbers.", "bits"), Troop("offensive", "Knight", "11", "10000", "Knights, as noble as they are, won't stop for anything to complete their objective.", "bits"), Troop("offensive", "Wizard", "125", "50", "Wizards shoot spells that can injure hundreds of enemies at a time.", "iron"), Troop ("offensive", "Commander", "1500", "500", "Commanders have an entire arsenal of Weapons of Mass Destruction and are not afraid to use them.","iron"), Troop("defensive", "Archer", "1", "1000", "Infantry unit. Good for defending in numbers.", "bits"), Troop("defensive", "Bishop", "11", "10000", "Bishops defend with their magical staffs.", "bits"), Troop("defensive", "Rook", "125", "50", "Rooks are beastly humans. It is said with their muscles they can stop hundreds of units.","iron"), Troop ("defensive", "Enforcer", "1500", "500","Enforcers can stop thousands of units with a clap of their hands, causing earth shattering earthquakes.", "iron")]
39
40'''
41Infiltration Method:
42
43Used when a player infiltrates another person's base. Determines if the player is able to infiltrate the base or not depending
44on the player's offensive damage, the opponent's defensive damage, and the health of the opponent's wall.
45
46wall = Opponent's Wall Health
47odmg = Player's Offensive Damage
48ddmg = Opponent's Defensive Damage
49
50The player is able to infiltrate an opponent's base if [health - (odmg - ddmg*0) - (odmg - ddmg*(1))... until odmg-ddmg*n<=0
51where n represents the player's nth attack] is lower or equal to 0. In other words, the opponent starts with a base health of
52[health]. The player then attacks with [odmg] doing that much damage to the wall. Each turn the player's [odmg] is weakened by
53the opponent's [ddmg], so the next attack the player does [odmg-ddmg] to the opponent's wall. This continues until the player's
54[odmg] reaches 0. If the opponent's wall is destroyed, the player successfully infiltrated their base, but if not, the player
55failed.
56'''
57
58def infiltration(wall, odmg, ddmg):
59 if (odmg>0):
60 wall -= odmg
61 odmg -= ddmg
62 if wall<=0:
63 return True
64 else:
65 return infiltration(wall, odmg, ddmg)
66 else:
67 return False
68
69'''
70These next few functions use CRUD applications to manipulate user data.
71
72userID = ID of the current user
73currency = Number of bits
74iron = Number of iron ingots
75mtime = Cooldown timer for message reward every 60 seconds
76health = Current health of the user's wall
77maxhealth = Max health of the user's wall
78gainBits = Number of bits the user gains for each message every 60 seconds
79gainIron = Number of iron ingots the user gains for each message every 60 seconds
80odmg = Offensive Damage
81ddmg = Defensive Damage
82cooldowntime = The amount of time left until the user can be infiltrated again
83cooldown = Boolean variable determining if the user is available to get infiltrated
84'''
85
86# Creates a table if a table already doesn't exist
87def create_table():
88 cursor.execute("CREATE TABLE IF NOT EXISTS currency(userID TEXT, currency INTEGER, iron INTEGER, time DATE, mtime DATE, health INTEGER, maxhealth INTEGER, gainBits INTEGER, gainIron INTEGER, odmg INTEGER, ddmg INTEGER, cooldowntime DATE, cooldown INTEGER)")
89
90# Creates a row for a unique user with default values
91def start_data(userID):
92 cursor.execute("INSERT INTO currency VALUES(" + userID + ", 10000, 0, '" + str(datetime.datetime.now()) +"', '" + str(datetime.datetime.now()) +"', 1000, 1000, 10, 0, 0, 0, '" + str(datetime.datetime.now()) + "', 1)")
93 conn.commit()
94
95# Retrieves a specific value belonging to a unique user
96def data_retrieve(userID, selection):
97 cursor.execute("SELECT " + selection + " FROM currency WHERE userID = " + userID)
98 data = cursor.fetchall()
99 return data
100
101# Edits the user's balance
102def data_edit(userID, num, balance, balance2):
103 cursor.execute("UPDATE currency SET currency = " + str(balance2 + int(balance*num)) + " WHERE userID = " + userID)
104 conn.commit()
105
106# Edits a specific value belonging to a unique user
107def data_edita(userID, selection, new):
108 cursor.execute("UPDATE currency SET " + selection + "= " + str(new) + " WHERE userID = " + userID)
109 conn.commit()
110
111# Daily reward. Gives the user 10 000 bits everyday.
112def data_editdaily(userID, balance):
113 cursor.execute("SELECT time FROM currency WHERE userID = " + userID)
114 data2 = str(cursor.fetchall()).strip("[]")
115 data2 = data2[2:len(data2)-3]
116 if ((datetime.datetime.now() - datetime.datetime.strptime(data2, "%Y-%m-%d %H:%M:%S.%f")).days>=1):
117 #print(str(datetime.datetime.now()))
118 cursor.execute("UPDATE currency SET currency = " + str(int(str(data_retrieve(userID)).strip("[]")[1:len(balance)-2])+10000) + " WHERE userID = " + userID)
119 cursor.execute("UPDATE currency SET time = '" + str(datetime.datetime.now()) + "' WHERE userID = " + userID)
120 conn.commit()
121 return "1"
122 else:
123 return (datetime.datetime.now() - datetime.datetime.strptime(data2, "%Y-%m-%d %H:%M:%S.%f")).seconds
124
125# Cooldown for getting infiltrated. A cooldown determining the user is able to be attacked or not.
126def data_cooldown(userID):
127 cursor.execute("SELECT cooldowntime FROM currency WHERE userID = " + userID)
128 data2 = str(cursor.fetchall()).strip("[]")
129 data2 = data2[2:len(data2)-3]
130 cursor.execute("SELECT cooldown FROM currency WHERE userID = " + userID)
131 data3 = str(cursor.fetchall()).strip("[]")
132 data3 = int(data3[1:len(data3)-2])
133 if (data3==0 or (datetime.datetime.now()-datetime.datetime.strptime(data2, "%Y-%m-%d %H:%M:%S.%f")).days>=1):
134 return "1"
135 else:
136 return (datetime.datetime.now() - datetime.datetime.strptime(data2, "%Y-%m-%d %H:%M:%S.%f")).seconds
137
138# Edits the cooldown of the user so they cannot be infiltrated in the next 24 hours
139def data_editcooldown(userID):
140 cursor.execute("UPDATE currency SET cooldown = 1 WHERE userID = " + userID)
141 cursor.execute("UPDATE currency SET cooldowntime = " + datetime.datetime.now() + " WHERE userID = " + userID)
142 cursor.commit()
143
144# Edits the cooldown of the message reward the timer as well as reward the user with their message reward
145def data_message(userID, balance, curiron, bits, iron):
146 cursor.execute("SELECT mtime FROM currency WHERE userID = " + userID)
147 data2 = str(cursor.fetchall()).strip("[]")
148 data2 = data2[2:len(data2)-3]
149 now = datetime.datetime.now()
150 prev = datetime.datetime.strptime(data2, "%Y-%m-%d %H:%M:%S.%f")
151 if ((now-prev).total_seconds()>=60.00):
152 cursor.execute("UPDATE currency SET currency = " + str(int(balance[1:len(balance)-2])+int(bits[1:len(bits)-2])) + " WHERE userID = " + userID)
153 cursor.execute("UPDATE currency SET iron = " + str(int(curiron[1:len(curiron)-2])+int(iron[1:len(iron)-2])) + " WHERE userID = " + userID)
154 cursor.execute("UPDATE currency SET mtime = '" + str(now) + "' WHERE userID = " + userID)
155 conn.commit()
156 return "1"
157'''
158# Coroutines for Joining and Leaving Voice Channel
159global voice
160async def summon(message):
161 global voice
162 channel = message.author.voice.channel
163 voice = await channel.connect()
164
165async def leave():
166 await voice.disconnect()
167
168async def play(url):
169 pass
170'''
171
172'''
173Before Registration:
174 elif (message.content[3:len(message.content)]=="music"):
175 embed = discord.Embed(title = "Music", description = "Everything to do with music.", color = 0x45F4E9)
176 embed.set_footer(text = "Listen to music while destroying your enemies. All commands begin with ec!")
177 await channel.send(embed = embed)
178'''
179
180#balance = str(balance2 + int(balance*num))
181
182@client.event
183async def on_message(message):
184 embed = discord.Embed(color=0x45F4E9)
185 channel = message.channel
186 balance = str(data_retrieve(str(message.author.id))).strip("[]")
187
188 # We do not want the bot to reply to itself
189 if message.author == client.user:
190 return
191
192 if message.author.bot:
193 return
194
195 '''
196 Commands:
197
198 ec!start = Gives the user all the information needed to create his own base
199 ec!help = Lists all commands
200 ec!base = Lists commands related to the user's base (rankwall, info, etc.)
201 ec!mini = Lists commands related to minigames (dice, coin, steal, etc.)
202 ec!register = Registers the user and gives them a base
203 ec!info = Displays the user's stats
204 ec!dice = The user can roll a dice. If they win their bet multipliess by 6. They lose their bet if they lose.
205 ec!coin = The user can throw a coin. If they win their bet multiplies by 2. They lose their bet if they lose.
206 ec!daily = Gives the user 10 000 bits daily if they message at least once a day.
207 ec!steal = The user can attempt to steal from another player with a 1/3 chance of success. Bet doubles if
208 successful; otherwise, the user will lose their bet to the person they are targeting.
209 ec!rankwall = Allows the user to upgrade their wall so it has more health
210 ec!rankbits = Allows the user to upgrade their message reward's bits, so everytime they meesage every 60 seconds
211 they get more bits
212 ec!rankiron = Allows the user to upgrade their message reward's iron, so everytime they message every 60 seconds
213 they get more iron.
214 ec!shop = Displays the shop and all the troops that can be purchased
215 ec!infiltrate = Allows the user to infiltrate another player's base to steal their goods
216 ec!regen = Allows the user to pay bits to generate their wall health
217 ec!scan = Allows the user to see some of the stats of another player's base
218 '''
219
220 # Catches all message that begin with ec!
221 if message.content.startswith('ec!'):
222 if (len(message.content)==8 and message.content[3:8] == "start"):
223 embed.add_field(name = "Info", value = "When you register, you start out with 10,000 bits and a wall surronding your money with 1,000 health. You can upgrade your wall, buy defenses, or buy offenses to infiltrate other users' walls and steal their money. You can also play minigames to earn more money or upgrade existing forgeries to earn more or different types of currencies.")
224 await channel.send(embed=embed)
225 elif (message.content[3:len(message.content)]=="help"):
226 embed = discord.Embed(title = "All Commands", description = "Speak every 60 seconds to get bits and iron. Use ec! befor each command.", color=0x45F4E9)
227 embed.add_field(name = "Base Basics", value = "Do ec!base for more info about these commands.", inline = False)
228 embed.add_field(name = "Minigames", value = "Do ec!mini for more info about these commands.", inline = False)
229 #embed.add_field(name = "Music", value = "Do ec!music for more info about these commands", inline = False)
230 #embed.set_footer(text = "Global Economy with Leaderboards.")
231 await channel.send(embed = embed)
232 elif (message.content[3:len(message.content)]=="base"):
233 embed = discord.Embed(title = "Base Basics", description = "Everything to do with your base.", color = 0x45F4E9)
234 embed.add_field(name="start", value="All the information needed to get started.", inline=False)
235 embed.add_field(name="register", value="Register an account and earn 10000 bits instantly.", inline=False)
236 embed.add_field(name="info", value="All the information about your wall, units, and potentital upgrades.",
237 inline=False)
238 embed.add_field(name="rankwall", value="Increases the health of your wall.", inline = False)
239 embed.add_field(name="rankbits", value="Increases the amount of bits you earn every minute.", inline = False)
240 embed.add_field(name="rankiron", value="Increases the amount of iron you earn every minute.", inline = False)
241 embed.add_field(name="infiltrate <user>",
242 value="Attemps to infiltrate the enemy user. If successful, you take half of their bits and iron. They lose all their troops. If unsuccessful, you lose all your offensive power.", inline = False)
243 embed.add_field(name="regen <amount>",
244 value="Regens your wall by the amount specified. If over max health, restores the wall to max health. Cost is 1.5 units per unit of health.", inline = False)
245 embed.add_field(name="shop", value = "The shop allows you to buy troops for defending against or initiating infiltrations on the enemy.", inline = False)
246 embed.set_footer(text = "Start creating your base today using ec!register and join the global economy! All commands begin with ec!")
247 await channel.send(embed = embed)
248 elif (message.content[3:len(message.content)]=="mini"):
249 embed = discord.Embed(title = "Minigames", description = "Everything to do with minigames.", color = 0x45F4E9)
250 embed.add_field(name="coin <bet>", value="Flip a Coin. Replace <bet> with your bet. Win = 2x. Lose = 0x", inline = False)
251 embed.add_field(name="dice <bet>", value="Roll a Dice. Replace <bet> with your bet. Win = 6x. Lose = 0x", inline = False)
252 embed.add_field(name="steal <user> <bet>",
253 value="Steal from someone. Replace <user> with the user you want to steal from. Replace <bet> with your bet. 1/3 Success.", inline = False)
254 embed.set_footer(text = "Fun minigames. All bets are in bits. All commands begin with ec!")
255 await channel.send(embed = embed)
256 elif (len(message.content)==11 and message.content[3:11] == "register"):
257 balance = str(data_retrieve(str(message.author.id))).strip("[]")
258 if balance[1:len(balance)-2]!="":
259 embed.add_field(name = "Registration", value = "You already have an account!")
260 await channel.send(embed = embed)
261 else:
262 start_data(str(message.author.id))
263 embed.add_field(name = "Registration", value = "Sucessfully registered! {0.author.mention}".format(message))
264 await channel.send(embed = embed)
265 elif (balance[1:len(balance)-2]==""):
266 embed.add_field(name = "Sorry", value = "Register an account using: ec!register")
267 await channel.send(embed = embed)
268 elif (len(message.content)==7 and message.content[3:7] == "info"):
269 userID = str(message.author.id)
270 health = str(data_retrieve(userID, "health")).strip("[]")
271 maxhealth = str(data_retrieve(userID, "maxhealth")).strip("[]")
272 balance = str(data_retrieve(userID, "currency")).strip("[]")
273 iron = str(data_retrieve(userID, "iron")).strip("[]")
274 offensive = str(data_retrieve(userID, "odmg")).strip("[]")
275 defensive = str(data_retrieve(userID, "ddmg")).strip("[]")
276 gainBits = str(data_retrieve(userID, "gainBits")).strip("[]")
277 gainIron = str(data_retrieve(userID, "gainIron")).strip("[]")
278 cooldown = ""
279 if (data_cooldown(userID)=="1"):
280 cooldown = 86400
281 else:
282 cooldown = data_cooldown(userID)
283 embed.add_field(name = "Wall Health", value = "Looks like your wall is sitting at " + health[1:len(health)-2] + "/" + maxhealth[1:len(maxhealth)-2] + " health.")
284 embed.add_field(name = "Balance", value = "Bits and Iron", inline = False)
285 embed.add_field(name = "Bits", value = balance[1:len(balance)-2] + " bits", inline = True)
286 embed.add_field(name = "Iron", value = iron[1:len(iron)-2] + " iron", inline = True)
287 embed.add_field(name = "Troops", value = "Your offensive and defensive damage", inline = False)
288 embed.add_field(name = "Offensive Damage", value = offensive[1:len(offensive)-2] + " offensive damage", inline = True)
289 embed.add_field(name = "Defensive Damage", value = defensive[1:len(defensive)-2] + " defensive damage", inline = True)
290 embed.add_field(name = "Income", value = "The amount of bits and iron you gain every minute you talk", inline = False)
291 embed.add_field(name = "Bits", value = gainBits[1:len(gainBits)-2] + " bits/minute", inline = True)
292 embed.add_field(name = "Iron", value = gainIron[1:len(gainIron)-2] + " iron/minute", inline = True)
293 embed.add_field(name = "Cooldown", value = str(86400-cooldown) + " seconds", inline = False)
294 embed.set_footer(text = "Check available upgrades by typing ec!upgrades")
295 await channel.send(embed=embed)
296 elif (len(message.content)>=7 and message.content[3:7] == "dice"):
297 bet = int(message.content[7:len(message.content)])
298 balance = str(data_retrieve(str(message.author.id), "currency")).strip("[]")
299 balance = balance[1:len(balance) - 2]
300 balance = int(balance)
301 if (bet<=0):
302 embed.add_field(name="Sorry", value="Your bet is not valid.")
303 await channel.send(embed=embed)
304 elif (balance>=bet):
305 embed.add_field(name = "Dice Roll", value = "Rolling Dice...")
306 embed.set_image(url = "https://media1.giphy.com/media/3oGRFlpAW4sIHA02NW/giphy.gif")
307 message2 = await channel.send(embed = embed)
308 time.sleep(3)
309 await message2.delete()
310 if (random.randint(1, 6) == 6):
311 embed = discord.Embed(color=0x45F4E9)
312 data_edit(str(message.author.id), 5, bet, balance)
313 embed.add_field(name="Congrats", value="You won " + str(bet * 6) + " bits.")
314 await channel.send(embed=embed)
315 else:
316 embed = discord.Embed(color=0x45F4E9)
317 data_edit(str(message.author.id), 1, -bet, balance)
318 embed.add_field(name="You Suck", value="You just lost " + str(bet) + " bits.")
319 await channel.send(embed=embed)
320 else:
321 embed.add_field(name="Sorry", value="You do not have enough bits.")
322 await channel.send(embed=embed)
323 elif (len(message.content)>=7 and message.content[3:7] == "coin"):
324 bet = int(message.content[7:len(message.content)])
325 balance = str(data_retrieve(str(message.author.id))).strip("[]")
326 balance = balance[1:len(balance)-2]
327 balance = int(balance)
328 if (bet<=0):
329 embed.add_field(name = "Sorry", value = "Your bet is not valid.")
330 await channel.send(embed = embed)
331 elif (balance>=bet):
332 embed.add_field(name = "Coin Flip", value = "Flipping Coin...")
333 embed.set_image(url = "https://gifimage.net/wp-content/uploads/2017/10/coin-toss-gif.gif")
334 message2 = await channel.send(embed = embed)
335 time.sleep(3)
336 await message2.delete()
337 if (random.randint(0,1)):
338 embed = discord.Embed(color = 0x45F4E9)
339 data_edit(str(message.author.id), 1, bet, balance)
340 embed.add_field(name = "Congrats", value = "You won " + str(bet*2) + " bits.")
341 await channel.send(embed = embed)
342 else:
343 embed = discord.Embed(color = 0x45F4E9)
344 data_edit(str(message.author.id), 1, -bet, balance)
345 embed.add_field(name = "You Suck", value = "You just lost " + str(bet) + " bits.")
346 await channel.send(embed = embed)
347 else:
348 embed.add_field(name = "Sorry", value = "You do not have enough bits.")
349 await channel.send(embed = embed)
350 elif (message.content[3:8] == "daily"):
351 str2 = data_editdaily(str(message.author.id), balance)
352 if (str2=="1"):
353 embed.add_field(name = "Daily", value = "You have just received 10000 bits.")
354 await channel.send(embed = embed)
355 else:
356 embed.add_field(name = "Daily", value = "You have to wait " + str(86400-str2) + " seconds before you can get your daily reward.")
357 await channel.send(embed = embed)
358 elif (len(message.content)>=8 and message.content[3:8]=="steal"):
359 mentions = message.mentions
360 if (len(mentions)>1):
361 embed.add_field(name = "Sorry", value = "You can only steal from one person at a time.")
362 await channel.send(embed = embed)
363 else:
364 otherID = str(mentions[0].id)
365 otherbal = str(data_retrieve(otherID)).strip("[]")
366 otherExists = True
367 try:
368 otherbal = int(otherbal[1:len(otherbal)-2])
369 except ValueError:
370 embed.add_field(name="Sorry", value="The person you are targeting doesn't have an account.")
371 await channel.send(embed=embed)
372 otherExists = False
373 userID = str(message.author.id)
374 balance = str(data_retrieve(userID, "currency")).strip("[]")
375 balance = int(balance[1:len(balance)-2])
376 bet = int(message.content.split(" ")[2])
377 if otherExists:
378 if userID == otherID:
379 embed.add_field(name = "Sorry", value = "You can't steal from yourself silly.")
380 await channel.send(embed = embed)
381 elif bet<=0:
382 embed.add_field(name = "Sorry", value = "You have to steal more than 0 bits.")
383 await channel.send(embed = embed)
384 elif bet>otherbal:
385 embed.add_field(name = "Sorry", value = "You can't steal more than the person has unfortunately.")
386 await channel.send(embed = embed)
387 elif bet>balance:
388 embed.add_field(name = "Sorry", value = "You need to have as many bits as you are going to steal. Extra security, you know.")
389 await channel.send(embed = embed)
390 else:
391 embed.add_field(name = "Thievery", value = "Attempting to Steal...")
392 embed.set_image(url = "http://i.imgur.com/gP9sN.gif")
393 message2 = await channel.send(embed = embed)
394 time.sleep(5)
395 await message2.delete()
396 if random.randint(0,3)==1:
397 data_edit(otherID, -1, bet, otherbal)
398 data_edit(userID, 1, bet, balance)
399 embed = discord.Embed(color = 0x45F4E9)
400 embed.add_field(name = "Nice", value = "You just stole " + str(bet) + " bits from your friend.")
401 await channel.send(embed = embed)
402 else:
403 data_edit(otherID, 1, bet, otherbal)
404 data_edit(userID, -1, bet, balance)
405 embed = discord.Embed(color = 0x45F4E9)
406 embed.add_field(name = "Unlucky", value = "Your friend has caught you. You run away but your friend snatches " + str(bet) + " bits from you in the process.")
407 await channel.send(embed = embed)
408 elif (message.content[3:len(message.content)]=="rankwall"):
409 health = str(data_retrieve(str(message.author.id), "health")).strip("[]")
410 health = health[1:len(health) - 2]
411 health = int(health)
412 health *= 2
413 userID = str(message.author.id)
414 balance = str(data_retrieve(str(message.author.id))).strip("[]")
415 balance = balance[1:len(balance) - 2]
416 balance = int(balance)
417 if (balance>=health*25):
418 data_edita(userID, "health", health)
419 data_edita(userID, "maxhealth", health)
420 data_edita(userID, "currency", balance-health*25)
421 embed = discord.Embed(color = 0x45F4E9)
422 embed.add_field(name = "Upgraded", value = "Your wall now has a max health of " + str(health))
423 await channel.send(embed = embed)
424 else:
425 embed = discord.Embed(color = 0x45F4E9)
426 embed.add_field(name = "Sorry", value = "You need " + str(health*25-balance) + " more bits to upgrade your wall.")
427 await channel.send(embed = embed)
428 elif (message.content[3:len(message.content)]=="rankbits"):
429 userID = str(message.author.id)
430 balance = str(data_retrieve(str(message.author.id), "currency")).strip("[]")
431 balance = balance[1:len(balance) - 2]
432 balance = int(balance)
433 gainbits = str(data_retrieve(str(message.author.id), "gainBits")).strip("[]")
434 gainbits = gainbits[1:len(gainbits)-2]
435 gainbits = int(gainbits)
436 gainbits *= 2
437 if (balance>=gainbits*25):
438 data_edita(userID, "gainBits", gainbits)
439 data_edita(userID, "currency", balance - gainbits * 25)
440 embed = discord.Embed(color = 0x45F4E9)
441 embed.add_field(name = "Upgraded", value = "You gain " + str(gainbits) + " bits now when you speak every minute.")
442 await channel.send(embed = embed)
443 else:
444 embed = discord.Embed(color = 0x45F4E9)
445 embed.add_field(name = "Sorry", value = "You need " + str(gainbits*25-balance) + " more bits to upgrade the amount of bits you generate.")
446 await channel.send(embed = embed)
447 elif (message.content[3:len(message.content)]=="rankiron"):
448 userID = str(message.author.id)
449 balance = str(data_retrieve(str(message.author.id), "currency")).strip("[]")
450 balance = balance[1:len(balance) - 2]
451 balance = int(balance)
452 iron = str(data_retrieve(str(message.author.id), "iron")).strip("[]")
453 iron = iron[1:len(str(balance))-2]
454 iron = int(iron)
455 gainiron = str(data_retrieve(str(message.author.id), "gainIron")).strip("[]")
456 gainiron = gainiron[1:len(str(gainiron)) - 2]
457 gainiron = int(gainiron)
458 gainiron *= 2
459 gainiron += 1
460 if (gainiron * 5000 >= 1000000):
461 if (iron >= gainiron * 25):
462 data_edita(userID, "gainIron", gainiron)
463 data_edita(userID, "iron", iron - gainiron * 25)
464 embed = discord.Embed(color=0x45F4E9)
465 embed.add_field(name="Upgraded", value="You gain " + str(gainiron) + " iron now when you speak every minute.")
466 await channel.send(embed=embed)
467 else:
468 embed = discord.Embed(color=0x45F4E9)
469 embed.add_field(name="Sorry", value="You need " + str(gainiron * 25 - iron) + " more iron to upgrade the amount of iron you generate.")
470 await channel.send(embed=embed)
471 elif (balance >= gainiron * 5000):
472 data_edita(userID, "gainIron", gainiron)
473 data_edita(userID, "currency", balance - gainiron * 5000)
474 embed = discord.Embed(color=0x45F4E9)
475 embed.add_field(name="Upgraded", value="You gain " + str(gainiron) + " iron now when you speak every minute.")
476 await channel.send(embed=embed)
477 else:
478 embed = discord.Embed(color=0x45F4E9)
479 embed.add_field(name="Sorry", value="You need " + str(gainiron * 5000 - balance) + " more bits to upgrade the amount of iron you generate.")
480 await channel.send(embed=embed)
481 elif (message.content[3:len(message.content)]=="shop"):
482 defensive = ""
483 offensive = ""
484 for troop in troops:
485 if troop._type == "defensive":
486 if defensive == "":
487 defensive = troop._name
488 else:
489 defensive += ", " + troop._name
490 else:
491 if offensive == "":
492 offensive = troop._name
493 else:
494 offensive += ", " + troop._name
495 embed = discord.Embed(color = 0x45F4E9)
496 embed.add_field(name = "Shop", value = "Buy defensive troops here to protect your base, or buy offensive troops to infiltrate others.")
497 embed.add_field(name = "Defensive", value = defensive)
498 embed.add_field(name = "Offensive", value = offensive)
499 embed.set_footer(text="Type ec!<troop name> to learn more.")
500 await channel.send(embed=embed)
501 elif (message.content[3:13]=="infiltrate"):
502 mentions = message.mentions
503 if (len(mentions)>1):
504 embed = discord.Embed(color = 0x45F4E9)
505 embed.add_field(name = "Sorry", value = "Please mention only one user.")
506 await channel.sned(embed=embed)
507 elif (len(mentions)==1):
508 otherID = str(mentions[0].id)
509 otherbal = str(data_retrieve(otherID)).strip("[]")
510 otherExists = True
511 try:
512 otherbal = int(otherbal[1:len(otherbal) - 2])
513 except ValueError:
514 embed = discord.Embed(color = 0x45F4E9)
515 embed.add_field(name="Sorry", value="The person you are targeting doesn't have an account.")
516 await channel.send(embed=embed)
517 otherExists = False
518 userID = str(message.author.id)
519 if (otherID==userID):
520 embed = discord.Embed(color = 0x45F4E9)
521 embed.add_field(name = "Sorry", value = "You can't target yourself.")
522 await channel.send(embed=embed)
523 else:
524 balance = str(data_retrieve(userID, "currency")).strip("[]")
525 balance = int(balance[1:len(balance) - 2])
526 iron = str(data_retrieve(userID, "iron")).strip("[]")
527 iron = int(iron[1:len(iron) - 2])
528 if otherExists:
529 if (data_cooldown(otherID)=="1"):
530 data_editcooldown(otherID)
531 data_edita(userID, "cooldown", 0)
532 otheriron = str(data_retrieve(otherID, "iron")).strip("[]")
533 otheriron = int(otheriron[1:len(otheriron) - 2])
534 enemyhealth = str(data_retrieve(otherID, "health")).strip("[]")
535 enemyhealth = int(enemyhealth[1:len(enemyhealth) - 2])
536 offen = str(data_retrieve(userID, "odmg")).strip("[]")
537 offen = int(offen[1:len(offen) - 2])
538 defen = str(data_retrieve(otherID, "ddmg")).strip("[]")
539 defen = int(defen[1:len(defen) - 2])
540 if infiltration(enemyhealth, offen, defen):
541 maxhealth = str(data_retrieve(otherID, "maxhealth")).strip("[]")
542 maxhealth = int(maxhealth[1:len(maxhealth) - 2])
543 data_edita(userID, "currency", balance + otherbal // 2)
544 data_edita(userID, "iron", iron + otheriron // 2)
545 data_edita(otherID, "currency", otherbal - otherbal // 2)
546 data_edita(otherID, "iron", otheriron - otheriron // 2)
547 data_edita(otherID, "odmg", 0)
548 data_edita(otherID, "ddmg", 0)
549 data_edita(otherID, "health", maxhealth)
550 embed = discord.Embed(color=0x45F4E9)
551 embed.add_field(name="Success",
552 value="You successfully infiltrated the enemy base, earning " + str(
553 otherbal // 2) + " bits and " + str(
554 otheriron // 2) + " iron. All enemy troops have died as a result.")
555 await channel.send(embed=embed)
556 else:
557 data_edita(userID, "odmg", 0)
558 embed = discord.Embed(color=0x45F4E9)
559 embed.add_field(name="Failure",
560 value="You failed to infiltrate the enemy base, losing all your offensive troops.")
561 await channel.send(embed=embed)
562 else:
563 embed = discord.Embed(color =0x45F4E9)
564 embed.add_field(name = "Sorry", value = "You have to wait " + str(86400-data_cooldown(otherID)) + " seconds before you can attack this base.")
565 await channel.send(embed=embed)
566 else:
567 embed = discord.Embed(color = 0x45F4E9)
568 embed.add_field(name = "Sorry", value = "Please mention the user you want to target.")
569 await channel.send(embed=embed)
570 elif (message.content[3:8]=="regen"):
571 userID = str(message.author.id)
572 balance = str(data_retrieve(userID, "currency")).strip("[]")
573 balance = balance[1:len(balance) - 2]
574 balance = int(balance)
575 health = str(data_retrieve(userID, "health")).strip("[]")
576 health = int(health[1:len(health)-2])
577 maxhealth = str(data_retrieve(userID, "maxhealth")).strip("[]")
578 maxhealth = int(maxhealth[1:len(maxhealth)-2])
579 valid = True
580 try:
581 regen = int(message.content[9: len(message.content)])
582 except ValueError:
583 embed = discord.Embed(embed = 0x45F4E9)
584 embed.add_field(name = "Sorry", value = "Please enter a valid number for the amount of health you wish to regen")
585 await channel.send(embed=embed)
586 valid = False
587 if valid:
588 if (regen==0):
589 embed = discord.Embed(embed=0x45F4E9)
590 embed.add_field(name="Sorry", value="Please enter a valid number for the amount of health you wish to regen")
591 await channel.send(embed=embed)
592 if (maxhealth-health==0):
593 embed = discord.Embed(embed = 0x45F4E9)
594 embed.add_field(name = "Sorry", value = "Your wall is at full health.")
595 await channel.send(embed=embed)
596 else:
597 if regen+health>maxhealth:
598 regen = maxhealth-health
599 if (int(math.floor(regen * 1.5)) > balance):
600 embed = discord.Embed(embed=0x45F4E9)
601 embed.add_field(name="Sorry", value="You don't have enough money to regen your wall that much.")
602 await channel.send(embed=embed)
603 else:
604 data_edita(userID, "currency", balance-int(math.floor(regen * 1.5)))
605 data_edita(userID, "health", health+regen)
606 embed.add_field(name = "Success", value = "The health of your wall is now " + str(health+regen))
607 await channel.send(embed=embed)
608 elif (message.content[3:7]=="scan"):
609 mentions = message.mentions
610 if (len(mentions) > 1):
611 embed = discord.Embed(color=0x45F4E9)
612 embed.add_field(name="Sorry", value="Please mention only one user.")
613 await channel.sned(embed=embed)
614 elif (len(mentions) == 1):
615 otherID = str(mentions[0].id)
616 otherbal = str(data_retrieve(otherID)).strip("[]")
617 otherExists = True
618 try:
619 otherbal = int(otherbal[1:len(otherbal) - 2])
620 except ValueError:
621 embed = discord.Embed(color=0x45F4E9)
622 embed.add_field(name="Sorry", value="The person you are scanning doesn't have an account.")
623 await channel.send(embed=embed)
624 otherExists = False
625 userID = str(message.author.id)
626 if (otherExists):
627 if (otherID!=userID):
628 otheriron = str(data_retrieve(otherID, "iron")).strip("[]")
629 otheriron = int(otheriron[1:len(otheriron) - 2])
630 enemyhealth = str(data_retrieve(otherID, "health")).strip("[]")
631 enemyhealth = int(enemyhealth[1:len(enemyhealth) - 2])
632 maxhealth = str(data_retrieve(otherID, "maxhealth")).strip("[]")
633 maxhealth = int(maxhealth[1:len(maxhealth) - 2])
634 cooldown = ""
635 if (data_cooldown(otherID)=="1"):
636 cooldown = 86400
637 else:
638 cooldown = data_cooldown(otherID)
639 embed = discord.Embed(color=0x45F4E9)
640 embed.add_field(name="Wall Health", value="Looks like their wall is sitting at " + str(enemyhealth) + "/" + str(maxhealth) + " health.")
641 embed.add_field(name="Balance", value="Bits and Iron", inline=False)
642 embed.add_field(name="Bits", value=str(otherbal) + " bits", inline=True)
643 embed.add_field(name="Iron", value=str(otheriron) + " iron", inline=True)
644 embed.add_field(name="Troops", value="Your offensive and defensive damage", inline=False)
645 embed.add_field(name="Offensive Damage", value="??? offensive damage",
646 inline=True)
647 embed.add_field(name="Defensive Damage", value="??? defensive damage",
648 inline=True)
649 embed.add_field(name = "Cooldown", value = str(86400-cooldown) + " seconds", inline = False)
650 embed.set_footer(text=str(mentions[0].name) + "'s Base")
651 await channel.send(embed=embed)
652 else:
653 embed = discord.Embed(color=0x45F4E9)
654 embed.add_field(name = "Sorry", value = "You can't scan yourself.")
655 await channel.send(embed=embed)
656 else:
657 embed = discord.Embed(color=0x45F4E9)
658 embed.add_field(name = "Sorry", value = "The base you are trying to scan doesn't exist.")
659 await channel.send(embed=embed)
660 else:
661 embed = discord.Embed(color=0x45F4E9)
662 embed.add_field(name="Sorry", value="Please mention the user you want to scan.")
663 await channel.send(embed=embed)
664 '''
665 elif (message.content[3:9]=="summon"):
666 await summon(message)
667 elif (message.content[3:8]=="leave"):
668 await leave()
669 '''
670 for troop in troops:
671 if (message.content[3:len(message.content)]==troop._name):
672 embed = discord.Embed(color = 0x45F4E9)
673 embed.add_field(name = troop._name, value = troop._desc)
674 embed.add_field(name = "Type", value = troop._type.capitalize(), inline = False)
675 embed.add_field(name = "Cost", value = troop._cost + " " + troop._curr, inline = False)
676 embed.add_field(name = "Damage", value = troop._dmg + " units/second", inline = False)
677 embed.add_field(name = "Buy?", value = "Type \"ec!" + troop._name + " buy <quantity>\" to buy a <quantity> number of " + troop._name.lower() + "s", inline = False)
678 await channel.send(embed=embed)
679 if (message.content[3:int(7+len(troop._name))]==str(troop._name + " buy")):
680 userID = str(message.author.id)
681 balance = str(data_retrieve(str(message.author.id), "currency")).strip("[]")
682 balance = balance[1:len(balance) - 2]
683 balance = int(balance)
684 iron = str(data_retrieve(str(message.author.id), "iron")).strip("[]")
685 iron = iron[1:len(iron) - 2]
686 iron = int(iron)
687 quantity = int(message.content[int(7+len(troop._name)):len(message.content)])
688 ddmg = str(data_retrieve(str(message.author.id), "ddmg")).strip("[]")
689 ddmg = ddmg[1:len(ddmg)-2]
690 ddmg = int(ddmg)
691 odmg = str(data_retrieve(str(message.author.id), "odmg")).strip("[]")
692 odmg = odmg[1:len(odmg)-2]
693 odmg = int(odmg)
694 if (troop._curr=="iron"):
695 if (iron>=int(troop._cost)*quantity):
696 data_edita(userID, "iron", iron-int(troop._cost)*quantity)
697 if (troop._type == "defensive"):
698 data_edita(userID, "ddmg", ddmg + int(troop._dmg)*quantity)
699 else:
700 data_edita(userID, "odmg", odmg + int(troop._dmg)*quantity)
701 embed = discord.Embed(color = 0x45F4E9)
702 embed.add_field(name = "Congrats", value = "You just purchased " + str(quantity) + " " + troop._name + "s for " + str(int(troop._cost)*quantity) + " " + troop._curr + ".")
703 await channel.send(embed = embed)
704 else:
705 embed = discord.Embed(color = 0x45F4E9)
706 embed.add_field(name = "Sorry", value = "You need " + str(int(troop._cost)*quantity-iron) + " more " + troop._curr + " to purchase " + str(quantity) + " of this troop.")
707 await channel.send(embed = embed)
708 else:
709 if (balance>=int(troop._cost)*quantity):
710 data_edita(userID, "currency", balance-int(troop._cost)*quantity)
711 if (troop._type == "defensive"):
712 data_edita(userID, "ddmg", ddmg + int(troop._dmg)*quantity)
713 else:
714 data_edita(userID, "odmg", odmg + int(troop._dmg)*quantity)
715 embed = discord.Embed(color = 0x45F4E9)
716 embed.add_field(name = "Congrats", value = "You just purchased " + str(quantity) + " " + troop._name + "s for " + str(int(troop._cost)*quantity) + " " + troop._curr + ".")
717 await channel.send(embed = embed)
718 else:
719 embed = discord.Embed(color = 0x45F4E9)
720 embed.add_field(name = "Sorry", value = "You need " + str(int(troop._cost)*quantity-balance) + " more " + troop._curr + " to purchase " + str(quantity) + " of this troop.")
721 await channel.send(embed = embed)
722 #Users get message awards every minute
723 curiron = str(data_retrieve(str(message.author.id), "iron")).strip("[]")
724 bits = str(data_retrieve(str(message.author.id), "gainBits")).strip("[]")
725 iron = str(data_retrieve(str(message.author.id), "gainIron")).strip("[]")
726 data_message(str(message.author.id), balance, curiron, bits, iron)
727
728@client.event
729async def on_ready():
730 print('Logged in as')
731 print(client.user.name)
732 print(client.user.id)
733 print('------')
734 await client.change_presence(activity=discord.Game(name='ec!help'))
735
736create_table()
737client.run(TOKEN)