Beispiel #1
0
    async def nfo(self, ctx, sub, ident):
        """Create a DNS entry from an NFO name
        sub = DNS prefix, the part before .scgc.xyz
        ident = NFO Prefix/Identifier, the part before .game.nfoservers.com"""
        if checks.role_or_permissions(
                ctx, lambda r: r.name.lower() in
            ('monkey', 'server manager', 'owner')) is False:
            return False

        ip = await self.resolver.query("{}.game.nfoservers.com".format(ident),
                                       'A')
        client = dns.Client(project=self.settings["project"][0],
                            credentials=self.creds)
        zone = client.zone(self.settings['zone'][0],
                           self.settings['domain'][0])
        record_set = zone.resource_record_set(
            '{}.{}.'.format(sub, self.settings['domain'][0]), 'A', 60 * 60,
            [ip[0].host])
        changes = zone.changes()
        changes.add_record_set(record_set)
        changes.create()
        while changes.status != 'done':
            asyncio.sleep(60)
            changes.reload()

        self.unk[sub] = {'dns': sub, 'nfo': ident, 'port': 0, 'name': 'unk'}
        dataIO.save_json(os.path.join("data", "dns", "unk.json"), self.unk)
        self.settings['last'] = int(datetime.datetime.utcnow().timestamp())
        dataIO.save_json(os.path.join("data", "dns", "settings.json"),
                         self.settings)
        await self.bot.say(
            "DNS Entry Created. Don't forget to update the server list, !serverlist edit {}"
            .format(sub))
Beispiel #2
0
    async def a(self, ctx, sub, ip):
        """Create or Modify a DNS A Record
        sub = DNS prefix, the part before .scgc.xyz
        ip = IP the record should point to"""
        if checks.role_or_permissions(
                ctx, lambda r: r.name.lower() in
            ('monkey', 'server manager', 'owner')) is False:
            return False

        client = dns.Client(project=self.settings["project"][0],
                            credentials=self.creds)
        zone = client.zone(self.settings['zone'][0],
                           self.settings['domain'][0])
        record_set = zone.resource_record_set(
            '{}.{}.'.format(sub, self.settings['domain'][0]), 'A', 60 * 60 * 2,
            [ip])
        changes = zone.changes()
        changes.add_record_set(record_set)
        changes.create()
        while changes.status != 'done':
            asyncio.sleep(60)
            changes.reload()

        self.unk[sub] = {'dns': sub, 'nfo': ip, 'port': 0, 'name': 'unk'}
        dataIO.save_json(os.path.join("data", "dns", "unk.json"), self.unk)
        self.settings['last'] = int(datetime.datetime.utcnow().timestamp())
        dataIO.save_json(os.path.join("data", "dns", "settings.json"),
                         self.settings)
        await self.bot.say(
            "DNS Entry Created. Don't forget to update the server list if needed, !serverlist edit {}"
            .format(sub))
Beispiel #3
0
    async def _dns(self, ctx):
        """Manage the DNS entries"""
        if checks.role_or_permissions(
                ctx, lambda r: r.name.lower() in
            ('monkey', 'server manager', 'owner')) is False:
            return False

        if ctx.invoked_subcommand is None:
            server = ctx.message.server
            await send_cmd_help(ctx)
