An asyncio Python wrapper around the Discord API, forked off of Rapptz's Discord.py.

Overview

Novus

Discord server invite PyPI version info PyPI supported Python versions

A modern, easy to use, feature-rich, and async ready API wrapper for Discord written in Python.

A full fork of Rapptz's Discord.py library, with new features added on top.

Key Features

  • Modern Pythonic API using async and await.
  • Proper rate limit handling.
  • Optimised in both speed and memory.

Installing

Python 3.8 or higher is required

To install the library without full voice support, you can just run the following command:

# Linux/macOS
python3 -m pip install -U novus

# Windows
py -3 -m pip install -U novus

Otherwise to get voice support you should run the following command:

# Linux/macOS
python3 -m pip install -U "novus[voice]"

# Windows
py -3 -m pip install -U novus[voice]

To install the development version, do the following:

$ git clone https://github.com/Voxel-Fox-Ltd/novus
$ cd novus
$ python3 -m pip install -U .[voice]

Optional Packages

Please note that on Linux installing voice you must install the following packages via your favourite package manager (e.g. apt, dnf, etc) before running the above commands:

  • libffi-dev (or libffi-devel on some systems)
  • python-dev (e.g. python3.6-dev for Python 3.6)

Quick Example

import discord

class MyClient(discord.Client):
    async def on_ready(self):
        print('Logged on as', self.user)

    async def on_message(self, message):
        # don't respond to ourselves
        if message.author == self.user:
            return

        if message.content == 'ping':
            await message.channel.send('pong')

client = MyClient()
client.run('token')

Bot Example

import discord
from discord.ext import commands

bot = commands.Bot(command_prefix='>')

@bot.command()
async def ping(ctx):
    await ctx.send('pong')

bot.run('token')

You can find more examples in the examples directory.

Links

