Giter VIP home page Giter VIP logo

pyryver's Introduction

pyryver

Python 3 MIT License PyPI Read the Docs (latest) Read the Docs (stable)

pyryver is an unofficial async Python library for Ryver. It provides a simple and sane way of automating tasks on Ryver and building bots, without the need to set up Hubot or Botkit.

pyryver is still in major version 0, so breaking changes may be introduced any time. Please check changelogs carefully. However, we will attempt to make it as backwards-compatible as possible (excluding version 0.1.0).

v0.4 is now out of beta! Minor breaking changes were introduced since 0.3.2! See the Release Description for the changelog.

Special thanks to @mincrmatt12!

Installation

pyryver is now on PyPI! You can install it with python3 -m pip install --user pyryver. You can also find pre-releases on TestPyPI. More instructions can be found at Read the Docs.

pyryver requires Python >= 3.6 and the aiohttp library.

Supported Actions

pyryver has near complete support for every common Ryver action. This includes things like sending messages, uploading files, managing topics & tasks, creating forums/teams, etc.

pyryver currently does not support editing user and organization settings. Forum/team settings, however, are supported.

For a complete list of everything the API contains, head over to the docs. If there's something missing from the API that you'd like to see, create an issue and we'll get to it ASAP.

Documentation and Examples

Documentation and examples can be found on Read the Docs.

If you want to see an example of pyryver being used in a real project, check out LaTeX Bot.

Here's an example demonstrating how to send a message (v0.4.0 API):

import pyryver
import asyncio

async def main():
    # Connect to ryver
    async with pyryver.Ryver("my_organization", "my_username", "my_password") as ryver:
        # Load all chats
        await ryver.load_chats()
        # Find users and forums/teams
        friend = ryver.get_user(username="my_friend")
        forum_or_team = ryver.get_groupchat(name="My Forum or Team")
        # Send a message
        await friend.send_message("Hello, friend!")
        await forum_or_team.send_message("Hello, forum or team!")

asyncio.get_event_loop().run_until_complete(main())

Here's an example demonstrating how to get your bot to respond in real-time (v0.4.0 API):

import pyryver
import asyncio

async def main():
    # Connect to ryver
    async with pyryver.Ryver("my_organization", "my_username", "my_password") as ryver:
        # Load all chats
        await ryver.load_chats()
        # Get the bot's user
        me = ryver.get_user(username="my_username")
        # Connect to the websocket interface
        # Enable auto-reconnects
        async with ryver.get_live_session(auto_reconnect=True) as session:
            @session.on_chat
            async def on_message(msg: pyryver.WSChatMessageData):
                print(msg.text) # print out the message's text
                # Reply to the message
                # Make sure to check that the message isn't from the bot itself
                if msg.from_jid != me.get_jid() and msg.text == "hello":
                    # Send a message to the same chat
                    # This could be either a user (for a private message) or a forum/team
                    chat = ryver.get_chat(jid=msg.to_jid)
                    await chat.send_message("hi")

            # run until session.terminate() is called
            await session.run_forever()

asyncio.get_event_loop().run_until_complete(main())

pyryver's People

Contributors

mincrmatt12 avatar moeezm avatar tylertian123 avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

mincrmatt12

pyryver's Issues

AttributeError when using `Object.get_app_link()`

Just got this error when using Task.get_app_link():

  File ".../pyryver/objects.py", line 278, in get_app_link
    return f"https://{self._ryver.org}.ryver.com/#{self.get_type()}/{self.get_id()}"
                      ^^^^^^^^^^^^^^^
AttributeError: 'Ryver' object has no attribute 'org'. Did you mean: '_org'?

Looks to me like the suggestion given is right, and that org just needs to change to _org in the Object class here:

return f"https://{self._ryver.org}.ryver.com/#{self.get_type()}/{self.get_id()}"

Happy to submit a quick PR for this. Let me know!

Add better Topics support

Support more things for Topics such as editing topics and replies and seeing new topics and replies in real-time with RyverWS.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.