archive
This commit is contained in:
589
trader.py
Normal file
589
trader.py
Normal file
@@ -0,0 +1,589 @@
|
||||
"""
|
||||
Copyright (C) 2021 Lexzach
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Affero General Public License as published
|
||||
by the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Affero General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public License
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
"""
|
||||
|
||||
import sys
|
||||
import time
|
||||
import asyncio
|
||||
import discord
|
||||
from discord.ext import commands
|
||||
import os.path
|
||||
import random
|
||||
from random import randint
|
||||
import re
|
||||
from items import itemList, unusualList
|
||||
import numpy
|
||||
import sqlite3
|
||||
from datetime import datetime
|
||||
client = commands.Bot(command_prefix='tf.')
|
||||
conn = sqlite3.connect("itemServ.db")
|
||||
itemSrv = conn.cursor()
|
||||
client.remove_command('help')
|
||||
# itemSrv.execute("CREATE TABLE users(user_id integer PRIMARY KEY, items list, crates_unboxed integer)")
|
||||
# conn.commit()
|
||||
items = itemList
|
||||
@client.event
|
||||
async def on_ready():
|
||||
print("Bot has successfully connected.")
|
||||
print("")
|
||||
print("Bot made by:")
|
||||
print(" _ _ ")
|
||||
print("| | _____ __ _____ _ __| |_ ")
|
||||
print("| |__/ -_) \ /|_ / _` / _| ' \ ")
|
||||
print("|____\___/_\_\/__\__,_\__|_||_|")
|
||||
print("Ver 1.3")
|
||||
await client.change_presence(status=discord.Status.online, activity=discord.Game("tf.help"))
|
||||
def unboxCalc():
|
||||
final = ""
|
||||
itemUnboxed = items[randint(0,int(len(items))-1)]
|
||||
quality = ""
|
||||
unusual = False
|
||||
if randint(0,100) > 98:
|
||||
quality = "Elite Grade "
|
||||
elif randint(0, 100) <= 8:
|
||||
quality = "Commando Grade "
|
||||
elif randint(0,100) <= 16:
|
||||
quality = "Mercenary Grade "
|
||||
if randint(1,100) == 100:
|
||||
effect = unusualList[randint(0,int(len(unusualList))-1)]
|
||||
quality = "Unusual "+quality
|
||||
unusual = True
|
||||
if randint(0,10) == 10:
|
||||
quality = "Strange "+quality
|
||||
if randint(0,10000) == 10000:
|
||||
quality = "Community "
|
||||
if quality == "":
|
||||
final = itemUnboxed
|
||||
else:
|
||||
if unusual == False:
|
||||
final = quality + itemUnboxed
|
||||
else:
|
||||
final = quality + itemUnboxed + " (★ Unusual Effect: "+effect+")"
|
||||
print("Generated new item: "+final)
|
||||
return final
|
||||
|
||||
@client.command()
|
||||
async def help(ctx):
|
||||
print("Command: help")
|
||||
embedHelp = discord.Embed(title = "", color = discord.Colour.green())
|
||||
embedHelp.add_field(name = 'TF2 Virtual Trading', value = "Bot Prefix: tf.\n\n Commands:\n tf.help - Show this menu\n tf.unbox - Unbox a new item\n tf.inventory (@user) - View your inventory or someone elses\n tf.trade (@user) - Trade with someone\n tf.collectors - Combine 10 copies of an item into one collectors copy")
|
||||
embedHelp.set_footer(text="Direct any bugs to Lexzach#3215")
|
||||
await ctx.send(embed=embedHelp)
|
||||
|
||||
@client.command()
|
||||
@commands.cooldown(1, 1800, commands.BucketType.user)
|
||||
async def unbox(ctx):
|
||||
bonus = False
|
||||
bonusItem = ""
|
||||
await ctx.message.delete(delay=60)
|
||||
print("\nUser ID #"+str(ctx.author.id)+" started an unbox")
|
||||
new = False
|
||||
itemSrv.execute("SELECT count(name) FROM sqlite_master WHERE type='table' AND name='"+str(ctx.author.id)+"'")
|
||||
conn.commit()
|
||||
if int(itemSrv.fetchone()[0]) == 0:
|
||||
itemSrv.execute("create table if not exists '"+str(ctx.author.id)+"'(items list)")
|
||||
now = datetime.now()
|
||||
now = now.strftime('%d/%m/%Y %H:%M:%S')
|
||||
new = True
|
||||
itemSrv.execute("INSERT INTO '"+str(ctx.author.id)+"'(items) VALUES('[Untradable] Tester Badge ( "+now+" )')")
|
||||
conn.commit()
|
||||
embedUnbox = discord.Embed(title = "", color = discord.Colour.green())
|
||||
embedUnbox.add_field(name = '**Unboxing your loot.\n5**', value = "<@" + str(ctx.author.id)+">")
|
||||
embedUnbox4 = discord.Embed(title = "", color = discord.Colour.green())
|
||||
embedUnbox4.add_field(name = '**Unboxing your loot..\n4**', value = "<@" + str(ctx.author.id)+">")
|
||||
embedUnbox3 = discord.Embed(title = "", color = discord.Colour.green())
|
||||
embedUnbox3.add_field(name = '**Unboxing your loot...\n3**', value = "<@" + str(ctx.author.id)+">")
|
||||
embedUnbox2 = discord.Embed(title = "", color = discord.Colour.green())
|
||||
embedUnbox2.add_field(name = '**Unboxing your loot.\n2**', value = "<@" + str(ctx.author.id)+">")
|
||||
embedUnbox1 = discord.Embed(title = "", color = discord.Colour.green())
|
||||
embedUnbox1.add_field(name = '**Unboxing your loot..\n1**', value = "<@" + str(ctx.author.id)+">")
|
||||
item = unboxCalc()
|
||||
if random.randint(1,5) == 5:
|
||||
bonus = True
|
||||
bonusItem = "Mann Co. Supply Crate Key"
|
||||
print("Generated new item: "+bonusItem)
|
||||
if "Unusual" in item: #----------------------------------------------------------------------------Add effects
|
||||
embedFound = discord.Embed(title = "", color = 0x8650AC)
|
||||
elif "Elite Grade" in item:
|
||||
embedFound = discord.Embed(title = "", color = 0xEB4B4B)
|
||||
elif "Commando Grade" in item:
|
||||
embedFound = discord.Embed(title = "", color = 0x8847FF)
|
||||
elif "Commando Grade" in item:
|
||||
embedFound = discord.Embed(title = "", color = 0x4B69FF)
|
||||
elif "Strange" in item:
|
||||
embedFound = discord.Embed(title = "", color = 0xCF6A32)
|
||||
elif "Community" in item:
|
||||
embedFound = discord.Embed(title = "", color = 0x70B04A)
|
||||
elif "Mercenary Grade" in item:
|
||||
embedFound = discord.Embed(title = "", color = 0x4B69FF)
|
||||
else:
|
||||
embedFound = discord.Embed(title = "", color = 0xFFD700)
|
||||
if new == True:
|
||||
embedFound.add_field(name = '**You unboxed:\n||'+item + "||\n||First unbox: [Untradable] Tester Badge ( "+now+" )"+'||**', value = "<@" + str(ctx.author.id)+">")
|
||||
else:
|
||||
if bonus == False:
|
||||
embedFound.add_field(name = '**You unboxed:\n||'+item+'||**', value = "<@" + str(ctx.author.id)+">")
|
||||
else:
|
||||
embedFound.add_field(name = '**You unboxed:\n||'+item+"||\n||"+bonusItem+'||**', value = "<@" + str(ctx.author.id)+">")
|
||||
item = item.replace("'", "")
|
||||
item = item.replace('"', "")
|
||||
itemSrv.execute("INSERT INTO '"+str(ctx.author.id)+"'(items) VALUES('"+item+"')")
|
||||
if bonus == True:
|
||||
itemSrv.execute("INSERT INTO '"+str(ctx.author.id)+"'(items) VALUES('"+bonusItem+"')")
|
||||
conn.commit()
|
||||
msg = await ctx.send(embed=embedUnbox)
|
||||
await asyncio.sleep(1)
|
||||
await msg.edit(embed=embedUnbox4)
|
||||
await asyncio.sleep(1)
|
||||
await msg.edit(embed=embedUnbox3)
|
||||
await asyncio.sleep(1)
|
||||
await msg.edit(embed=embedUnbox2)
|
||||
await asyncio.sleep(1)
|
||||
await msg.edit(embed=embedUnbox1)
|
||||
await asyncio.sleep(1)
|
||||
await msg.edit(embed=embedFound)
|
||||
|
||||
|
||||
@unbox.error
|
||||
async def unbox_error(ctx, error):
|
||||
await ctx.message.delete(delay=10)
|
||||
embedTooLong = discord.Embed(title = "", color = discord.Colour.red())
|
||||
embedTooLong.add_field(name = "**You must wait "+str(round(error.retry_after/60)) +" minutes before your next unbox**".format(error.retry_after), value = "<@" + str(ctx.author.id)+">")
|
||||
await ctx.send(embed=embedTooLong, delete_after=10)
|
||||
|
||||
@client.command()
|
||||
async def inventory(ctx, *args):
|
||||
await ctx.message.delete(delay=60)
|
||||
someoneElse = False
|
||||
error = False
|
||||
if str(args) == "()":
|
||||
inventory = discord.Embed(title = "", color = discord.Colour.blue())
|
||||
itemSrv.execute("SELECT count(name) FROM sqlite_master WHERE type='table' AND name='"+str(ctx.author.id)+"'")
|
||||
if int(itemSrv.fetchone()[0]) != 0:
|
||||
itemSrv.execute("SELECT * FROM '"+ str(ctx.author.id)+"'")
|
||||
print("\nUser ID #"+str(ctx.author.id)+" requested to see their inventory")
|
||||
else:
|
||||
print("\nUser ID #"+str(ctx.author.id)+" requested to see their inventory, but they don't have any items")
|
||||
error = True
|
||||
userNotFound = discord.Embed(title = "", color = discord.Colour.red())
|
||||
userNotFound.add_field(name = "**You don't have an inventory yet!\nDo `tf.unbox` to get started!**", value = "<@" + str(ctx.author.id)+">")
|
||||
await ctx.send(embed=userNotFound, delete_after=10)
|
||||
else:
|
||||
if True == (str(args)[5:-4].isdecimal()):
|
||||
itemSrv.execute("SELECT count(name) FROM sqlite_master WHERE type='table' AND name='"+str(args)[5:-4]+"'")
|
||||
if int(itemSrv.fetchone()[0]) == 0:
|
||||
print("\nUser ID #"+str(ctx.author.id)+" requested to see the inventory of user ID#"+str(args)[5:-4]+" but they have no items")
|
||||
error = True
|
||||
userNotFound = discord.Embed(title = "", color = discord.Colour.red())
|
||||
userNotFound.add_field(name = '**User not found!**', value = "<@" + str(ctx.author.id)+">")
|
||||
await ctx.send(embed=userNotFound, delete_after=10)
|
||||
else:
|
||||
print("\nUser ID #"+str(ctx.author.id)+" requested to see the inventory of user ID#"+str(args)[5:-4])
|
||||
someoneElse = True
|
||||
inventory = discord.Embed(title = "", color = discord.Colour.blue())
|
||||
itemSrv.execute("SELECT * FROM '"+ str(args)[5:-4]+"'")
|
||||
else:
|
||||
print("\nUser ID #"+str(ctx.author.id)+" requested to see the inventory of user ID#"+str(args)[5:-4]+" but they have no items")
|
||||
error = True
|
||||
userNotFound = discord.Embed(title = "", color = discord.Colour.red())
|
||||
userNotFound.add_field(name = '**User not found!**', value = "<@" + str(ctx.author.id)+">")
|
||||
await ctx.send(embed=userNotFound, delete_after=10)
|
||||
# except:
|
||||
# error = True
|
||||
items = ""
|
||||
if error == False:
|
||||
if someoneElse == True:
|
||||
itemSrv.execute("SELECT * FROM '"+str(str(args)[5:-4])+"' ORDER BY items")
|
||||
else:
|
||||
itemSrv.execute("SELECT * FROM '"+str(ctx.author.id)+"' ORDER BY items")
|
||||
for x in itemSrv.fetchall():
|
||||
items = items + str(x)[2:-3] + "\n"
|
||||
if someoneElse == False:
|
||||
inventory.add_field(name = '**Your inventory:**', value = "<@" + str(ctx.author.id)+">\n\n"+items)
|
||||
else:
|
||||
inventory.add_field(name = '**Other inventory:**', value = "<@" + str(args)[5:-4]+">'s Inventory\n\n"+items)
|
||||
await ctx.send(embed=inventory, delete_after=120)
|
||||
|
||||
@inventory.error
|
||||
async def inventory_error(ctx, error):
|
||||
embedTooLong = discord.Embed(title = "", color = discord.Colour.red())
|
||||
embedTooLong.add_field(name = '**An error has occured while checking inventory**', value = "<@" + str(ctx.author.id)+">")
|
||||
await ctx.send(embed=embedTooLong, delete_after=10)
|
||||
|
||||
@client.command()
|
||||
async def trade(ctx, *args):
|
||||
try:
|
||||
if str(args) == "()":
|
||||
testing = discord.Embed(title = "", color = discord.Colour.green())
|
||||
testing.add_field(name = '**Instructions have been sent to you**', value = "<@" + str(ctx.author.id)+">")
|
||||
await ctx.send(embed=testing, delete_after=5)
|
||||
|
||||
user= client.get_user(ctx.author.id)
|
||||
testing = discord.Embed(title = "", color = discord.Colour.green())
|
||||
testing.add_field(name = '**Trading**', value = "Please enter the users discord ID (NOT their username)\n\nAlternatively, you can tag them in the trade message inside of a server.")
|
||||
testingEmbed = await user.send(embed=testing)
|
||||
error = False
|
||||
await asyncio.sleep(0.5)
|
||||
msg = await client.wait_for("message")
|
||||
await testingEmbed.delete()
|
||||
player = msg.content
|
||||
else:
|
||||
if True == (str(args)[5:-4].isdecimal()):
|
||||
player = int(str(args)[5:-4])
|
||||
error = False
|
||||
user= client.get_user(ctx.author.id)
|
||||
else:
|
||||
failedTag = discord.Embed(title = "", color = discord.Colour.red())
|
||||
failedTag.add_field(name = '**Please tag someone to trade.**', value = "<@" + str(ctx.author.id)+">")
|
||||
await ctx.send(embed=failedTag, delete_after=10)
|
||||
error = True
|
||||
if str(player) != str(ctx.author.id):
|
||||
itemSrv.execute("SELECT count(name) FROM sqlite_master WHERE type='table' AND name='"+str(player)+"'")
|
||||
if int(itemSrv.fetchone()[0]) == 0:
|
||||
print("\nUser ID #"+str(ctx.author.id)+" requested to see the inventory of user ID#"+str(player)+" but they have no items")
|
||||
error = True
|
||||
userNotFound = discord.Embed(title = "", color = discord.Colour.red())
|
||||
userNotFound.add_field(name = '**User not found!**', value = "<@" + str(ctx.author.id)+">")
|
||||
await user.send(embed=userNotFound, delete_after=10)
|
||||
else:
|
||||
print("\nUser ID #"+str(ctx.author.id)+" requested to see the inventory of user ID#"+str(player))
|
||||
someoneElse = True
|
||||
inventory = discord.Embed(title = "", color = discord.Colour.blue())
|
||||
itemSrv.execute("SELECT * FROM '"+ str(player)+"'")
|
||||
items = ""
|
||||
itemsList = []
|
||||
if error == False:
|
||||
itemSrv.execute("SELECT * FROM '"+str(player)+"' ORDER BY items")
|
||||
for x in itemSrv.fetchall():
|
||||
if "[Untradeable]" and "[Untradable]" not in str(x)[2:-3]:
|
||||
items = items + str(x)[2:-3] + "\n"
|
||||
itemsList.append(str(x)[2:-3])
|
||||
inventory.add_field(name = '**Other inventory:**', value = "<@" + str(player)+">'s Inventory\n\n"+items)
|
||||
# await ctx.send(embed=inventory)
|
||||
# inventory = discord.Embed(title = "", color = discord.Colour.blue())
|
||||
itemSrv.execute("SELECT count(name) FROM sqlite_master WHERE type='table' AND name='"+str(ctx.author.id)+"'")
|
||||
if int(itemSrv.fetchone()[0]) != 0:
|
||||
itemSrv.execute("SELECT * FROM '"+ str(ctx.author.id)+"'")
|
||||
print("\nUser ID #"+str(ctx.author.id)+" requested to see their inventory")
|
||||
else:
|
||||
print("\nUser ID #"+str(ctx.author.id)+" requested to see their inventory, but they don't have any items")
|
||||
error = True
|
||||
userNotFound = discord.Embed(title = "", color = discord.Colour.red())
|
||||
userNotFound.add_field(name = "**You don't have an inventory yet!\nDo `tf.unbox` to get started!**", value = "<@" + str(ctx.author.id)+">")
|
||||
await user.send(embed=userNotFound, delete_after=10)
|
||||
uitems = ""
|
||||
uitemsList = []
|
||||
itemSrv.execute("SELECT * FROM '"+str(ctx.author.id)+"' ORDER BY items")
|
||||
for x in itemSrv.fetchall():
|
||||
if "[Untradeable]" and "[Untradable]" not in str(x)[2:-3]:
|
||||
uitems = uitems + str(x)[2:-3] + "\n"
|
||||
uitemsList.append(str(x)[2:-3])
|
||||
howto = discord.Embed(title = "", color = discord.Colour.green())
|
||||
howto.add_field(name = '**How to trade:**', value = "1. Type the items you want to receive out of their inventory\n2. Type `next` to confirm\n3. Type the items you want send to them from your inventory\n4. Type `send` to send the trade\n\n**You can triple-click the text to highlight and copy it**")
|
||||
how2Trade = await user.send(embed=howto)
|
||||
inventory.add_field(name = '**Your inventory:**', value = "<@" + str(ctx.author.id)+">\n\n"+uitems)
|
||||
inventoryEmbed = await user.send(embed=inventory)
|
||||
send = discord.Embed(title = "", color = discord.Colour.green())
|
||||
send.add_field(name = '**Send**', value = "None")
|
||||
receive = discord.Embed(title = "", color = discord.Colour.green())
|
||||
receive.add_field(name = '**Receive**', value = "None")
|
||||
await asyncio.sleep(0.5)
|
||||
receiveEmbed = await user.send(embed=receive)
|
||||
await asyncio.sleep(0.5)
|
||||
sendEmbed = await user.send(embed=send)
|
||||
currentSend = []
|
||||
currentReceive = []
|
||||
currentSendText = ""
|
||||
currentReceiveText = ""
|
||||
await asyncio.sleep(1)
|
||||
msg = await client.wait_for("message")
|
||||
if msg.content in itemsList:
|
||||
currentReceive.append(msg.content)
|
||||
currentReceiveText = currentReceiveText + str(msg.content) + "\n"
|
||||
receive.clear_fields()
|
||||
receive.add_field(name = '**Receive**', value = currentReceiveText)
|
||||
await receiveEmbed.edit(embed=receive)
|
||||
while msg.content != "next":
|
||||
msg = await client.wait_for("message", check=lambda message: message.author == ctx.author and isinstance(message.channel, discord.DMChannel))
|
||||
if msg.content in itemsList and currentReceive.count(msg.content) < itemsList.count(msg.content):
|
||||
currentReceive.append(msg.content)
|
||||
currentReceiveText = currentReceiveText + str(msg.content) + "\n"
|
||||
receive.clear_fields()
|
||||
receive.add_field(name = '**Receive**', value = currentReceiveText)
|
||||
await receiveEmbed.edit(embed=receive)
|
||||
while msg.content != "send":
|
||||
msg = await client.wait_for("message", check=lambda message: message.author == ctx.author and isinstance(message.channel, discord.DMChannel))
|
||||
if msg.content in uitemsList and currentSend.count(msg.content) < uitemsList.count(msg.content):
|
||||
currentSend.append(msg.content)
|
||||
currentSendText = currentSendText + msg.content + "\n"
|
||||
send.clear_fields()
|
||||
send.add_field(name = '**Send**', value = currentSendText)
|
||||
await sendEmbed.edit(embed=send)
|
||||
|
||||
await inventoryEmbed.delete()
|
||||
await receiveEmbed.delete()
|
||||
await sendEmbed.delete()
|
||||
await how2Trade.delete()
|
||||
confirmSend = discord.Embed(title = "", color = discord.Colour.purple())
|
||||
if currentSendText != "" or currentReceiveText != "":
|
||||
if currentSendText == "":
|
||||
currentSendText = "Nothing"
|
||||
if currentReceiveText == "":
|
||||
currentReceiveText = "Nothing"
|
||||
def check(reaction, user):
|
||||
return reaction.message.id == confirm.id
|
||||
confirmSend.add_field(name = '**Please confirm the trade.**', value = "\n**You will get:**\n`"+currentReceiveText+"`\n**You will lose:**\n`"+currentSendText+"`\n\n**All trades are final!\nOffer cannot be cancelled once sent.**")
|
||||
confirm = await user.send(embed=confirmSend)
|
||||
await confirm.add_reaction("✅")
|
||||
await confirm.add_reaction("❌")
|
||||
await asyncio.sleep(1)
|
||||
reaction = await client.wait_for("reaction_add",check=check)
|
||||
if str(reaction[0]) == "✅":
|
||||
print("User ID #"+str(ctx.author.id)+" sent a trade to User ID #"+str(player)+"\n"+currentSendText+"\nfor\n"+currentReceiveText)
|
||||
confirmSend = discord.Embed(title = "", color = discord.Colour.green())
|
||||
confirmSend.add_field(name = '**Trade sent!**', value = "Your trade to <@" + str(player)+"> has been sent.")
|
||||
confirm = await user.send(embed=confirmSend)
|
||||
userDm = await client.fetch_user(int(player))
|
||||
confirmSend = discord.Embed(title = "", color = discord.Colour.green())
|
||||
confirmSend.add_field(name = '**User wants to trade:**', value = "<@" + str(ctx.author.id)+">"+" wants to trade with you.\n\n**You will lose:**\n`"+currentReceiveText+"`\n**You will get:**\n`"+currentSendText+"`\n\n**All trades are final!**")
|
||||
confirm = await userDm.send(embed=confirmSend)
|
||||
await confirm.add_reaction("✅")
|
||||
await confirm.add_reaction("❌")
|
||||
await asyncio.sleep(1)
|
||||
reaction = await client.wait_for("reaction_add",check=check)
|
||||
if str(reaction[0]) == "✅":
|
||||
itemsList = []
|
||||
itemSrv.execute("SELECT * FROM '"+str(player)+"' ORDER BY items")
|
||||
for x in itemSrv.fetchall():
|
||||
if "[Untradeable]" and "[Untradable]" not in str(x)[2:-3]:
|
||||
items = items + str(x)[2:-3] + "\n"
|
||||
itemsList.append(str(x)[2:-3])
|
||||
uitemsList = []
|
||||
itemSrv.execute("SELECT * FROM '"+str(ctx.author.id)+"' ORDER BY items")
|
||||
for x in itemSrv.fetchall():
|
||||
if "[Untradeable]" and "[Untradable]" not in str(x)[2:-3]:
|
||||
uitems = uitems + str(x)[2:-3] + "\n"
|
||||
uitemsList.append(str(x)[2:-3])
|
||||
|
||||
|
||||
receiveChecksOut = False
|
||||
sendChecksOut = False
|
||||
if currentSendText == "Nothing":
|
||||
sendChecksOut = True
|
||||
if currentReceiveText == "Nothing":
|
||||
receiveChecksOut = True
|
||||
for x in currentReceive:
|
||||
count=0
|
||||
for y in itemsList:
|
||||
if x == y:
|
||||
count+=1
|
||||
if count >= currentReceive.count(x):
|
||||
receiveChecksOut = True
|
||||
else:
|
||||
receiveChecksOut = False
|
||||
|
||||
for x in currentSend:
|
||||
count=0
|
||||
for y in uitemsList:
|
||||
if x == y:
|
||||
count+=1
|
||||
if count >= currentReceive.count(x):
|
||||
sendChecksOut = True
|
||||
else:
|
||||
sendChecksOut = False
|
||||
|
||||
if sendChecksOut and receiveChecksOut:
|
||||
print("User ID #"+str(player)+" accepted User ID #"+str(ctx.author.id)+"'s trade request")
|
||||
now = datetime.now()
|
||||
now = now.strftime('%d/%m/%Y %H:%M:%S')
|
||||
if currentSendText != "Nothing":
|
||||
for x in currentSend:
|
||||
itemSrv.execute("INSERT INTO '"+str(player)+"'(items) VALUES('"+x+"')")
|
||||
itemSrv.execute("DELETE FROM '"+str(ctx.author.id)+"' WHERE items='"+x+"' AND rowid = (SELECT MIN(rowid) FROM '"+str(ctx.author.id)+"' WHERE items='"+x+"')")
|
||||
if currentReceiveText != "Nothing":
|
||||
for x in currentReceive:
|
||||
itemSrv.execute("INSERT INTO '"+str(ctx.author.id)+"'(items) VALUES('"+x+"')")
|
||||
itemSrv.execute("DELETE FROM '"+str(player)+"' WHERE items='"+x+"' AND rowid = (SELECT MIN(rowid) FROM '"+str(player)+"' WHERE items='"+x+"')")
|
||||
conn.commit()
|
||||
tradeID = random.randint(1111111111111111111111,9999999999999999999999)
|
||||
tradeDocument = open("trades.txt","a")
|
||||
tradeDocument.write("Trade ID #"+str(tradeID)+"\n"+str(ctx.author.id)+" sent a trade to "+str(player)+", who accepted on "+now+"\nPlayer sent:\n"+currentSendText+"\nPlayer received:\n"+currentReceiveText+"\n")
|
||||
tradeDocument.close()
|
||||
userNotFound = discord.Embed(title = "", color = discord.Colour.green())
|
||||
userNotFound.add_field(name = '**Trade accepted!**', value = "New items:\n`"+currentReceiveText+"`\n("+now+")")
|
||||
userNotFound.set_footer(text="Trade ID #"+str(tradeID))
|
||||
await user.send(embed=userNotFound)
|
||||
|
||||
userNotFound = discord.Embed(title = "", color = discord.Colour.green())
|
||||
userNotFound.add_field(name = '**You accepted the trade.**', value = "New items:\n`"+currentSendText+"`\n("+now+")")
|
||||
userNotFound.set_footer(text="Trade ID #"+str(tradeID))
|
||||
await userDm.send(embed=userNotFound)
|
||||
else:
|
||||
await confirm.delete()
|
||||
confirmSend = discord.Embed(title = "", color = discord.Colour.red())
|
||||
confirmSend.add_field(name = '**Trade failed.**', value = "Items in the trade are no longer available.")
|
||||
confirm = await user.send(embed=confirmSend, delete_after=10)
|
||||
await confirm.delete()
|
||||
confirmSend = discord.Embed(title = "", color = discord.Colour.red())
|
||||
confirmSend.add_field(name = '**Trade failed.**', value = "Items in the trade are no longer available.")
|
||||
confirm = await userDm.send(embed=confirmSend, delete_after=10)
|
||||
|
||||
else:
|
||||
print("User ID #"+str(player)+" declined User ID #"+str(ctx.author.id)+"'s trade request")
|
||||
userNotFound = discord.Embed(title = "", color = discord.Colour.red())
|
||||
now = datetime.now()
|
||||
now = now.strftime('%d/%m/%Y %H:%M:%S')
|
||||
userNotFound.add_field(name = '**Trade declined.**', value = "You declined "+"<@" + str(ctx.author.id)+">"+"'s trade\n("+now+")")
|
||||
await userDm.send(embed=userNotFound)
|
||||
|
||||
userNotFound = discord.Embed(title = "", color = discord.Colour.red())
|
||||
userNotFound.add_field(name = '**Trade declined.**', value = "<@" + str(player)+"> declined your trade.\n("+now+")")
|
||||
await user.send(embed=userNotFound)
|
||||
else:
|
||||
await confirm.delete()
|
||||
confirmSend = discord.Embed(title = "", color = discord.Colour.red())
|
||||
confirmSend.add_field(name = '**Trade cancelled.**', value = "Your trade did not get sent.")
|
||||
confirm = await user.send(embed=confirmSend, delete_after=10)
|
||||
else:
|
||||
confirmSend = discord.Embed(title = "", color = discord.Colour.red())
|
||||
confirmSend.add_field(name = '**Trade is empty.**', value = "You didn't enter an item to trade\nso there is no point in sending the offer.")
|
||||
confirm = await user.send(embed=confirmSend, delete_after=10)
|
||||
else:
|
||||
confirmSend = discord.Embed(title = "", color = discord.Colour.red())
|
||||
confirmSend.add_field(name = '**You cannot trade with yourself.**', value = "The ID you requested to trade with is your ID.")
|
||||
confirm = await user.send(embed=confirmSend, delete_after=10)
|
||||
except asyncio.TimeoutError:
|
||||
confirmSend = discord.Embed(title = "", color = discord.Colour.red())
|
||||
confirmSend.add_field(name = '**Timed out**', value = "You took too long to respond.")
|
||||
confirm = await user.send(embed=confirmSend, delete_after=10)
|
||||
|
||||
# @trade.error
|
||||
# async def trade_error(ctx,error):
|
||||
# confirmSend = discord.Embed(title = "", color = discord.Colour.red())
|
||||
# confirmSend.add_field(name = '**Something went wrong.**', value = "An unknown error occured while trading.\nPlease try again.")
|
||||
# confirm = await ctx.send(embed=confirmSend, delete_after=5)
|
||||
|
||||
@client.command()
|
||||
async def collectors(ctx):
|
||||
testing = discord.Embed(title = "", color = discord.Colour.green())
|
||||
testing.add_field(name = '**Instructions have been sent to you**', value = "<@" + str(ctx.author.id)+">")
|
||||
await ctx.send(embed=testing, delete_after=5)
|
||||
error = False
|
||||
user= client.get_user(ctx.author.id)
|
||||
itemSrv.execute("SELECT count(name) FROM sqlite_master WHERE type='table' AND name='"+str(ctx.author.id)+"'")
|
||||
if int(itemSrv.fetchone()[0]) != 0:
|
||||
itemSrv.execute("SELECT * FROM '"+str(ctx.author.id)+"' ORDER BY items")
|
||||
uitems = ""
|
||||
uitemsList = []
|
||||
for x in itemSrv.fetchall():
|
||||
uitems = uitems + str(x)[2:-3] + "\n"
|
||||
uitemsList.append(str(x)[2:-3])
|
||||
print("\nUser ID #"+str(ctx.author.id)+" requested to see their inventory")
|
||||
else:
|
||||
print("\nUser ID #"+str(ctx.author.id)+" requested to see their inventory, but they don't have any items")
|
||||
error = True
|
||||
userNotFound = discord.Embed(title = "", color = discord.Colour.red())
|
||||
userNotFound.add_field(name = "**You don't have an inventory yet!\nDo `tf.unbox` to get started!**", value = "<@" + str(ctx.author.id)+">")
|
||||
await user.send(embed=userNotFound, delete_after=10)
|
||||
if error == False:
|
||||
inventory = discord.Embed(title = "", color = discord.Colour.blue())
|
||||
inventory.add_field(name = '**Your inventory:**', value = "<@" + str(ctx.author.id)+">\n\n"+uitems)
|
||||
inventoryEmbed = await user.send(embed=inventory)
|
||||
testing = discord.Embed(title = "", color = discord.Colour.green())
|
||||
testing.add_field(name = '**Collectors**', value = "Please enter items to make into a collectors item.\n(You need 10 unique copies [but not necessarily unique quality])")
|
||||
testingEmbed = await user.send(embed=testing)
|
||||
await asyncio.sleep(0.5)
|
||||
msg = await client.wait_for("message", check=lambda message: message.author == ctx.author and isinstance(message.channel, discord.DMChannel))
|
||||
await testingEmbed.delete()
|
||||
await inventoryEmbed.delete()
|
||||
itemToCollectors = msg.content
|
||||
if msg.content in uitemsList:
|
||||
if uitemsList.count(msg.content) >= 10:
|
||||
count=0
|
||||
textStuff = ""
|
||||
while count != 10:
|
||||
textStuff = textStuff+itemToCollectors+"\n"
|
||||
count+=1
|
||||
print(textStuff)
|
||||
def check(reaction, user):
|
||||
return reaction.message.id == confirm.id
|
||||
confirmSend = discord.Embed(title = "", color = 0xAA0000)
|
||||
confirmSend.add_field(name = '**Please confirm collectors process**', value = "\n**You will get:**\n`Collectors "+itemToCollectors+"`\n**You will lose:**\n`"+textStuff+"`\n\n**This process is irreversible**")
|
||||
confirm = await user.send(embed=confirmSend)
|
||||
await confirm.add_reaction("✅")
|
||||
await confirm.add_reaction("❌")
|
||||
await asyncio.sleep(1)
|
||||
reaction = await client.wait_for("reaction_add",check=check)
|
||||
if str(reaction[0]) == "✅":
|
||||
await confirm.delete()
|
||||
count = 0
|
||||
while count != 10:
|
||||
itemSrv.execute("DELETE FROM '"+str(ctx.author.id)+"' WHERE items='"+itemToCollectors+"' AND rowid = (SELECT MIN(rowid) FROM '"+str(ctx.author.id)+"' WHERE items='"+itemToCollectors+"')")
|
||||
count+=1
|
||||
itemToCollectors = "Collectors "+itemToCollectors
|
||||
itemSrv.execute("INSERT INTO '"+str(ctx.author.id)+"'(items) VALUES('"+itemToCollectors+"')")
|
||||
conn.commit()
|
||||
collectors = discord.Embed(title = "", color = 0xAA0000)
|
||||
collectors.add_field(name = '**Collectors Succeeded**', value = "New item:\n`"+itemToCollectors+"`")
|
||||
await user.send(embed=collectors)
|
||||
else:
|
||||
await confirm.delete()
|
||||
userNotFound = discord.Embed(title = "", color = discord.Colour.red())
|
||||
userNotFound.add_field(name = "**Collectors item failed**", value = "You cancelled the process")
|
||||
await user.send(embed=userNotFound, delete_after=5)
|
||||
else:
|
||||
userNotFound = discord.Embed(title = "", color = discord.Colour.red())
|
||||
userNotFound.add_field(name = "**Collectors item failed**", value = "You don't have 10 unique copies of that item")
|
||||
await user.send(embed=userNotFound, delete_after=5)
|
||||
else:
|
||||
userNotFound = discord.Embed(title = "", color = discord.Colour.red())
|
||||
userNotFound.add_field(name = "**Collectors item failed**", value = "That item isn't in your inventory")
|
||||
await user.send(embed=userNotFound, delete_after=5)
|
||||
|
||||
@client.command()
|
||||
async def give(ctx, args):
|
||||
if int(ctx.author.id) == 495976318274502676 or int(ctx.author.id) == 123968463453552644:
|
||||
player = args
|
||||
userDm = await client.fetch_user(int(player))
|
||||
user= client.get_user(ctx.author.id)
|
||||
userNotFound = discord.Embed(title = "", color = discord.Colour.green())
|
||||
userNotFound.add_field(name = "**Enter item**", value = "Enter item to give")
|
||||
embed = await user.send(embed=userNotFound)
|
||||
await asyncio.sleep(1)
|
||||
msg = await client.wait_for("message", check=lambda message: message.author == ctx.author and isinstance(message.channel, discord.DMChannel))
|
||||
def check(reaction, user):
|
||||
return reaction.message.id == confirm.id
|
||||
confirm = discord.Embed(title = "", color = discord.Colour.green())
|
||||
confirm.add_field(name = '**Please confirm action**', value = "\n**Player to give item to:**\n`"+str(player)+"`\n**Item to give:**\n`"+msg.content+"`")
|
||||
confirm = await user.send(embed=confirm)
|
||||
await embed.delete()
|
||||
await confirm.add_reaction("✅")
|
||||
await confirm.add_reaction("❌")
|
||||
await asyncio.sleep(1)
|
||||
reaction = await client.wait_for("reaction_add",check=check)
|
||||
if str(reaction[0]) == "✅":
|
||||
await confirm.delete()
|
||||
userNotFound = discord.Embed(title = "", color = discord.Colour.teal())
|
||||
userNotFound.add_field(name = '**Support granted you:\n||'+msg.content+'||**', value = "<@" + str(player)+">")
|
||||
embed = await userDm.send(embed=userNotFound)
|
||||
itemSrv.execute("INSERT INTO '"+str(player)+"'(items) VALUES('"+msg.content+"')")
|
||||
conn.commit()
|
||||
else:
|
||||
userNotFound = discord.Embed(title = "", color = discord.Colour.red())
|
||||
userNotFound.add_field(name = "**Cancelled**", value = "Item didnt send.")
|
||||
await user.send(embed=userNotFound, delete_after=5)
|
||||
|
||||
client.run('replaceme')
|
Reference in New Issue
Block a user