annotate termbanator.py @ 0:f570713a7d31 default tip

start termbanator
author drewp@bigasterisk.com
date Sun, 25 Jun 2023 20:01:38 -0700
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
1 import datetime
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
2 import os
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
3 import pdb
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
4 import subprocess
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
5 import sys
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
6 import time
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
7 import logging
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
8 import traceback
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
9 from typing import Any, Optional, Tuple
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
10
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
11 from javascript import On, Once, console, require
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
12
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
13 logging.basicConfig(
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
14 level=logging.INFO,
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
15 format="%(asctime)s [%(levelname)s] [line %(lineno)s] %(message)s")
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
16 log = logging.getLogger()
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
17
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
18 mineflayer = require("mineflayer", "latest")
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
19 Vec3 = require("vec3").Vec3
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
20 registry = require('prismarine-registry')('1.19.3')
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
21 Block = require("prismarine-block")(registry)
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
22
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
23 host, port, rconPort = ('bang', 25665, 25675)
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
24
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
25 mfbot = mineflayer.createBot({
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
26 "host": host,
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
27 "port": port,
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
28 "username": 'termbanator',
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
29 'auth': 'offline',
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
30 'version': '1.19.3',
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
31 })
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
32 log.info('created')
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
33
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
34
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
35 class Player:
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
36
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
37 def __init__(self, player):
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
38 self._p = player
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
39 if self._p is None:
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
40 raise TypeError(f'player was {player}')
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
41 self.username = self._p.username
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
42
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
43 def __repr__(self):
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
44 return f'Player({self.username})'
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
45
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
46 def position(self) -> Tuple[float, float, float]:
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
47 if self._p.entity is None:
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
48 return getDistantPlayerPos(self.username)
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
49 pos = self._p.entity.position
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
50 return (round(pos.x, 2), round(pos.y, 2), round(pos.z, 2))
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
51
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
52
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
53 def getDistantPlayerPos(username) -> Tuple[float, float, float]:
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
54 out = subprocess.check_output([
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
55 "/home/drewp/Downloads/mcrcon/mcrcon", "-H", host, "-P",
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
56 str(rconPort), "-p", "111", f"/data get entity @p[name={username}] Pos"
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
57 ],
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
58 encoding='utf8')
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
59 words = out.split("the following entity data: ")[1].split('[')[1].split(
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
60 ']')[0].split(',')
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
61 return tuple(round(float(v.rstrip('d')), 2) for v in words)
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
62
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
63
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
64 class Bot:
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
65
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
66 def __init__(self, mineflayer_bot: Any):
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
67 self._bot = mineflayer_bot
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
68 self.me = Player(self._bot)
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
69 mcData = require('minecraft-data')(self._bot.version)
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
70 self.pf_module = require('mineflayer-pathfinder')
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
71 self._bot.loadPlugin(self.pf_module.pathfinder)
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
72
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
73 self.movements = self.pf_module.Movements(self._bot, mcData)
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
74 self.movements.allow1by1towers = True
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
75 self.movements.canDig = False
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
76 self.movements.scafoldingBlocks.push(
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
77 self._bot.registry.itemsByName['dirt'].id)
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
78 self.movements.maxDropDown = 300
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
79 self.movements.allowFreeMotion = True
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
80 self.movements.canOpenDoors = True
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
81
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
82 self._bot.removeAllListeners('chat')
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
83
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
84 self.walkStartTime = 0
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
85 self.waitUntil = time.time() + 2
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
86 self.target: Optional[Player] = None
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
87 self.announcedToTarget = False
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
88
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
89 def chat(self, txt):
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
90 log.info(f'say {txt!r}')
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
91 self._bot.chat(txt)
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
92
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
93 def teleport(self, x, y, z):
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
94 self._bot.chat(f'/tp {x} {y} {z}')
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
95
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
96 def setPathfinderGoal(self, x, y, z, rng):
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
97 pos = self.me.position()
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
98 log.info(f'now at {pos}, pathfinding to {x} {y} {z} {rng=}')
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
99 goal = self.pf_module.goals.GoalNear(x, y, z, rng)
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
100 self._bot.pathfinder.setMovements(self.movements)
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
101 self._bot.pathfinder.setGoal(goal)
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
102 self.walkStartTime = time.time()
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
103
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
104 def isMoving(self) -> bool:
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
105 return self._bot.pathfinder.isMoving()
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
106
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
107 def stopPathfinder(self):
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
108 log.info("Stopping pathfinder")
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
109 self._bot.pathfinder.stop()
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
110
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
111 def ban(self, player: Player, reason: str = "good night"):
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
112 self.chat(f'/ban {player.username} {reason}')
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
113
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
114 def quit(self):
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
115 self._bot.quit('done')
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
116 os.kill(os.getpid(), 15)
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
117
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
118 ########## below here doesn't use self._bot ##########
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
119
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
120 def onLogin(self):
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
121 self.chat("Beware the termbanator")
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
122 # self.teleport(-160, 200, 280)
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
123
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
124 def walkTo(self, player: Player):
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
125 self.target = player
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
126 self.announcedToTarget = False
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
127 log.info(f'walk to {self.target}')
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
128 pos = player.position()
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
129 self.setPathfinderGoal(pos[0], pos[1], pos[2], rng=3)
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
130
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
131 def stillWalking(self, walkMinTime=3):
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
132 if self.walkStartTime and time.time(
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
133 ) < self.walkStartTime + walkMinTime:
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
134 return True
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
135 return self.isMoving()
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
136
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
137 def update(self, waitBetweenTargets=9):
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
138 try:
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
139 now = time.time()
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
140
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
141 if self.waitUntil > 0 and now < self.waitUntil:
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
142 log.debug(f'waiting {round(self.waitUntil-now, 1)} more sec')
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
143 return
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
144 self.waitUntil = 0
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
145
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
146 if self.stillWalking():
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
147 pos = self.me.position()
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
148 log.info(f'still moving to {self.target}: {pos=}')
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
149 return
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
150
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
151 self.stopPathfinder()
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
152
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
153 if self.target:
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
154 if not self.announcedToTarget:
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
155 minsLeft = round(
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
156 (self.getTodayEndTime() - time.time()) / 60, 1)
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
157
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
158 if minsLeft > 0:
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
159 mins = 'minutes' if minsLeft != 1 else 'minute'
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
160 self.chat(
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
161 f'hi {self.target.username} - {minsLeft} {mins} left'
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
162 )
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
163 else:
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
164 self.ban(self.target)
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
165
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
166 self.announcedToTarget = True
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
167 self.sleepFor(waitBetweenTargets)
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
168 return
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
169
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
170 log.info('follow next player')
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
171
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
172 next = players.after(self.target)
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
173 try:
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
174 self.walkTo(next)
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
175 except ValueError as e:
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
176 log.warning(repr(e))
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
177 self.sleepFor(8)
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
178 except EveryoneGone:
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
179 bot.quit()
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
180 except Exception as e:
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
181 traceback.print_exc()
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
182 log.warning(repr(e))
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
183 self.sleepFor(60)
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
184
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
185 def getTodayEndTime(self) -> float:
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
186 current_date = datetime.datetime.now().date()
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
187 end_datetime = datetime.datetime.combine(current_date,
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
188 datetime.time(19, 0))
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
189
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
190 return end_datetime.timestamp()
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
191
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
192 def sleepFor(self, sec):
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
193 log.info(f'sleeping for {sec}')
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
194 self.waitUntil = time.time() + sec
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
195
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
196
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
197 class EveryoneGone(ValueError):
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
198 pass
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
199
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
200
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
201 class Players:
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
202
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
203 def __init__(self, mineflayer_bot: Any):
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
204 self._b = mineflayer_bot
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
205
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
206 def byName(self, name) -> Player:
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
207 # only works for 'nearby' players- useless
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
208 return Player(self._b.players[name])
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
209
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
210 def after(self, player: Optional[Player]) -> Player:
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
211 otherPlayers = [p for p in self._b.players if p != 'termbanator']
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
212 log.info(f'{otherPlayers=}')
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
213 if not otherPlayers:
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
214 log.info('everyone is gone')
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
215 raise EveryoneGone()
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
216 # import pdb;pdb.set_trace()
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
217 prevPlayer = player.username if player else None
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
218
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
219 try:
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
220 i = otherPlayers.index(prevPlayer)
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
221 except (AttributeError, ValueError):
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
222 i = 0
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
223 i = (i + 1) % len(otherPlayers)
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
224
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
225 return self.byName(otherPlayers[i])
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
226
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
227
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
228 bot = Bot(mfbot)
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
229 players = Players(mfbot)
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
230
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
231
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
232 @On(mfbot, "login")
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
233 def login(this):
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
234 bot.onLogin()
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
235
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
236
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
237 @On(mfbot, 'chat')
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
238 def handleMsg(this, sender, message, *args):
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
239 if sender and (sender != 'termbanator'):
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
240 pass
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
241
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
242
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
243 @On(mfbot, 'time')
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
244 def onTime(this):
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
245 bot.update()
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
246
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
247
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
248 @On(mfbot, 'message')
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
249 def message(emitter, msg, *args):
f570713a7d31 start termbanator
drewp@bigasterisk.com
parents:
diff changeset
250 log.info(f'got msg event {msg.toString()}')