1801d2b9fb
UD/AI + Client boots up.
74 lines
3 KiB
Python
74 lines
3 KiB
Python
import urllib.request, urllib.parse, urllib.error
|
|
import os
|
|
from panda3d.core import HTTPClient, Ramfile
|
|
from direct.directnotify import DirectNotifyGlobal
|
|
|
|
class BanManagerAI:
|
|
notify = DirectNotifyGlobal.directNotify.newCategory('BanManagerAI')
|
|
BanUrl = simbase.config.GetString('ban-base-url', 'http://vapps.disl.starwave.com:8005/dis-hold/action/event')
|
|
App = simbase.config.GetString('ban-app-name', 'TTWorldAI')
|
|
Product = simbase.config.GetString('ban-product', 'Toontown')
|
|
EventName = simbase.config.GetString('ban-event-name', 'tthackattempt')
|
|
|
|
def __init__(self):
|
|
self.curBanRequestNum = 0
|
|
self.channels = {}
|
|
self.ramFiles = {}
|
|
|
|
def ban(self, avatarId, dislid, comment):
|
|
parameters = ''
|
|
parameters += 'app=%s' % self.App
|
|
parameters += '&product=%s' % self.Product
|
|
parameters += '&user_id=%s' % dislid
|
|
parameters += '&event_name=%s' % self.EventName
|
|
commentWithAvatarId = 'avId-%s ' % avatarId
|
|
commentWithAvatarId += comment
|
|
parameters += '&comments=%s' % urllib.parse.quote(str(commentWithAvatarId))
|
|
baseUrlToUse = self.BanUrl
|
|
osBaseUrl = os.getenv('BAN_URL')
|
|
if osBaseUrl:
|
|
baseUrlToUse = osBaseUrl
|
|
fullUrl = baseUrlToUse + '?' + parameters
|
|
self.notify.info('ban request %s dislid=%s comment=%s fullUrl=%s' % (self.curBanRequestNum,
|
|
dislid,
|
|
comment,
|
|
fullUrl))
|
|
simbase.air.writeServerEvent('ban_request', avatarId, '%s|%s|%s' % (dislid, comment, fullUrl))
|
|
if simbase.config.GetBool('do-actual-ban', True):
|
|
newTaskName = 'ban-task-%d' % self.curBanRequestNum
|
|
newTask = taskMgr.add(self.doBanUrlTask, newTaskName)
|
|
newTask.banRequestNum = self.curBanRequestNum
|
|
http = HTTPClient.getGlobalPtr()
|
|
channel = http.makeChannel(False)
|
|
self.channels[self.curBanRequestNum] = channel
|
|
rf = Ramfile()
|
|
self.ramFiles[self.curBanRequestNum] = rf
|
|
channel.beginGetDocument(fullUrl)
|
|
channel.downloadToRam(rf)
|
|
self.curBanRequestNum += 1
|
|
|
|
def cleanupBanReq(self, banReq):
|
|
channel = self.channels.get(banReq)
|
|
if channel:
|
|
del self.channels[banReq]
|
|
ramfile = self.ramFiles.get(banReq)
|
|
if ramfile:
|
|
del self.ramFiles[banReq]
|
|
|
|
def doBanUrlTask(self, task):
|
|
banReq = task.banRequestNum
|
|
channel = self.channels.get(banReq)
|
|
if channel:
|
|
if channel.run():
|
|
return task.cont
|
|
else:
|
|
self.notify.warning('no channel for ban req %s' % banReq)
|
|
self.cleanupBanReq(banReq)
|
|
return task.done
|
|
result = ''
|
|
ramfile = self.ramFiles.get(banReq)
|
|
if ramfile:
|
|
result = ramfile.getData()
|
|
self.notify.info('done processing ban request %s, ramFile=%s' % (banReq, result))
|
|
self.cleanupBanReq(banReq)
|
|
return task.done
|