oldschool-toontown/otp/ai/BanManagerAI.py
Little Cat 1801d2b9fb
all: replace pandac.PandaModules imports.
UD/AI + Client boots up.
2022-12-16 20:40:57 -04:00

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