Browse Source

Simplify state listeners

pull/3/head
Andrei 9 years ago
parent
commit
0ea8f1f270
  1. 14
      README.md
  2. 49
      disco/state.py
  3. 1
      requirements.txt

14
README.md

@ -1,11 +1,11 @@
# disco
A Discord Python bot built to be easy to use and scale.
A Pythonic Discord library built for simplicity and extendability. Supports 2.x/3.x versions of Python. Uses gevent.
## TODOS
- Permissions/Roles support
- Plugin/Library reloading
- Abstract GatewayClient out into the WebsocketProcessProxy
- Abstract VoiceClients to run in a seperate process
- Voice Support
- permissions support
- flesh out API client
- storage/database/config
- flesh out type methods
- plugin reload
- voice support

49
disco/state.py

@ -1,3 +1,5 @@
import inflection
from collections import defaultdict, deque, namedtuple
from weakref import WeakValueDictionary
@ -15,9 +17,16 @@ class StateConfig(object):
class State(object):
EVENTS = [
'Ready', 'GuildCreate', 'GuildUpdate', 'GuildDelete', 'GuildMemberAdd', 'GuildMemberRemove',
'GuildMemberUpdate', 'GuildMemberChunk', 'GuildRoleCreate', 'GuildRoleUpdate', 'GuildRoleDelete',
'ChannelCreate', 'ChannelUpdate', 'ChannelDelete', 'VoiceStateUpdate'
]
def __init__(self, client, config=None):
self.client = client
self.config = config or StateConfig()
self.listeners = []
self.me = None
@ -27,36 +36,20 @@ class State(object):
self.users = WeakValueDictionary()
self.voice_states = WeakValueDictionary()
self.client.events.on('Ready', self.on_ready)
self.messages = defaultdict(lambda: deque(maxlen=self.config.track_messages_size))
if self.config.track_messages:
self.client.events.on('MessageCreate', self.on_message_create)
self.client.events.on('MessageDelete', self.on_message_delete)
# Guilds
self.client.events.on('GuildCreate', self.on_guild_create)
self.client.events.on('GuildUpdate', self.on_guild_update)
self.client.events.on('GuildDelete', self.on_guild_delete)
# Guild members
self.client.events.on('GuildMemberAdd', self.on_guild_member_add)
self.client.events.on('GuildMemberRemove', self.on_guild_member_remove)
self.client.events.on('GuildMemberUpdate', self.on_guild_member_update)
self.client.events.on('GuildMemberChunk', self.on_guild_member_chunk)
# Guild roles
self.client.events.on('GuildRoleCreate', self.on_guild_role_create)
self.client.events.on('GuildRoleUpdate', self.on_guild_role_update)
self.client.events.on('GuildROleDelete', self.on_guild_role_delete)
# Channels
self.client.events.on('ChannelCreate', self.on_channel_create)
self.client.events.on('ChannelUpdate', self.on_channel_update)
self.client.events.on('ChannelDelete', self.on_channel_delete)
# Voice states
self.client.events.on('VoiceStateUpdate', self.on_voice_state_update)
self.EVENTS += ['MessageCreate', 'MessageDelete']
self.bind()
def unbind(self):
map(lambda k: k.unbind(), self.listeners)
self.listeners = []
def bind(self):
for event in self.EVENTS:
func = 'on_' + inflection.underscore(event)
self.listeners.append(self.client.events.on(event, getattr(self, func)))
def on_ready(self, event):
self.me = event.user

1
requirements.txt

@ -5,6 +5,7 @@ cryptography==1.5
enum34==1.1.6
Flask==0.11.1
gevent==1.1.2
gipc==0.6.0
greenlet==0.4.10
holster==1.0.0
idna==2.1

Loading…
Cancel
Save