Example #1
0
    def __init__(self, config):
        super(Client, self).__init__()
        self.config = config

        self.events = Emitter()
        self.packets = Emitter()

        self.api = APIClient(self.config.token, self)
        self.gw = GatewayClient(self, self.config.max_reconnects,
                                self.config.encoder)
        self.state = State(self, StateConfig(self.config.get('state', {})))

        if self.config.manhole_enable:
            self.manhole_locals = {
                'client': self,
                'state': self.state,
                'api': self.api,
                'gw': self.gw,
            }

            self.manhole = DiscoBackdoorServer(
                self.config.manhole_bind,
                banner='Disco Manhole',
                localf=lambda: self.manhole_locals)
            self.manhole.start()
Example #2
0
 def __init__(self, config):
     self.config = config
     self.client = APIClient(config.token)
     self.shards = {}
     self.config.shard_count = self.client.gateway_bot_get()['shards']
     if self.config.shard_count > 1:
         self.config.shard_count = 10
Example #3
0
def main():
    # Initialize the client
    print("Starting up...")
    # client = discord.Client()
    client = APIClient(settings.BOT_TOKEN)

    # Define event handlers for the client
    # on_ready may be called multiple times in the event of a reconnect,
    # hence the running flag
    @client.event
    async def on_ready():
        if this.running:
            return

        this.running = True

        # Set the playing status
        if settings.NOW_PLAYING:
            print("Setting NP game", flush=True)
            await client.change_presence(game=discord.Game(
                name=settings.NOW_PLAYING))
        print("Logged in!", flush=True)

        # Load all events
        print("Loading events...", flush=True)
        n_ev = 0
        for ev in BaseEvent.__subclasses__():
            event = ev()
            sched.add_job(event.run,
                          'interval', (client, ),
                          minutes=event.interval_minutes)
            n_ev += 1
        sched.start()
        print(f"{n_ev} events loaded", flush=True)

    # The message handler for both new message and edits
    async def common_handle_message(message):
        text = message.content
        if text.startswith(
                settings.COMMAND_PREFIX) and text != settings.COMMAND_PREFIX:
            cmd_split = text[len(settings.COMMAND_PREFIX):].split()
            try:
                await message_handler.handle_command(cmd_split[0].lower(),
                                                     cmd_split[1:], message,
                                                     client)
            except:
                print("Error while handling message", flush=True)
                raise

    @client.event
    async def on_message(message):
        await common_handle_message(message)

    @client.event
    async def on_message_edit(before, after):
        await common_handle_message(after)

    # Finally, set the bot running
    client.run(settings.BOT_TOKEN)
Example #4
0
 def __init__(self, settings, client=None, max_channels_per_category=50):
     """Accepts Django settings object and optional Discord APIClient (for testing)."""
     self._client = client or APIClient(settings.DISCORD_API_TOKEN)
     self._guild_id = settings.DISCORD_GUILD_ID
     self._puzzle_category_name = settings.DISCORD_PUZZLE_CATEGORY
     self._archived_category_name = settings.DISCORD_ARCHIVE_CATEGORY
     self._puzzle_announcements_id = settings.DISCORD_PUZZLE_ANNOUNCEMENTS_CHANNEL
     self._max_channels_per_category = max_channels_per_category
Example #5
0
    def execute_url(cls, url, **kwargs):
        from disco.api.client import APIClient

        results = WEBHOOK_URL_RE.findall(url)
        if len(results) != 1:
            return Exception('Invalid Webhook URL')

        return cls(id=results[0][0],
                   token=results[0][1]).execute(client=APIClient(None),
                                                **kwargs)
Example #6
0
 def __init__(self):
     self.client = None
     self.avatars = {}
     if self.TOKEN and not settings.IS_TEST:
         self.client = APIClient(self.TOKEN)
         members = self.client.guilds_members_list(self.GUILD).values()
         for member in members:
             self.avatars[member.user.username] = member.user.avatar_url
         for member in members:
             self.avatars[member.name] = member.user.avatar_url
Example #7
0
def guild_delete(guild):
    if not g.user.admin:
        return '', 401

    from disco.api.client import APIClient
    client = APIClient(current_app.config['token'])
    client.users_me_guilds_delete(guild.guild_id)

    guild.enabled = False
    guild.save()

    return '', 204
Example #8
0
 def __init__(self, settings, client=None, max_channels_per_category=50):
     """Accepts Django settings object and optional Discord APIClient (for testing)."""
     self._client = client or APIClient(settings.DISCORD_API_TOKEN)
     self._max_channels_per_category = max_channels_per_category
Example #9
0
 def __init__(self):
     self.client = None
     self.avatars = None
     if self.TOKEN and not settings.IS_TEST:
         self.client = APIClient(self.TOKEN)
Example #10
0
 def __init__(self):
     self.api = APIClient(settings.DISCORD_BOT_TOKEN)
     self.guild = self.api.http(Routes.USERS_ME_GUILDS_LIST).json()[0]
def create_client():
    return APIClient(env("DISCORD_TOKEN", default=""))