Comments
  • Library doesnt work on Python 3.11.0

    Library doesnt work on Python 3.11.0

    Summary

    Libary fails on Python 3.11.0

    Reproduction Steps

    1. Setup Python 3.11.0 & Novus
    2. import discord.ext.commands OR run python -m discord -v

    Minimal Reproducible Code

    import discord.ext.commands
    

    Expected Results

    Bot starts

    Actual Results

    Error:

      File "/home/bbs/bbsbot/test.py", line 1, in <module>
        import discord.ext.commands
      File "/home/bbs/.pyenv/versions/3.11.0/lib/python3.11/site-packages/discord/ext/commands/__init__.py", line 20, in <module>
        from .flags import *
      File "/home/bbs/.pyenv/versions/3.11.0/lib/python3.11/site-packages/discord/ext/commands/flags.py", line 72, in <module>
        @dataclass
         ^^^^^^^^^
      File "/home/bbs/.pyenv/versions/3.11.0/lib/python3.11/dataclasses.py", line 1221, in dataclass
        return wrap(cls)
               ^^^^^^^^^
      File "/home/bbs/.pyenv/versions/3.11.0/lib/python3.11/dataclasses.py", line 1211, in wrap
        return _process_class(cls, init, repr, eq, order, unsafe_hash,
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/bbs/.pyenv/versions/3.11.0/lib/python3.11/dataclasses.py", line 959, in _process_class
        cls_fields.append(_get_field(cls, name, type, kw_only))
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/bbs/.pyenv/versions/3.11.0/lib/python3.11/dataclasses.py", line 816, in _get_field
        raise ValueError(f'mutable default {type(f.default)} for field '
    ValueError: mutable default <class 'discord.utils._MissingSentinel'> for field name is not allowed: use default_factory
    
    
    ### Intents
    
    members, presences, guild_messages
    
    ### System Information
    
    Traceback (most recent call last):
      File "<frozen runpy>", line 198, in _run_module_as_main
      File "<frozen runpy>", line 88, in _run_code
      File "/home/bbs/.pyenv/versions/3.11.0/lib/python3.11/site-packages/discord/__main__.py", line 117, in <module>
        import voxelbotutils
      File "/home/bbs/.pyenv/versions/3.11.0/lib/python3.11/site-packages/voxelbotutils/__init__.py", line 1, in <module>
        from discord.ext.vbu import *
      File "/home/bbs/.pyenv/versions/3.11.0/lib/python3.11/site-packages/discord/ext/vbu/__init__.py", line 1, in <module>
        from . import runner
      File "/home/bbs/.pyenv/versions/3.11.0/lib/python3.11/site-packages/discord/ext/vbu/runner.py", line 12, in <module>
        from discord.ext import commands
      File "/home/bbs/.pyenv/versions/3.11.0/lib/python3.11/site-packages/discord/ext/commands/__init__.py", line 20, in <module>
        from .flags import *
      File "/home/bbs/.pyenv/versions/3.11.0/lib/python3.11/site-packages/discord/ext/commands/flags.py", line 72, in <module>
        @dataclass
         ^^^^^^^^^
      File "/home/bbs/.pyenv/versions/3.11.0/lib/python3.11/dataclasses.py", line 1221, in dataclass
        return wrap(cls)
               ^^^^^^^^^
      File "/home/bbs/.pyenv/versions/3.11.0/lib/python3.11/dataclasses.py", line 1211, in wrap
        return _process_class(cls, init, repr, eq, order, unsafe_hash,
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/bbs/.pyenv/versions/3.11.0/lib/python3.11/dataclasses.py", line 959, in _process_class
        cls_fields.append(_get_field(cls, name, type, kw_only))
                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/home/bbs/.pyenv/versions/3.11.0/lib/python3.11/dataclasses.py", line 816, in _get_field
        raise ValueError(f'mutable default {type(f.default)} for field '
    ValueError: mutable default <class 'discord.utils._MissingSentinel'> for field name is not allowed: use default_factory
    
    Python: 3.11.0
    Arch: aarch64
    Novus: 0.2.0
    OS: Raspberry Pi OS 64bit (based on Debian 11)
    
    ### Checklist
    
    - [X] I have searched the open issues for duplicates.
    - [X] I have shown the entire traceback, if possible.
    - [X] I have removed my token from display, if visible.
    
    ### Additional Context
    
    _No response_
    opened by shinrax2 6
  • TypeError: startswith first arg must be str or a tuple of str, not bytes

    TypeError: startswith first arg must be str or a tuple of str, not bytes

    Summary

    TypeError: startswith first arg must be str or a tuple of str, not bytes

    Reproduction Steps

    Create webhook with a member's avatar url as the url

    Minimal Reproducible Code

    await channel.create_webhook(name="example name", avatar=member.avatar.url, reason="example reason")
    

    Expected Results

    I expected a webhook to be created

    Actual Results

    I received this exception:

    Traceback (most recent call last):
      File "C:\Users\rdtla\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\discord\ext\commands\core.py", line 179, in wrapped
        ret = await coro(*args, **kwargs)
      File "C:\Users\rdtla\OneDrive\Documents\GitHub\impersonator\cogs\impersonation.py", line 19, in _say_command
        webhook: discord.Webhook = await channel.create_webhook(name="example name", avatar=member.avatar.url, reason="example reason")
      File "C:\Users\rdtla\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\discord\channel.py", line 567, in create_webhook
        avatar = utils._bytes_to_base64_data(avatar)  # type: ignore
      File "C:\Users\rdtla\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\discord\utils.py", line 482, in _bytes_to_base64_data
        mime = _get_mime_type_for_image(data)
      File "C:\Users\rdtla\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\discord\utils.py", line 468, in _get_mime_type_for_image
        if data.startswith(b'\x89\x50\x4E\x47\x0D\x0A\x1A\x0A'):
    TypeError: startswith first arg must be str or a tuple of str, not bytes
    
    The above exception was the direct cause of the following exception:
    
    Traceback (most recent call last):
      File "C:\Users\rdtla\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\discord\ext\commands\bot.py", line 1045, in invoke
        await ctx.command.invoke(ctx)
      File "C:\Users\rdtla\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\discord\ext\commands\core.py", line 951, in invoke
        await injected(*ctx.args, **ctx.kwargs)
      File "C:\Users\rdtla\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\discord\ext\commands\core.py", line 188, in wrapped
        raise CommandInvokeError(exc) from exc
    discord.ext.commands.errors.CommandInvokeError: Command raised an exception: TypeError: startswith first arg must be str or a tuple of str, not bytes
    

    Intents

    guilds members bans emojis integrations webhooks invites voice_states presences guild_messages dm_messages guild_reactions dm_reactions guild_typing dm_typing

    System Information

    • Python v3.8.10-final
    • Novus v0.0.3-final
    • aiohttp v3.7.4.post0
    • system info: Windows 10 10.0.19043

    Checklist

    • [X] I have searched the open issues for duplicates.
    • [X] I have shown the entire traceback, if possible.
    • [X] I have removed my token from display, if visible.

    Additional Context

    No response

    opened by schlopp 5
  • Channel selection not working

    Channel selection not working

    Summary

    In a slash command, when using discord.VoiceChannel or discord.TextChannel (could be more), it is unable to retrieve the guild ID for some reason.

    Reproduction Steps

    Use a type-hint of discord.VoiceChannel for a parameter in a slash command. Execute slash command.

    Minimal Reproducible Code

        @commands.group(invoke_without_command=True)
        async def lobby(self, ctx: vbu.Context):
            """
            Placeholder method
            :param ctx: Command context.
            :return:
            """
    
        @lobby.command()
        @commands.defer()
        async def test(self, ctx: vbu.Context):
            await respond(ctx, msg=str(ctx.guild.id))
    
        @lobby.command()
        @commands.defer()
        @commands.guild_only()
        async def create(self, ctx: vbu.Context, channel: discord.VoiceChannel):
            pass
    

    Expected Results

    No errors to be thrown and command to execute normally.

    Actual Results

    Command threw an error which can be viewed here - https://hastebin.com/abahahamem.sql

    Intents

    Using vbu, all intents are enabled

    System Information

    • Python v3.9.7-final
    • Novus v0.0.3-final
    • aiohttp v3.7.4.post0
    • system info: Windows 10 10.0.19043

    Checklist

    • [X] I have searched the open issues for duplicates.
    • [X] I have shown the entire traceback, if possible.
    • [X] I have removed my token from display, if visible.

    Additional Context

    This is the same setup, to my knowledge, as the one used in Apple.Py (https://github.com/Voxel-Fox-Ltd/Apple.Py/blob/11d9de7c708a0fc08e1ed90307493113fa8d25ac/cogs/vc_admin.py#L20) which I used as a reference when creating this command.

    opened by redstonedesigner 4
  • Add accessible utilities for timeouts

    Add accessible utilities for timeouts

    Summary

    This PR adds an accessible disable_communication and enable_communication coroutine to the discord.Member class, for putting bullies in the timeout zone, where they belong.

    Checklist

    • [x] If code changes were made then they have been tested.
      • [ ] I have updated the documentation to reflect the changes.
    • [ ] This PR fixes an issue.
    • [x] This PR adds something new (e.g. new method or parameters).
    • [ ] This PR is a breaking change (e.g. methods or parameters removed/renamed)
    • [ ] This PR is not a code change (e.g. documentation, README, ...)
    opened by schlopp 2
  • Fix Novus on Python 3.11

    Fix Novus on Python 3.11

    Summary

    This PR fixes Novus running on Python 3.11.0 by making use of default_factory for fields inside of discord.ext.commands.flags.Flag. I tested this PR on Python 3.8.10, 3.9.13, 3.10.7 & 3.11.0 with the reproduction code from #61 and my bot (which is quite basic) and had no errors.

    Checklist

    • [X] If code changes were made then they have been tested.
      • [ ] I have updated the documentation to reflect the changes.
    • [x] This PR fixes an issue.
    • [ ] This PR adds something new (e.g. new method or parameters).
    • [ ] This PR is a breaking change (e.g. methods or parameters removed/renamed)
    • [ ] This PR is not a code change (e.g. documentation, README, ...)
    opened by shinrax2 1
  • fix missing import

    fix missing import

    Summary

    Checklist

    • [ ] If code changes were made then they have been tested.
      • [ ] I have updated the documentation to reflect the changes.
    • [x ] This PR fixes an issue.
    • [ ] This PR adds something new (e.g. new method or parameters).
    • [ ] This PR is a breaking change (e.g. methods or parameters removed/renamed)
    • [ ] This PR is not a code change (e.g. documentation, README, ...)
    opened by 6days9weeks 1
  • Add select menu example

    Add select menu example

    Summary

    added a quick select menu example to get people up and running. #20

    Checklist

    • [x] If code changes were made then they have been tested.
      • [x] I have updated the documentation to reflect the changes.
    • [x] This PR fixes an issue.
    • [x] This PR adds something new (e.g. new method or parameters).
    • [ ] This PR is a breaking change (e.g. methods or parameters removed/renamed)
    • [ ] This PR is not a code change (e.g. documentation, README, ...)
    opened by GameTec-live 1
  • Add method for getting partial message from url to Client

    Add method for getting partial message from url to Client

    Summary

    Closes #1

    Added get_partial_message to client which allows getting a PartialMessage object from a URL or Channel ID & Message ID combination.

    I decided to not except the possible exceptions from fetching the channel to allow for developers to implement their own exceptions based on their use case. I have also tested this with Threads so all should be good.

    Checklist

    • [x] If code changes were made then they have been tested.
      • [x] I have updated the documentation to reflect the changes.
    • [x] This PR fixes an issue.
    • [x] This PR adds something new (e.g. new method or parameters).
    • [ ] This PR is a breaking change (e.g. methods or parameters removed/renamed)
    • [ ] This PR is not a code change (e.g. documentation, README, ...)
    opened by AustinRJakusz 1
  • `Command.reset_cooldown` not functional with application commands

    `Command.reset_cooldown` not functional with application commands

    Summary

    discord.ext.Command.reset_cooldown does not work when given a SlashContext, and results in a NoneType AttributeError internally when trying to use any attributes of SlashContext.message

    Reproduction Steps

    1. Have a discord.ext.commands.Command object and a discord.ext.commands.SlashContext object
    2. Run <command instance>.reset_cooldown(<slash context instance>)

    Minimal Reproducible Code

    # An example of where this could be encountered
    
    import discord  # type: ignore
    from discord.ext import commands  # type: ignore
    
    
    class ErrorHandlerCog(commands.Cog):
        @commands.Cog.listener()
        async def on_command_error(
            self,
            ctx: commands.Context,
            _: commands.CommandError,
        ):
            if ctx.command is not None:
               ctx.command.reset_cooldown(ctx)
    

    Expected Results

    I expect discord.ext.Command.reset_cooldown to function well when supplied a context without a message.

    Actual Results

    Internal AttributeError ('NoneType' object has no attribute 'author') at line 62 of discord/ext/commands/cooldowns.py

    Ignoring exception in on_command_error
    Traceback (most recent call last):                                                               _command_error
      File "C:\Users\rdtla\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\client.p                           n reset_cooldowny", line 330, in _run_event                                                                      ands\core.py", line 1037, i
        await coro(*args, **kwargs)                                                                                             5, in get_bucket
      File "C:\Users\rdtla\OneDrive\Documents\GitHub\original-pp-bot\cogs\errors.py", line 119, in on_command_error                                                                                   ands\cooldowns.py", line 246, in _bucket_key
        return ctx.command.reset_cooldown(ctx)
      File "C:\Users\rdtla\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\comm                           , in __call__ands\core.py", line 1037, in reset_cooldown                                                      ands\cooldowns.py", line 22
        bucket = self._buckets.get_bucket(ctx.message)                                                                          , in get_key
      File "C:\Users\rdtla\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\cooldowns.py", line 245, in get_bucket                                                      ands\cooldowns.py", line 79
        key = self._bucket_key(message)
      File "C:\Users\rdtla\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\cooldowns.py", line 226, in _bucket_key                                                     ands\cooldowns.py", line 62
        return self._type(msg)
      File "C:\Users\rdtla\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\cooldowns.py", line 79, in __call__
        return self.get_key(msg)
      File "C:\Users\rdtla\AppData\Local\Programs\Python\Python310\lib\site-packages\discord\ext\commands\cooldowns.py", line 62, in get_key
        return msg.author.id
    AttributeError: 'NoneType' object has no attribute 'author'
    

    Intents

    intents = discord.Intents.default()

    System Information

    • Python v3.10.2-final
    • Novus v0.0.5-alpha
      • Novus pkg_resources: v0.0.7a3827+gb119370
    • aiohttp v3.7.4.post0
    • system info: Windows 10 10.0.19044

    Checklist

    • [X] I have searched the open issues for duplicates.
    • [X] I have shown the entire traceback, if possible.
    • [X] I have removed my token from display, if visible.

    Additional Context

    I have only tested this with slash commands specifically.

    opened by schlopp 1
  • support for aiohttp 3.8+

    support for aiohttp 3.8+

    Summary

    Add support for aiohttp 3.8+

    What is the feature request for?

    The core library

    The Problem

    As per requirements.txt, the latest aiohttp versions aren't supported.

    requirements.txt

    aiohttp>=3.6.0,<3.8.0
    

    The Ideal Solution

    From my findings in the aiohttp changelog , there have been no breaking changes. I think newer versions should be supported.

    The Current Solution

    No response

    Additional Context

    No response

    opened by schlopp 1
  • Adding methods for Scheduled Events

    Adding methods for Scheduled Events

    Made using the Discord API documentation: https://discord.com/developers/docs/resources/guild-scheduled-event#guild-scheduled-event

    These is a starting point for scheduled event integration.

    Summary

    Added:

    • list_scheduled_events
    • create_scheduled_events
    • get_scheduled_event
    • modify_scheduled_event
    • delete_scheduled_event
    • get_scheduled_event_users

    Checklist

    • [x] If code changes were made then they have been tested.
      • [ ] I have updated the documentation to reflect the changes.
    • [x] This PR adds something new (e.g. new method or parameters).
    opened by juststephen 1
  • Partial webhook send with components raises invalid argument

    Partial webhook send with components raises invalid argument

    Summary

    Webhook send should support components when the webhook is partial and owned by the bot

    Reproduction Steps

    The bot created a webhook in a channel, the URL of that webhook was then used to create a new connection to send a message with components (i.e. buttons). However due to a check in the send method, the components are raised as an invalid argument. When removing these checks at lines: https://github.com/Voxel-Fox-Ltd/Novus/blob/8a625e0726dc58fe44a77aa31f198723da03f090/discord/webhook/async_.py#L1305-L1307 The sending works and the components work as intended. This was only done for the async webhook version.

    Minimal Reproducible Code

    import aiohttp
    import discord
    from discord.ext.commands import Bot
    from discord.ui import Button, MessageComponents
    
    token = ''
    webhook_url = ''
    
    client = Bot(
        command_prefix='None',
        help_command=None
    )
    
    # Components
    buttons = MessageComponents.add_buttons_with_rows(
        Button(
            label='Novus Documentation',
            style=discord.ButtonStyle.link,
            url='https://novus.readthedocs.io/en/latest/'
        )
    )
    
    @client.event
    async def on_ready():
        # Creating session
        async with aiohttp.ClientSession() as session:
            # Creating webhook
            webhook = discord.Webhook.from_url(
                webhook_url,
                session=session
            )
    
            # Sending notification
            await webhook.send(
                'Message',
                components=buttons,
            )
    
    client.run(token)
    

    Expected Results

    The method should not raise an invalid argument exception.

    Actual Results

    The method raises an invalid argument exception.

    Intents

    None

    System Information

    • Python v3.10.2-final
    • Novus v0.0.5-alpha
      • Novus pkg_resources: v0.0.7
    • aiohttp v3.7.4.post0
    • system info: Windows 10 10.0.19044

    Checklist

    • [X] I have searched the open issues for duplicates.
    • [X] I have shown the entire traceback, if possible.
    • [X] I have removed my token from display, if visible.

    Additional Context

    No response

    opened by juststephen 0
Owner
Voxel Fox
Making dumb apps for the internet.
Voxel Fox
🚀 An asynchronous python API wrapper meant to replace discord.py - Snappy discord api wrapper written with aiohttp & websockets

Pincer An asynchronous python API wrapper meant to replace discord.py ❗ The package is currently within the planning phase ?? Links |Join the discord

Pincer 125 Dec 26, 2022
Python API wrapper around Trello's API

A wrapper around the Trello API written in Python. Each Trello object is represented by a corresponding Python object. The attributes of these objects

Richard Kolkovich 904 Jan 2, 2023
An API wrapper around the pythonanywhere's API.

pyaww An API wrapper around the pythonanywhere's API. The name stands for pythonanywherewrapper. 100% api coverage most of the codebase is documented

null 7 Dec 11, 2022
An API wrapper around the pythonanywhere's API.

pyaww An API wrapper around the pythonanywhere's API. The name stands for pythonanywherewrapper. 100% API coverage Most of the codebase is documented

null 7 Dec 11, 2022
Forked from 0x36 on github who then rewrote the ida_kernelcache python framework

Forked from 0x36 on github who then rewrote the ida_kernelcache python framework. Sadly 0x36 doesn't seem to have push updates to the project and it took me a very long time to figure out why this wasn't working with ghidra i finally found the ghidra api html source and saw that in 10.1 some of the functions used was either entirely removed or just plain depricated.

Turnerhackz1 6 Dec 13, 2022
A Python wrapper around the OpenWeatherMap web API

PyOWM A Python wrapper around OpenWeatherMap web APIs What is it? PyOWM is a client Python wrapper library for OpenWeatherMap (OWM) web APIs. It allow

Claudio Sparpaglione 740 Dec 18, 2022
A Python wrapper around the Soundcloud API

soundcloud-python A friendly wrapper around the Soundcloud API. Installation To install soundcloud-python, simply: pip install soundcloud Or if you'r

SoundCloud 83 Dec 12, 2022
A Python wrapper around the Twitter API.

Python Twitter A Python wrapper around the Twitter API. By the Python-Twitter Developers Introduction This library provides a pure Python interface fo

Mike Taylor 3.4k Jan 1, 2023
A Python wrapper around the Twitter API.

Python Twitter A Python wrapper around the Twitter API. By the Python-Twitter Developers Introduction This library provides a pure Python interface fo

Mike Taylor 3.4k Jan 1, 2023
An async-ready Python wrapper around FerrisChat's API.

FerrisWheel An async-ready Python wrapper around FerrisChat's API. Installation Instructions Linux: $ python3.9 -m pip install -U ferriswheel Python 3

FerrisChat 8 Feb 8, 2022
A Python wrapper around the Pushbullet API to send different types of push notifications to your phone or/and computer.

pushbullet-python A Python wrapper around the Pushbullet API to send different types of push notifications to your phone or/and computer. Installation

Janu Lingeswaran 1 Jan 14, 2022
A FORKED AND Modded version of TL:GD for 🅱️3R0K🧲support

for support join here working example group Leech Here For Any Issues/Imrovements or Discussions go here or here Please Leave A star And Fork this Rep

XcodersHub 165 Mar 12, 2022
A light wrapper around FedEx's SOAP API.

Python FedEx SOAP API Module Author: Greg Taylor, Radek Wojcik Maintainer: Python FedEx Developers License: BSD Status: Stable What is it? A light wra

null 155 Dec 16, 2022
Wrapper around the Mega API

python-mega Overview Wrapper around the Mega API. Based on the work of Julien Marchand. Installation Install using pip, including any optional package

Juan Riaza 104 Nov 26, 2022
Wrapper around the latest Tuenti API

python-tuenti Overview Wrapper around the latest Tuenti API. Installation Install using pip, including any optional packages you want... $ pip install

Juan Riaza 10 Mar 7, 2022
Wrapper around the UPS API for creating shipping labels and fetching a package's tracking status.

ClassicUPS: A Useful UPS Library ClassicUPS is an Apache2 Licensed wrapper around the UPS API for creating shipping labels and fetching a package's tr

Jay Goel 55 Dec 12, 2022
Discord-Wrapper - Discord Websocket Wrapper in python

This does not currently work and is in development Discord Websocket Wrapper in

null 3 Oct 25, 2022
RichWatch is wrapper around AWS Cloud Watch to display beautiful logs with help of Python library Rich.

RichWatch is TUI (Textual User Interface) for AWS Cloud Watch. It formats and pretty prints Cloud Watch's logs so they are much more readable. Because

null 21 Jul 25, 2022
Linky bot, A open-source discord bot that allows you to add links to ur website, youtube url, etc for the people all around discord to see!

LinkyBot Linky bot, An open-source discord bot that allows you to add links to ur website, youtube url, etc for the people all around discord to see!

AlexyDaCoder 1 Sep 20, 2022