Beispiel #4
0
    async def chromosomes(self, ctx, *, member: discord.Member = None):
        """Check your or another users chromosomes.
        Will not display others' balances if inventory hiding is enabled."""
        dest = ctx.channel
        if member is None:
            member = ctx.author
        gd = await self.bot.db.get_guild_data(ctx.guild)
        try:
            is_mod = checks.role_or_permissions(
                ctx,
                lambda r: r.name in ('Bot Mod', 'Bot Admin', 'Bot Moderator'),
                manage_server=True)
        except:
            is_mod = False

        hide = gd.get("hideinv", False)

        if not is_mod and hide:
            member = ctx.author

        if hide:
            dest = ctx.author

        bal = await ctx.bot.di.get_all_balances(member)

        data = """
You have:\t\t {} chromosomes
In the ricefields:\t {} chromosomes
Total:\t\t {} chromosomes
        """

        embed = discord.Embed(
            description=(await _(ctx, data)).format(
                int(bal[0]) if int(bal[0]) == bal[0] else bal[0],
                int(bal[1]) if int(bal[1]) == bal[1] else bal[1], sum(bal)),
            color=randint(0, 0xFFFFFF),
        )

        embed.set_author(name=member.display_name, icon_url=member.avatar_url)
        embed.set_thumbnail(
            url="https://www.biobm.com/images/chromosome-abstract.png")
        await dest.send(embed=embed)
Beispiel #5
0
    async def inventory(self, ctx, *, member: discord.Member = None):

        dest = ctx.channel
        if member is None:
            member = ctx.author
        gd = await self.bot.db.get_guild_data(ctx.guild)
        try:
            is_mod = checks.role_or_permissions(
                ctx,
                lambda r: r.name in ('Bot Mod', 'Bot Admin', 'Bot Moderator'),
                manage_server=True)
        except:
            is_mod = False

        hide = gd.get("hideinv", False)

        if not is_mod and hide:
            member = ctx.author

        if hide:
            dest = ctx.author

        inv = await self.bot.di.get_inventory(member)
        if not inv:
            await dest.send(await _(ctx, "This inventory is empty!"))
            return

        fmap = map(lambda x: f"{x[0]} x{x[1]}", sorted(inv.items()))
        fmt = "\n".join(fmap)
        chunks = chunkn(fmt,
                        2000)  # [("Items: ", v) for v in chunkn(fmt, 400)]
        for chunk in chunks:
            embed = discord.Embed(description="\n".join(chunk),
                                  color=randint(0, 0xFFFFFF))
            embed.set_author(name=member.display_name,
                             icon_url=member.avatar_url)
            try:
                await dest.send(embed=embed)
            except discord.Forbidden:
                await dest.send(chunk)
Beispiel #6
0
    async def complexout(self, ctx, channel_id: str):
        """
        puts the output for the current server in another server.

        This takes a channel ID

        Be careful with managing this
        """

        server = ctx.message.server
        if server.id not in self.settings:
            self.initial_config(server.id)

        chan = discord.utils.get(self.bot.get_all_channels(), id=channel_id)

        if not (checks.is_owner_check(ctx)
                or checks.role_or_permissions(lambda r: r.name.lower(
                ) == settings.get_server_admin(chan.server).lower(),
                                              manage_server=True)):
            return await self.bot.say(
                "You don't have the right permissions in the destination serverto do that!"
            )

        if chan.type != discord.ChannelType.text:
            return await self.bot.say("That isn't a text channel")
        if chan.id in self.settings[server.id]['output']:
            return await self.bot.say("Channel already set as output")

        if self.settings[server.id]['multiout']:
            self.settings[server.id]['output'].append(chan.id)
            self.save_json()
            return await self.bot.say("Channel added to output list")
        else:
            self.settings[server.id]['output'] = [chan.id]
            self.save_json()
            return await self.bot.say("Channel set as output")
