commit
180baf19d0
@ -0,0 +1,3 @@
|
|||||||
|
.env
|
||||||
|
env
|
||||||
|
venv/*
|
||||||
@ -0,0 +1,120 @@
|
|||||||
|
import requests
|
||||||
|
import telegram
|
||||||
|
import time
|
||||||
|
import os
|
||||||
|
import pause, datetime
|
||||||
|
from threading import Thread
|
||||||
|
|
||||||
|
bot = telegram.Bot(token=os.environ["TELEGRAM_API_KEY"])
|
||||||
|
chatid = os.environ["TELEGRAM_CHAT_ID"]
|
||||||
|
apikey = os.environ["ETHERSCAN_API_KEY"]
|
||||||
|
chainlink = '0x514910771af9ca656af840dff83e8264ecf986ca'
|
||||||
|
url = 'https://etherscan.io/token/'+chainlink+'?a='
|
||||||
|
whale = {
|
||||||
|
'0x75398564ce69b7498da10a11ab06fd8ff549001c': 0,
|
||||||
|
'0x5560d001f977df5e49ead7ab0bdd437c4ee3a99e': 0,
|
||||||
|
'0xbe6977e08d4479c0a6777539ae0e8fa27be4e9d6': 0,
|
||||||
|
'0xe0362f7445e3203a496f6f8b3d51cbb413b69be2': 0,
|
||||||
|
'0xdad22a85ef8310ef582b70e4051e543f3153e11f': 0,
|
||||||
|
'0xf37c348b7d19b17b29cd5cfa64cfa48e2d6eb8db': 0
|
||||||
|
}
|
||||||
|
full = "50,000,000"
|
||||||
|
prevWhale = whale.copy()
|
||||||
|
|
||||||
|
def startDailyCheckup():
|
||||||
|
updateQuantities()
|
||||||
|
prevWhale = whale.copy()
|
||||||
|
while True:
|
||||||
|
checkDaily(total())
|
||||||
|
later = datetime.datetime.now() + datetime.timedelta(days=1)
|
||||||
|
pause.until(later)
|
||||||
|
|
||||||
|
def startDumpWatcher():
|
||||||
|
updateQuantities()
|
||||||
|
prevWhale = whale.copy()
|
||||||
|
while True:
|
||||||
|
updateQuantities()
|
||||||
|
dumpedAmount = checkDumpAmount()
|
||||||
|
if dumpedAmount > 0:
|
||||||
|
dumpedWallet = checkDumpWallet()
|
||||||
|
alert(dumpedAmount, dumpedWallet)
|
||||||
|
prevWhale = whale.copy()
|
||||||
|
time.sleep(5)
|
||||||
|
|
||||||
|
def checkDumpAmount():
|
||||||
|
dumped = 0
|
||||||
|
for w in whale.keys():
|
||||||
|
if whale[w] < prevWhale[w]:
|
||||||
|
dumped = dumped +(prevWhale[w] - whale[w])
|
||||||
|
return dumped
|
||||||
|
|
||||||
|
def checkDumpWallet():
|
||||||
|
dumped = []
|
||||||
|
count = 1
|
||||||
|
for w in whale.keys():
|
||||||
|
if whale[w] < prevWhale[w]:
|
||||||
|
dumped.append(str(count))
|
||||||
|
count = count + 1
|
||||||
|
return dumped
|
||||||
|
|
||||||
|
def alert(dumpedAmount, dumpedWallet):
|
||||||
|
dumpedAmount = "{:,}".format(int(dumpedAmount))
|
||||||
|
text = "😱 Sergey is dumping "+ str(dumpedAmount) +" links from wallet #"+','.join(dumpedWallet) +"!\n\n"
|
||||||
|
texts = []
|
||||||
|
count = 1
|
||||||
|
for w in whale.keys():
|
||||||
|
if str(count) in dumpedWallet:
|
||||||
|
texts.append("☑️ Wallet #"+str(count)+"\n"+url+w+"\n"+"("+"{:,}".format(int(whale[w]))+"/"+full+")\n")
|
||||||
|
count = count + 1
|
||||||
|
texts = "\n".join(texts)
|
||||||
|
text = text + texts
|
||||||
|
|
||||||
|
bot.sendMessage(chat_id=chatid, text=text)
|
||||||
|
print(text)
|
||||||
|
|
||||||
|
def checkDaily(total):
|
||||||
|
total = "{:,}".format(int(total))
|
||||||
|
text = "🤓 Daily check up: Total of " + total + " links.\n\n"
|
||||||
|
texts = []
|
||||||
|
count = 1
|
||||||
|
for w in whale.keys():
|
||||||
|
texts.append("☑️ Wallet #"+str(count)+"\n"+url+w+"\n"+"("+"{:,}".format(int(whale[w]))+"/"+full+")\n")
|
||||||
|
count = count + 1
|
||||||
|
texts = "\n".join(texts)
|
||||||
|
text = text + texts
|
||||||
|
bot.sendMessage(chat_id=chatid, text=text)
|
||||||
|
print(text)
|
||||||
|
|
||||||
|
def total():
|
||||||
|
total = 0
|
||||||
|
for w in whale.keys():
|
||||||
|
total = whale[w] + total
|
||||||
|
return total
|
||||||
|
|
||||||
|
def updateQuantities():
|
||||||
|
for w in whale.keys():
|
||||||
|
r = requests.get('https://api.etherscan.io/api?module=account&action=tokenbalance&contractaddress='+chainlink+'&address='+w+'&tag=latest&apikey='+apikey)
|
||||||
|
time.sleep(0.5)
|
||||||
|
whale[w] = (float(r.json()['result']) * 0.000000000000000001)
|
||||||
|
|
||||||
|
|
||||||
|
class DumpWatcher(Thread):
|
||||||
|
def __init__(self):
|
||||||
|
Thread.__init__(self)
|
||||||
|
self.daemon = True
|
||||||
|
self.start()
|
||||||
|
def run(self):
|
||||||
|
startDumpWatcher()
|
||||||
|
|
||||||
|
class DailyCheckup(Thread):
|
||||||
|
def __init__(self):
|
||||||
|
Thread.__init__(self)
|
||||||
|
self.daemon = True
|
||||||
|
self.start()
|
||||||
|
def run(self):
|
||||||
|
startDailyCheckup()
|
||||||
|
|
||||||
|
DumpWatcher()
|
||||||
|
DailyCheckup()
|
||||||
|
while True:
|
||||||
|
pass
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
APScheduler==3.6.3
|
||||||
|
certifi==2020.12.5
|
||||||
|
chardet==4.0.0
|
||||||
|
idna==2.10
|
||||||
|
pause==0.3
|
||||||
|
python-telegram-bot==13.3
|
||||||
|
pytz==2021.1
|
||||||
|
requests==2.25.1
|
||||||
|
requests-cache==0.5.2
|
||||||
|
six==1.15.0
|
||||||
|
tornado==6.1
|
||||||
|
tzlocal==2.1
|
||||||
|
urllib3==1.26.3
|
||||||
Loading…
Reference in new issue