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
A modular Telegram Python bot running on python3 with a sqlalchemy, redis, telethon.

GilbertAnimeBot A modular Telegram Python bot running on python3 with a sqlalchemy, redis, telethon. How to setup/deploy. Read these notes carefully b

Kishore 1 Jan 23, 2022
OpenSea Bulk Uploader And Trader 100000 NFTs (MAC WINDOWS ANDROID LINUX) Automatically and massively upload and sell your non-fungible tokens on OpenSea using Python Selenium

OpenSea Bulk Uploader And Trader 100000 NFTs (MAC WINDOWS ANDROID LINUX) Automatically and massively upload and sell your non-fungible tokens on OpenS

ERC-7211 3 Mar 24, 2022
A simple telegram Bot, Upload Media File| video To telegram using the direct download link. (youtube, Mediafire, google drive, mega drive, etc)

URL-Uploader (Bot) A Bot Upload file|video To Telegram using given Links. Features: 👉 Only Auth Users (AUTH_USERS) Can Use The Bot 👉 Upload YTDL Sup

Hash Minner 18 Dec 17, 2022
A telegram bot for generate fake details. Written in python using telethon

FakeDataGenerator A telegram bot for generate fake details. Written in python using telethon. Mandatory variables API_HASH Get it from my telegram.org

Oxidised-Man 6 Dec 19, 2021
C Y B Ξ R UserBot is a project that simplifies the use of Telegram. All rights reserved.

C Y B Ξ R USΞRBOT 🇦🇿 C Y B Ξ R UserBot is a project that simplifies the use of Telegram. All rights reserved. Automatic Setup Android: open Termux p

C Y B Ξ R 0 Sep 20, 2022
LavaAPI - A simple library for accepting payments and using the LAVA Wallet

This library was created to simplify the LAVA api provided on the official websi

Vlad Baccara 8 Dec 18, 2022
Streaming Finance Data with AWS Lambda

A data pipeline consisting of an AWS lambda function reading data from yfinance API, an AWS Kinesis stream to receive & store data in S3 buckets and AWS Glue crawler & Athena to run SQL queries.

Aarif Munwar Jahan 4 Aug 30, 2022
Rotten Tomatoes API for Python

rottentomatoes.py rottentomatoes offers an easy-to-use Python wrapper to interact with the Rotten Tomatoes API. Before you try and use the API, make s

Zach Williams 88 Dec 15, 2022
Reverse engineered connection to the TradingView ticker in Python

Tradingview-ticker Reverse engineered connection to the TradingView ticker in Python. Makes a websocket connection to the Tradeview website and receiv

Aaron 20 Dec 02, 2022
An example of a chatbot with a number-based menu that can be used as a starting point for a project.

NumMenu Bot NumMenu Bot is an example chatbot showing a way to design a number-based menu assistant with Rasa. This type of bot is very useful on plat

Derguene 19 Nov 14, 2022
Resources for the AMLD 2022 workshop "DevOps on AWS"

MLOPS on AWS | AMLD 2022 This repository contains all the resources necessary to follow along and reproduce the workshop "MLOps on AWS: a Hands-On Tut

xtream 8 Jun 16, 2022
Build a better understanding of your data in PostgreSQL.

Data Fluent for PostgreSQL Build a better understanding of your data in PostgreSQL. The following shows an example report generated by this tool. It g

Mark Litwintschik 28 Aug 30, 2022
Telegram 隨機色圖,支援每日自動爬取

Telegram 隨機色圖機器人 使用此原始碼的Bot 開放的隨機色圖機器人: @katonei_bot 已實現的功能 爬取每日R18排行榜 不夠色!再來一張 Tag 索引,指定Tag色圖 將爬取到的色圖轉為 WebP 格式儲存,節省空間 需要注意的事件 好久之前的怪東西,代碼質量不保證 請在使用A

cluckbird 15 Oct 18, 2021
An Amazon Price Tracker app helps you to buy which product you want within sale price by sending an E-Mail.

Amazon Price Tracker An Amazon Price Tracker app helps you to buy which product you want within sale price by sending an E-Mail. Installing Download t

Aytaç Kaşoğlu 2 Feb 10, 2022
A delivery protection and notification system

DeliveryProtect This project builds a delivery protection and notification system, based on integration of Arduino Uno and Raspberry Pi 4. The codes a

2 Dec 13, 2021
A discord token nuker With loads of options that will screw an account up real bad

A discord token nuker With loads of options that will screw an account up real bad, also has inbuilt massreport, GroupChat Spammer and Token/Password/Creditcard grabber and so much more!

XPTGR 0 Aug 07, 2022
A telegram bot that can send you high-quality audio 🎧🎧🎧

Music downloader bot Still under development Please Report issues to improve this repo.I will try to fix bugs in next update Music downloader bot is a

Anish Gowda 36 Dec 06, 2022
Support for Competitive Coding badges to add in Github readme or portfolio websites.

Support for Competitive Coding badges to add in Github readme or portfolio websites.

Akshat Aggarwal 2 Feb 14, 2022
A simple, infinitely scalable, SQS based queue.

SimpleQ A simple, infinitely scalable, SQS based queue. Meta Author: Randall Degges Email: [emai

Randall Degges 162 Dec 21, 2022