mirror of
https://gitlab.com/0xDEAD10CC/pycoindroid
synced 2025-07-05 20:41:08 -07:00
154 lines
7 KiB
Python
154 lines
7 KiB
Python
import logging, telepot
|
|
from CoindroidAPI import CoindroidAPITask
|
|
from gevent import sleep
|
|
from collections import namedtuple
|
|
|
|
|
|
# from twilio.rest import Client as TwilioClient
|
|
|
|
|
|
class DroidControllerTask(CoindroidAPITask):
|
|
def __init__(self, **kwargs):
|
|
super(DroidControllerTask, self).__init__(**kwargs)
|
|
self.logger = logging.getLogger(self.__class__.__name__)
|
|
self.droidTuple = namedtuple("droidTuple",
|
|
["block_height", "action_id",
|
|
"action_type", "player_id",
|
|
"player_username",
|
|
"droid_id", "droid_name", "targetID",
|
|
"targetName", "healthChangedFrom",
|
|
"healthChangedTo", "netDamageTaken",
|
|
"experienceEarned",
|
|
"grossDamagePerformed",
|
|
"experienceChangedFrom",
|
|
"experienceChangedTo",
|
|
])
|
|
# twilioAccount = "ACdfcd2b529db83954e8a0041796072960"
|
|
# twilioToken = "ab9b98a0b3da8a728d14774192773af2"
|
|
# try:
|
|
# self.twilioClient = TwilioClient(twilioAccount, twilioToken)
|
|
# except:
|
|
# self.logger.exception("Unable to initialize Twilio client!")
|
|
try:
|
|
self.telegramBot = telepot.Bot(
|
|
"382491836:AAGj8Hf5HNAwcukRrjQ3Eyv7TSa2YvGax5s")
|
|
except:
|
|
self.logger.exception("Unable to initialize Telegram bot!")
|
|
|
|
|
|
def getDroidStats(self, event):
|
|
targetID = None
|
|
targetName = None
|
|
try:
|
|
targetID = event.get("target").get("id")
|
|
targetName = event.get("target").get("name")
|
|
except AttributeError:
|
|
self.logger.exception("Unknown target!")
|
|
return {}
|
|
return {
|
|
"block_height": event.get("block_height"),
|
|
"action_id": event.get("action_id"),
|
|
"action_type": event.get("action_type"),
|
|
"player_id": event.get("player_id"),
|
|
"player_username": event.get("player_username"),
|
|
"droid_id": event.get("droid_id"),
|
|
"droid_name": event.get("droid_name"),
|
|
"targetID": targetID,
|
|
"targetName": targetName,
|
|
"healthChangedFrom": next(
|
|
(x.get("value_from") for x in event.get("outcomes") if
|
|
x.get("outcome_type") == "Health changed"),
|
|
None),
|
|
"healthChangedTo": next(
|
|
(x.get("value_to") for x in event.get("outcomes") if
|
|
x.get("outcome_type") == "Health changed"),
|
|
None),
|
|
"netDamageTaken": next(
|
|
(x.get("value_to") for x in event.get("outcomes") if
|
|
x.get("outcome_type") == "Net damage taken"),
|
|
None),
|
|
"experienceEarned": next(
|
|
(x.get("value_to") for x in event.get("outcomes") if
|
|
x.get("outcome_type") == "Experience earned"),
|
|
None),
|
|
"grossDamagePerformed": next(
|
|
(x.get("value_to") for x in event.get("outcomes") if
|
|
x.get("outcome_type") == "Gross damage performed"), None),
|
|
"experienceChangedFrom": next(
|
|
(x.get("value_from") for x in event.get("outcomes") if
|
|
x.get("outcome_type") == "Experience changed"), None),
|
|
"experienceChangedTo": next(
|
|
(x.get("value_to") for x in event.get("outcomes") if
|
|
x.get("outcome_type") == "Experience changed"),
|
|
None)
|
|
}
|
|
|
|
def sendSMS(self, from_="+14159037708", **kwargs):
|
|
try:
|
|
self.twilioClient.messages.create(from_=from_, **kwargs)
|
|
except:
|
|
self.logger.exception("Unable to send SMS!!")
|
|
pass
|
|
|
|
def genMessage(self, stats):
|
|
baseMessage = "{block_height}:{action_id} - " \
|
|
"{player_username}({player_id}):{droid_name}(" \
|
|
"{droid_id}) did {action_type} on " \
|
|
"{targetName}({targetID}).".format(**stats)
|
|
message = [baseMessage]
|
|
if stats["healthChangedFrom"] or stats["healthChangedTo"]:
|
|
message.append(
|
|
"Health changed from {healthChangedFrom} to " \
|
|
"{healthChangedTo}.".format(
|
|
**stats))
|
|
if stats["netDamageTaken"]:
|
|
message.append("{netDamageTaken} damage was taken.".format(**stats))
|
|
if stats["experienceEarned"]:
|
|
message.append(
|
|
"{experienceEarned} experience was earned.".format(**stats))
|
|
if stats["grossDamagePerformed"]:
|
|
message.append(
|
|
"{grossDamagePerformed} gross damage was performed.".format(
|
|
**stats))
|
|
if stats["experienceChangedFrom"] or stats["experienceChangedTo"]:
|
|
message.append(
|
|
"Experience changed from {experienceChangedFrom} to " \
|
|
"{experienceChangedTo}.".format(
|
|
**stats))
|
|
message = "\n".join(message)
|
|
return message
|
|
|
|
def _run(self):
|
|
self.logger.info("Running {}".format(self.__class__.__name__))
|
|
while True:
|
|
if not self.droidControllerQueue.empty():
|
|
self.logger.debug(
|
|
"{} woken up...".format(self.__class__.__name__))
|
|
events = self.droidControllerQueue.get()
|
|
for event in events:
|
|
stats = self.getDroidStats(event)
|
|
message = self.genMessage(stats)
|
|
self.logger.info(message)
|
|
if (stats["droid_name"] == "bob") or (
|
|
stats["targetName"] == "bob") or (
|
|
stats["droid_id"] == 160) or (
|
|
stats["targetID"] == 160):
|
|
self.logger.debug(
|
|
"bob's got an action!!! sending sms!!")
|
|
# if self.twilioClient:
|
|
# self.sendSMS(to="+14088963912", body=message)
|
|
if self.telegramBot:
|
|
self.telegramBot.sendMessage(-228315434, message)
|
|
if (stats["droid_name"] == "Mabuhay") or (
|
|
stats["targetName"] == "Mabuhay") or (
|
|
stats["droid_id"] == 165) or stats[
|
|
"targetID"] == 165:
|
|
self.logger.debug(
|
|
"Mabuhay's got an action!!! sending sms!!")
|
|
# if self.twilioClient:
|
|
# self.sendSMS(to="+14086342295", body=message)
|
|
if self.telegramBot:
|
|
self.telegramBot.sendMessage(-228315434, message)
|
|
else:
|
|
self.logger.debug("Queue is empty... No action to take...")
|
|
sleep(self.pause)
|