Beispiel #7
0
    async def edit(self, ctx, sub, game, port, name):
        """Modify entries on the Server List
        sub = DNS prefix, the part before .scgc.xyz
        game = gmod, csgo or tf2
        port = Server Port (will be displayed if something other than 27015
        name = Name to display on the !serverlist. Enclose in quotes if needed"""
        if checks.role_or_permissions(
                ctx, lambda r: r.name.lower() in
            ('monkey', 'server manager', 'owner')) is False:
            return False

        if game not in ('gmod', 'csgo', 'tf2'):
            await self.bot.say("Invalid game, please use gmod, csgo or tf2")

        if sub in self.unk:
            val = self.unk.pop(sub)
            val['port'] = port
            val['name'] = name
            if game == 'gmod':
                self.gmod[sub] = val
                dataIO.save_json(os.path.join("data", "dns", "gmod.json"),
                                 self.gmod)
            elif game == 'csgo':
                self.csgo[sub] = val
                dataIO.save_json(os.path.join("data", "dns", "csgo.json"),
                                 self.csgo)
            elif game == 'tf2':
                self.tf2[sub] = val
                dataIO.save_json(os.path.join("data", "dns", "tf2.json"),
                                 self.tf2)

            dataIO.save_json(os.path.join("data", "dns", "unk.json"), self.unk)
            self.settings['last'] = int(datetime.datetime.utcnow().timestamp())
            dataIO.save_json(os.path.join("data", "dns", "settings.json"),
                             self.settings)
            await self.bot.say("Edit successful")
        elif sub in self.gmod:
            if sub == 'gmod':
                self.gmod[sub]['port'] = port
                self.gmod[sub]['name'] = name
                dataIO.save_json(os.path.join("data", "dns", "gmod.json"),
                                 self.gmod)
            else:
                val = self.gmod.pop(sub)
                val['port'] = port
                val['name'] = name
                if game == 'csgo':
                    self.csgo[sub] = val
                    dataIO.save_json(os.path.join("data", "dns", "csgo.json"),
                                     self.csgo)
                elif game == 'tf2':
                    self.tf2[sub] = val
                    dataIO.save_json(os.path.join("data", "dns", "tf2.json"),
                                     self.tf2)

            dataIO.save_json(os.path.join("data", "dns", "gmod.json"),
                             self.unk)
            self.settings['last'] = int(datetime.datetime.utcnow().timestamp())
            dataIO.save_json(os.path.join("data", "dns", "settings.json"),
                             self.settings)
            await self.bot.say("Edit successful")
        elif sub in self.csgo:
            if sub == 'csgo':
                self.csgo[sub]['port'] = port
                self.csgo[sub]['name'] = name
                dataIO.save_json(os.path.join("data", "dns", "csgo.json"),
                                 self.csgo)
            else:
                val = self.csgo.pop(sub)
                val['port'] = port
                val['name'] = name
                if game == 'gmod':
                    self.gmod[sub] = val
                    dataIO.save_json(os.path.join("data", "dns", "gmod.json"),
                                     self.gmod)
                elif game == 'tf2':
                    self.tf2[sub] = val
                    dataIO.save_json(os.path.join("data", "dns", "tf2.json"),
                                     self.tf2)

            dataIO.save_json(os.path.join("data", "dns", "csgo.json"),
                             self.unk)
            self.settings['last'] = int(datetime.datetime.utcnow().timestamp())
            dataIO.save_json(os.path.join("data", "dns", "settings.json"),
                             self.settings)
            await self.bot.say("Edit successful")
        elif sub in self.tf2:
            if sub == 'tf2':
                self.tf2[sub]['port'] = port
                self.tf2[sub]['name'] = name
                dataIO.save_json(os.path.join("data", "dns", "tf2.json"),
                                 self.tf2)
            else:
                val = self.tf2.pop(sub)
                val['port'] = port
                val['name'] = name
                if game == 'csgo':
                    self.csgo[sub] = val
                    dataIO.save_json(os.path.join("data", "dns", "csgo.json"),
                                     self.csgo)
                elif game == 'gmod':
                    self.gmod[sub] = val
                    dataIO.save_json(os.path.join("data", "dns", "gmod.json"),
                                     self.gmod)

            dataIO.save_json(os.path.join("data", "dns", "tf2.json"), self.unk)
            self.settings['last'] = int(datetime.datetime.utcnow().timestamp())
            dataIO.save_json(os.path.join("data", "dns", "settings.json"),
                             self.settings)
            await self.bot.say("Edit successful")
        else:
            await self.bot.say("No server list entry found for that DNS name")