A Python wrapper for the Dogehouse API.

Overview

Python wrapper for the dogehouse API

Installation

pip install dogehouse

Example

from dogehouse import DogeClient, event, command
from dogehouse.entities import Message


class Client(DogeClient):
    @event
    async def on_ready(self):
        print(f"Successfully connected as {self.user}!")
        await self.create_room("Hello World!")

    @command
    async def foo(self, ctx: Message):
        await self.send("bar")


if __name__ == "__main__":
    Client("YourToken", "YourRefreshToken", prefix="!").run()
Comments
  • Things we need;

    Things we need;

    So, I'm new to Github and I don't know where to type comments so I'll issue it. The things we need the most;

    1. A documentation for the module! I had to look through the source code to find what I need
    2. Functions that can do these things: "Make Mod", "Make Room Admin", "Ban from Chat", "Ban from Room"
    enhancement 
    opened by asxlvm 16
  • Can't install using pip

    Can't install using pip

        ERROR: Command errored out with exit status 1:
         command: 'c:\users\notmm\appdata\local\programs\python\python39\python.exe' -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\notmm\\AppData\\Local\\Temp\\pip-install-fi1zbmzm\\dogehouse_737517342ab24e0db7771551e779c185\\setup.py'"'"'; __file__='"'"'C:\\Users\\notmm\\AppData\\Local\\Temp\\pip-install-fi1zbmzm\\dogehouse_737517342ab24e0db7771551e779c185\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base 'C:\Users\notmm\AppData\Local\Temp\pip-pip-egg-info-k9zoptcf'
             cwd: C:\Users\notmm\AppData\Local\Temp\pip-install-fi1zbmzm\dogehouse_737517342ab24e0db7771551e779c185\
        Complete output (5 lines):
        Traceback (most recent call last):
          File "<string>", line 1, in <module>
            from dogehouse import __version__
        ModuleNotFoundError: No module named 'dogehouse'
        ----------------------------------------
    WARNING: Discarding https://files.pythonhosted.org/packages/da/7e/19b4411d56da680704ab5c38dff93a3ef48c9bb4da844ce205ee96b89e37/dogehouse-0.0.0.tar.gz#sha256=8a8527596a5dcbe143f23eeb2da0b62632703c1abb274f3d75eb3b727db55044 (from https://pypi.org/simple/dogehouse/). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
    ERROR: Could not find a version that satisfies the requirement dogehouse
    ERROR: No matching distribution found for dogehouse```
    bug 
    opened by mmattbtw 7
  • Default set to None doesn't work

    Default set to None doesn't work

    Hey so, I'm not sure if this is my problem but;

      @command
      async def covid(self, ctx: Message, *, country = None):
        if country == None:
          await self.send("You have to specify a country to see their COVID stats! Example: d!covid Czechia")
          return
        else:
          pass
        
        cases = Covid().get_status_by_country_name(country.lower())
        
        region = cases["country"]
        confirmed = cases["confirmed"]
        active = cases["active"]
        deaths = cases["deaths"]
        recovered = cases["recovered"]
        
        await self.send(f"COVID stats for {region} • Confirmed Cases: {confirmed} • Active Cases: {active} • Deaths: {deaths} • Recovered: {recovered}")
    

    This is my command, it works normally but when the user doesn't specify the country, it should send the message "You have to specify a country..." but it doesn't, this works on Discord.py, not sure why it doesn't here! :D

    bug 
    opened by asxlvm 6
  • Default values don't work

    Default values don't work

    IMG_20210326_172512

    IMG_20210326_172445

    This is the code that I'm using;

      @command
      async def pp(self, ctx: Message, *, user: User = None):
        print(user)
        if user == None:
          user2 = ctx.author.mention
          print(user)
        else:
          user2 = user.mention
        pps = [ I don't wanna make the code long so I'm not including the list ]
        
        pprnd = random.choice(pps)
          
        await self.send(f"{user2}'s pp: ㅤㅤㅤ{pprnd}")
    

    Before the update, the tagging worked but obviously the ctx.author didn't, now it's vice-versa.

    invalid 
    opened by asxlvm 5
  • on_speaker_request event doesn't work?

    on_speaker_request event doesn't work?

    This is my code, am I wrong??

       	 @event
         async def on_speaker_request(self, user: User):
             await self.send(f"🎤 Welcome to the stage - {user.username}")
             await self.add_speaker(user)
    
    invalid 
    opened by mmattbtw 4
  • Convertors either don't work or I can't work with them

    Convertors either don't work or I can't work with them

    Hey, I'll leave the code I'm using at the bottom of the issue as it's long, I can't seem to get convertors working again, tell me what I'm doing wrong please

    File "main.py", line 121, in testbattle
        if user.id == ctx.author.id:
    AttributeError: 'str' object has no attribute 'id'
    

    Code:

    	@command
    	async def testbattle(self, ctx: Message, *, user: BaseUser):
    		if user == None:
    			return await self.send(message=f"{ctx.author.mention} Missing Required Argument - Usage: d!battle <user> • Example: d!fight @hudson", whisper=[ctx.author.id])
    		if user.id == ctx.author.id:
    			return await self.send(message=f"{ctx.author.mention} Bad Argument (You cannot battle yourself) - Usage: d!battle <user> • Example: d!fight @hudson", whisper=[ctx.author.id])
    		m_author_id = ctx.author.id
    		m_user_id = user.id
    		m_author_mention = ctx.author.mention
    		m_user_mention = user.mention
    		turn = random.choice([m_author_id, m_user_id])
    		currenthpauth = 100
    		currenthpuser = 100
    		players = [m_author_id, m_user_id]
    		moves = 0
    		try:
    			while True:
    				if turn == m_author_id:
    					currentturnid = m_author_id
    					currentturnmention = m_author_mention
    					currentturnhp = currenthpauth
    					notturnid = m_user_id
    					notturnmention = m_user_mention
    					notturnhp = currenthpuser
    				else:
    					currentturnid = m_user_id
    					currentturnmention = m_user_mention
    					currentturnhp = currenthpuser
    					notturnid = m_author_id
    					notturnmention = m_author_mention
    					notturnhp = currenthpauth
    				await ctx.send(message=f"{currentturnmention}, what will you do now? • OPTIONS: Fight, Defense, Surrender • Your HP: {currentturnhp} HP, Your opponent's HP: {notturnhp} HP", whisper=currentturnid)
    				msg = await self.wait_for(event=message, check=lambda message: msg.author.id == currentturnid)
    				msgcont = msg.lower()
    				if msgcont == 'fight':
    					damage = random.randint(1,35)
    					if damage == 35:
    						damage = random.randint(35,75)
    						dmgtext = f"{currentturnmention} made a critical hit of {damage} HP! :Pog:"
    					else:
    						dmgtext = f"{currentturnmention} chose violence. Damage of {damage} HP was given to {notturnmention}!"
    					notturnhp -= damage
    					await self.send(message=dmgtext, whisper=players)
    					moves += 1
    					if turn == m_author_id:
    						turn = m_user_id
    					else:
    						turn = m_author_id
    						
    				elif msgcont == 'defense':
    					healedhp = random.randint(5, 20)
    					currentturnhp += healedhp
    					if currentturnhp >= 100:
    						currentturnhp = 100
    					deftext = f"{currentturnmention} healed himself for {currentturnhp} HP!"
    					await self.send(message=deftext, whisper=players)
    					if turn == m_author_id:
    						turn = m_user_id
    					else:
    						turn = m_author_id
    				elif msgcont == 'surrender':
    					await self.send(message=f"{currentturnmention} surrendered S :OMEGALUL:  BAD", whisper=players)
    					return False
    			
    			if currenthpauth <= 0 or currenthpuser <= 0:
    				if currenthpauth > currenthpuser:
    					await self.send(f"{m_author_mention} has won against {m_user_mention} in {moves}! His remaining HP was {currenthpauth} HP.")
    					return False
    				elif currenthpuser > currenthpauth:
    					await self.send(f"{m_user_mention} has won against {m_author_mention} in {moves}! His remaining HP was {currenthpuser} HP.")
    					return False
    			else:
    				pass
    		except Exception as e:
    			print(e)
    
    invalid 
    opened by asxlvm 3
  • How could I use self.rooms?

    How could I use self.rooms?

    Hey! How would I get info from this? Because when I call self.rooms, I receive this biiiiig list and I can't seem to get stuff from it

    [<Room id=ec61ca17-e38e-4c7... creator_id=f955b622-9a34-43e... name=Undead computer s... description= created_at=2021-04-05 09:16:48.457705+00:00 is_private=False count=18 users=[<UserPreview id=f955b622-9a34-43e... displayname=Null num_followers=158>, <UserPreview id=1755d9d9-2133-4fa... displayname=Bitdefender Antiv... num_followers=105>, <UserPreview id=7b0136c4-45ca-4ab... displayname=James num_followers=86>, <UserPreview id=f4c6eadb-9062-486... displayname=Honbra num_followers=61>, <UserPreview id=2fbb1c5d-2ce3-44e... displayname=Alt num_followers=39>, <UserPreview id=05bb4c2c-d321-4d2... displayname=DodgyCoin Bot num_followers=30>, <UserPreview id=5a050137-adec-4ce... displayname=Amine Maminou num_followers=23>, <UserPreview id=de27447e-a633-484... displayname=Asylum num_followers=19>, <UserPreview id=ab2e518f-3e63-45f... displayname=DogeBoss 🐶 num_followers=13>, <UserPreview id=77e4fb39-cc1b-4fd... displayname=Mubarak Showole num_followers=9>]>, <Room id=91b403ea-3615-481... creator_id=21b94c3c-c39a-4b5... name=AngularHaters description= created_at=2021-04-05 10:00:33.718604+00:00 is_private=False count=5 users=[<UserPreview id=21b94c3c-c39a-4b5... displayname=Jay Prakash Pathak num_followers=20>, <UserPreview id=17c0b799-c8bf-4ba... displayname=zrv num_followers=12>, <UserPreview id=6474331d-7359-406... displayname=dayum son num_followers=2>, <UserPreview id=6da6ec1e-a375-437... displayname=Rohin Awale num_followers=0>, <UserPreview id=34b54f15-d69d-4fc... displayname=Doob num_followers=0>]>, <Room id=cbcb2c9d-d982-417... creator_id=1d8a143c-22f2-4f3... name=Jerby Room  description=27 daily prayers ... created_at=2021-03-31 18:31:51.903058+00:00 is_private=False count=4 users=[<UserPreview id=e2f77c8d-afc5-490... displayname=Erwin DePanda num_followers=12>, <UserPreview id=1d8a143c-22f2-4f3... displayname=LJL num_followers=7>, <UserPreview id=d8fc5bbf-0ad3-4d2... displayname=Crashloll num_followers=6>, <UserPreview id=7f89041c-ac7d-469... displayname=Cengiz Gürtusgil num_followers=0>]>, <Room id=3fc0fe65-0b44-46f... creator_id=e44ad29a-536e-491... name=idk description= created_at=2021-04-04 21:06:15.910658+00:00 is_private=False count=3 users=[<UserPreview id=e44ad29a-536e-491... displayname=HoloPanio num_followers=108>, <UserPreview id=4aea3675-1b08-4e6... displayname=Novice Doge num_followers=10>, <UserPreview id=7c0059ff-f506-43f... displayname=Dave num_followers=0>]>, <Room id=c761eaf1-124b-47b... creator_id=704d82a0-ff97-40a... name=DMTK description= created_at=2021-04-05 09:46:54.172012+00:00 is_private=False count=2 users=[<UserPreview id=704d82a0-ff97-40a... displayname=DrFolleDinde num_followers=7>, <UserPreview id=063b3450-c06d-458... displayname=Novice Doge num_followers=2>]>, <Room id=2d7d56c4-7366-42d... creator_id=8b195657-f94f-45c... name=DoobHouse! description=GitHub.com/DoobDe... created_at=2021-04-04 17:38:38.553335+00:00 is_private=False count=1 users=[<UserPreview id=8b195657-f94f-45c... displayname=Doob num_followers=4>]>, <Room id=345e228b-ecff-4c9... creator_id=1b5cd5cf-a858-4c2... name=1 on 1 AI Chat description=The Bot will repl... created_at=2021-04-04 23:05:30.232612+00:00 is_private=False count=1 users=[<UserPreview id=1b5cd5cf-a858-4c2... displayname=daBOT num_followers=7>]>]
    

    I tried self.rooms.name, self.rooms['name']

    Still doesn't work

    I'm trying to make a CLI

    question 
    opened by asxlvm 2
  • BaseUser doesn't trigger if the argument ends with a whitespace

    BaseUser doesn't trigger if the argument ends with a whitespace

    So, DogeHouse doesn't remove white spaces when a message has been sent with a space at the end, ex.; d!fight @asylum , it wouldn't trigger because of the whitespace, so you'd have to remove the whitespace at the end for it to work.

    I use BaseUser as my user arg. and I'm not sure if this happens with any other arg or if there's a way to fix that straight in your library or do I have to make an if endswith check in my code?

    bug 
    opened by asxlvm 2
  • DogeHouse.py bot low uptime

    DogeHouse.py bot low uptime

    Hey! Today I checked UptimeRobot to see stats on the Uptime of my Discord bots and my Dogehouse bot, I saw that the Dogehouse bot had a big difference in uptime IMG_20210330_111126

    Does that have something to do with the loop (that it's set to 30 minutes or smth) or is it just the socket disconnecting because it's not receiving anything?

    invalid 
    opened by asxlvm 2
  • NotEnoughArguments exception not called

    NotEnoughArguments exception not called

    Describe the bug The NotEnoughArguments error doesn't get called

    To Reproduce Steps to reproduce the behavior:

    1. Try the command and event below without any arguments:
    2. The output is tuple index out of range instead of NotEnoughArguments

    Expected behavior The error should return NotEnoughArguments instead of tuple index out of range

    Code

    	@event
    	async def on_error(self, error):
    		print(error)
    		if isinstance(error, dogehouse.exceptions.CommandNotFound):
    			print("not found")
    		elif isinstance(error, dogehouse.exceptions.NotEnoughArguments):
    			print("yisiso")
    		else:
    			print("no")
    
    	@command
    	async def testerror(self, ctx: Context, tellemes):
    		await self.send(tellemes)
    

    Screenshots IMG_20210420_102559

    Desktop (please complete the following information):

    • OS: [linux]
    • Browser [replit ide bruh?]
    • Version [the newest i guess]
    • Is this stuff really needed? I don't think OS and browser matter really

    Additional context no

    bug 
    opened by asxlvm 1
  • TypeError: object of type 'bool' has no len()

    TypeError: object of type 'bool' has no len()

    Describe the bug When receiving a User's permissions, the represents function doesn't cast non-string objects to a string, instead, it casts string objects to a string, meaning the object will always be a non-string, causing an error.

    To Reproduce Steps to reproduce the behavior:

    1. Make a simple dogehouse bot
    2. Call __repr__ on User.room_permissions
    3. See error

    And/or code:

    from dogehouse import DogeClient, event, command
    from dogehouse.entities import User
    
    class Client(DogeClient):
        @event
        async def on_ready(self):
            pass
    
        @command
        async def test(self, ctx):
            user = await self.fetch_user(ctx.author.id)
            print(user.room_permissions.__repr__()) # You can exclude the __repr__ if you want
    

    Expected behavior A string printed in stdout, something along the lines of <Permission asked_to_speak='False' is_mod='False' is_admin='True' is_speaker='False'>

    Screenshots Screenshot from 2021-04-18 11-51-21

    Desktop (please complete the following information):

    • OS: Manjaro Linux x86_64
    • Browser: Firefox
    • Version: 5.9.16-1-MANJARO

    Additional context You can solve this issue by swapping item and f"'{item}'" in line 52 of the /represents/representation.py file

    bug 
    opened by saihnii4 1
Releases(2.1.4)
Owner
Arthur
17 year old GO-AO informatics student
Arthur
Aws-lambda-requests-wrapper - Request/Response wrapper for AWS Lambda with API Gateway

AWS Lambda Requests Wrapper Request/Response wrapper for AWS Lambda with API Gat

null 1 May 20, 2022
PRAW, an acronym for "Python Reddit API Wrapper", is a python package that allows for simple access to Reddit's API.

PRAW: The Python Reddit API Wrapper PRAW, an acronym for "Python Reddit API Wrapper", is a Python package that allows for simple access to Reddit's AP

Python Reddit API Wrapper Development 3k Dec 29, 2022
PRAW, an acronym for "Python Reddit API Wrapper", is a python package that allows for simple access to Reddit's API.

PRAW: The Python Reddit API Wrapper PRAW, an acronym for "Python Reddit API Wrapper", is a Python package that allows for simple access to Reddit's AP

Python Reddit API Wrapper Development 3k Dec 29, 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
Async ready API wrapper for Revolt API written in Python.

Mutiny Async ready API wrapper for Revolt API written in Python. Installation Python 3.9 or higher is required To install the library, you can just ru

null 16 Mar 29, 2022
A Python API wrapper for the Twitter API!

PyTweet PyTweet is an api wrapper made for twitter using twitter's api version 2! Installation Windows py3 -m pip install PyTweet Linux python -m pip

TheFarGG 1 Nov 19, 2022
Python API wrapper library for Convex Value API

convex-value-python Python API wrapper library for Convex Value API. Further Links: Convex Value homepage @ConvexValue on Twitter JB on Twitter Authen

Aaron DeVera 2 May 11, 2022
This an API wrapper library for the OpenSea API written in Python 3.

OpenSea NFT API Python 3 wrapper This an API wrapper library for the OpenSea API written in Python 3. The library provides a simplified interface to f

Attila Tóth 159 Dec 26, 2022
YARSAW is an Async Python API Wrapper for the Random Stuff API.

Yet Another Random Stuff API Wrapper - YARSAW YARSAW is an Async Python API Wrapper for the Random Stuff API. This module makes it simpler for you to

Bruce 6 Mar 27, 2022
EpikCord.py - This is an API Wrapper for Discord's API for Python

EpikCord.py - This is an API Wrapper for Discord's API for Python! We've decided not to fork discord.py and start completely from scratch for a new, better structuring system!

EpikHost 28 Oct 10, 2022
A simple Python API wrapper for Cloudflare Stream's API.

python-cloudflare-stream A basic Python API wrapper for working with Cloudflare Stream. Arbington.com started off using Cloudflare Stream. We used the

Arbington 3 Sep 8, 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
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 for Gofile API

Gofile2 from gofile2 import Gofile g_a = Gofile() print(g_a.upload(file="/home/itz-fork/photo.png")) An API Wrapper for Gofile API. About API Gofile

I'm Not A Bot #Left_TG 16 Dec 10, 2022
A simple API wrapper for the Tenor API

Gifpy A simple API wrapper for the Tenor API Installation Python 3.9 or higher is recommended python3 -m pip install gifpy Clone repository: $ git cl

Juan Ignacio Battiston 4 Dec 22, 2021
An API wrapper around Discord API.

NeoCord This project is work in progress not for production use. An asynchronous API wrapper around Discord API written in Python. Features Modern API

Izhar Ahmad 14 Jan 3, 2022
A wrapper for The Movie Database API v3 and v4 that only uses the read access token (not api key).

fulltmdb A wrapper for The Movie Database API v3 and v4 that only uses the read access token (not api key). Installation Use the package manager pip t

Jacob Hale 2 Sep 26, 2021
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 for Henrik's Unofficial VALORANT API

ValorantAPI.py An API wrapper for Henrik's Unofficial VALORANT API Warning!! This project is still in beta and only contains barely anything yet. If y

Jakkaphat Chalermphanaphan 0 Feb 4, 2022