├── screenshot.png ├── examples-using-restapi ├── profile-pics │ ├── pic01.jpeg │ └── pic02.jpeg ├── join-room-multipe-user.py └── change-multiple-user-photo.py ├── contributing.md ├── .gitignore ├── files └── endpoint-list.md ├── LICENCE └── README.md /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ehsanghaffar/awesome-clubhouse/HEAD/screenshot.png -------------------------------------------------------------------------------- /examples-using-restapi/profile-pics/pic01.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ehsanghaffar/awesome-clubhouse/HEAD/examples-using-restapi/profile-pics/pic01.jpeg -------------------------------------------------------------------------------- /examples-using-restapi/profile-pics/pic02.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ehsanghaffar/awesome-clubhouse/HEAD/examples-using-restapi/profile-pics/pic02.jpeg -------------------------------------------------------------------------------- /contributing.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | Your contributions are always welcome! 4 | 5 | ## Guidelines 6 | 7 | * Add one link per Pull Request. 8 | * Make sure the PR title is in the format of `Add project-name`. 9 | * Write down the reason why the library is awesome. 10 | * Add the link: `* [project-name](http://example.com/) - A short description ends with a period.` 11 | * Keep descriptions concise and **short**. 12 | * Add a section if needed. 13 | * Add the section description. 14 | * Add the section title to Table of Contents. 15 | * Search previous Pull Requests or Issues before making a new one, as yours may be a duplicate. 16 | * Don't mention `Python` in the description as it's implied. 17 | * Check your spelling and grammar. 18 | * Remove any trailing whitespace. 19 | 20 | Just a gentle reminder: **Try not to submit your own project. Instead, wait for someone finds it useful and submits it for you.** 21 | -------------------------------------------------------------------------------- /examples-using-restapi/join-room-multipe-user.py: -------------------------------------------------------------------------------- 1 | import requests 2 | import time 3 | import random 4 | 5 | url = "https://www.clubhouseapi.com/api/join_channel" 6 | 7 | channel = "myyW812a" 8 | 9 | tokens = [ 10 | "3b3ddf2203e79b21e1cb002bc42f5e4e28e95975", 11 | "da74178ea8fab9e613746d7c013a306d525cda37" 12 | ] 13 | 14 | headers = { 15 | 'Accept': 'application/json', 16 | 'Accept-Encoding': 'gzip, deflate', 17 | 'CH-AppBuild': '2029', 18 | 'CH-AppVersion': '23.02.07', 19 | 'User-Agent': 'clubhouse/2029 (iPhone; iOS 16.3; Scale/3.00)', 20 | 'Connection': 'close', 21 | 'Content-Type': 'application/json; charset=utf-8', 22 | } 23 | 24 | def join_channel(token, channel, attribution_source="feed", attribution_details="eyJpc19leHBsb3JlIjpmYWxzZSwicmFuayI6MX0="): 25 | data = { 26 | "channel": channel, 27 | "attribution_source": attribution_source, 28 | "attribution_details": attribution_details 29 | } 30 | headers['Authorization'] = 'Token ' + token 31 | 32 | response = requests.post(url, headers=headers, json=data) 33 | response.raise_for_status() 34 | return response 35 | 36 | for token in tokens: 37 | join_channel(token, channel) 38 | time.sleep(10) -------------------------------------------------------------------------------- /examples-using-restapi/change-multiple-user-photo.py: -------------------------------------------------------------------------------- 1 | import requests 2 | 3 | def update_photo(file_path, token): 4 | url = "https://www.clubhouseapi.com/api/update_photo" 5 | file_name = file_path.split("/")[-1] 6 | headers = { 7 | "Accept": "application/json", 8 | "Accept-Encoding": "gzip, deflate", 9 | "CH-AppBuild": "2029", 10 | "CH-AppVersion": "23.02.07", 11 | "User-Agent": "clubhouse/2029 (iPhone; iOS 16.3; Scale/3.00)", 12 | "Connection": "close", 13 | "Authorization": f"Token {token}" 14 | } 15 | data = { 16 | "file": (file_name, open(file_path, "rb")), 17 | } 18 | response = requests.post(url, headers=headers, files=data) 19 | if response.status_code == 200: 20 | return response.json() 21 | else: 22 | print("Error uploading file:", response.text) 23 | 24 | def update_photos(tokens, file_paths): 25 | for token, file_path in zip(tokens, file_paths): 26 | res = update_photo(file_path, token) 27 | print(res) 28 | 29 | if __name__ == "__main__": 30 | # TODO change to import from .env for security 31 | tokens = [ 32 | "3b3ddf2203e79b21e1cb002bc42f5e4e28e95975", 33 | "da74178ea8fab9e613746d7c013a306d525cda37" 34 | ] 35 | # TODO make it dynamic 36 | file_paths = [ 37 | # path to photos 38 | "./profile-pics/pic01.jpeg", 39 | "./profile-pics/pic02.jpeg" 40 | ] 41 | update_photos(tokens, file_paths) -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # IPython 81 | profile_default/ 82 | ipython_config.py 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # pipenv 88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 91 | # install all needed dependencies. 92 | #Pipfile.lock 93 | 94 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 95 | __pypackages__/ 96 | 97 | # Celery stuff 98 | celerybeat-schedule 99 | celerybeat.pid 100 | 101 | # SageMath parsed files 102 | *.sage.py 103 | 104 | # Environments 105 | .env 106 | .venv 107 | env/ 108 | venv/ 109 | ENV/ 110 | env.bak/ 111 | venv.bak/ 112 | 113 | # Spyder project settings 114 | .spyderproject 115 | .spyproject 116 | 117 | # Rope project settings 118 | .ropeproject 119 | 120 | # mkdocs documentation 121 | /site 122 | 123 | # mypy 124 | .mypy_cache/ 125 | .dmypy.json 126 | dmypy.json 127 | 128 | # Pyre type checker 129 | .pyre/ 130 | .DS_Store 131 | __MACOSX 132 | -------------------------------------------------------------------------------- /files/endpoint-list.md: -------------------------------------------------------------------------------- 1 | record_action_trails 2 | start_phone_number_auth 3 | call_phone_number_auth 4 | resend_phone_number_auth 5 | complete_phone_number_auth 6 | check_waitlist_status 7 | get_release_notes 8 | get_all_topics 9 | get_topic 10 | get_clubs_for_topic 11 | get_users_for_topic 12 | update_name 13 | update_displayname 14 | update_bio 15 | update_username 16 | update_twitter_username 17 | update_skintone 18 | add_user_topic 19 | remove_user_topic 20 | update_notifications 21 | add_email 22 | get_settings 23 | update_instagram_username 24 | report_incident 25 | get_followers 26 | get_following 27 | get_mutual_follows 28 | get_suggested_follows_friends_only 29 | get_suggested_follows_all 30 | get_suggested_follows_similar 31 | ignore_suggested_follow 32 | follow 33 | follow_multiple 34 | unfollow 35 | update_follow_notifications 36 | block 37 | unblock 38 | get_profile 39 | get_channel 40 | get_channels 41 | get_suggested_speakers 42 | create_channel 43 | join_channel 44 | leave_channel 45 | active_ping 46 | end_channel 47 | invite_speaker 48 | uninvite_speaker 49 | mute_speaker 50 | make_moderator 51 | add_speaker 52 | remove_speaker 53 | unraise_hands 54 | remove_from_channel 55 | accept_speaker_invite 56 | reject_speaker_invite 57 | invite_to_existing_channel 58 | audience_reply 59 | make_channel_public 60 | make_channel_social 61 | block_from_channel 62 | get_welcome_channel 63 | reject_welcome_channel 64 | change_handraise_settings 65 | get_create_channel_targets 66 | update_channel_flags 67 | hide_channel 68 | get_notifications 69 | get_actionable_notifications 70 | ignore_actionable_notification 71 | me 72 | get_online_friends 73 | search_users 74 | search_clubs 75 | check_for_update 76 | get_suggested_invites 77 | invite_to_app 78 | invite_from_waitlist 79 | invite_to_new_channel 80 | accept_new_channel_invite 81 | reject_new_channel_invite 82 | cancel_new_channel_invite 83 | add_club_admin 84 | add_club_member 85 | get_club 86 | get_club_members 87 | get_suggested_club_invites 88 | remove_club_admin 89 | remove_club_member 90 | accept_club_member_invite 91 | follow_club 92 | unfollow_club 93 | get_club_nominations 94 | approve_club_nomination 95 | reject_club_nomination 96 | get_clubs 97 | update_is_follow_allowed 98 | update_is_membership_private 99 | update_is_community 100 | update_club_description 101 | update_club_rules 102 | update_club_topics 103 | add_club_topic 104 | remove_club_topic 105 | get_events 106 | get_events_for_user 107 | get_events_to_start 108 | delete_event 109 | create_event 110 | edit_event 111 | get_event 112 | get_channel_messages?channel=PAD7ZWX7&is_chronological_order=0 113 | send_channel_message 114 | get_chats 115 | share_channel 116 | refresh_token 117 | get_channel_messages 118 | 119 | -------------------------------------------------------------------------------- /LICENCE: -------------------------------------------------------------------------------- 1 | Creative Commons Legal Code 2 | 3 | CC0 1.0 Universal 4 | 5 | CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE 6 | LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN 7 | ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS 8 | INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES 9 | REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS 10 | PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM 11 | THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED 12 | HEREUNDER. 13 | 14 | Statement of Purpose 15 | 16 | The laws of most jurisdictions throughout the world automatically confer 17 | exclusive Copyright and Related Rights (defined below) upon the creator 18 | and subsequent owner(s) (each and all, an "owner") of an original work of 19 | authorship and/or a database (each, a "Work"). 20 | 21 | Certain owners wish to permanently relinquish those rights to a Work for 22 | the purpose of contributing to a commons of creative, cultural and 23 | scientific works ("Commons") that the public can reliably and without fear 24 | of later claims of infringement build upon, modify, incorporate in other 25 | works, reuse and redistribute as freely as possible in any form whatsoever 26 | and for any purposes, including without limitation commercial purposes. 27 | These owners may contribute to the Commons to promote the ideal of a free 28 | culture and the further production of creative, cultural and scientific 29 | works, or to gain reputation or greater distribution for their Work in 30 | part through the use and efforts of others. 31 | 32 | For these and/or other purposes and motivations, and without any 33 | expectation of additional consideration or compensation, the person 34 | associating CC0 with a Work (the "Affirmer"), to the extent that he or she 35 | is an owner of Copyright and Related Rights in the Work, voluntarily 36 | elects to apply CC0 to the Work and publicly distribute the Work under its 37 | terms, with knowledge of his or her Copyright and Related Rights in the 38 | Work and the meaning and intended legal effect of CC0 on those rights. 39 | 40 | 1. Copyright and Related Rights. A Work made available under CC0 may be 41 | protected by copyright and related or neighboring rights ("Copyright and 42 | Related Rights"). Copyright and Related Rights include, but are not 43 | limited to, the following: 44 | 45 | i. the right to reproduce, adapt, distribute, perform, display, 46 | communicate, and translate a Work; 47 | ii. moral rights retained by the original author(s) and/or performer(s); 48 | iii. publicity and privacy rights pertaining to a person's image or 49 | likeness depicted in a Work; 50 | iv. rights protecting against unfair competition in regards to a Work, 51 | subject to the limitations in paragraph 4(a), below; 52 | v. rights protecting the extraction, dissemination, use and reuse of data 53 | in a Work; 54 | vi. database rights (such as those arising under Directive 96/9/EC of the 55 | European Parliament and of the Council of 11 March 1996 on the legal 56 | protection of databases, and under any national implementation 57 | thereof, including any amended or successor version of such 58 | directive); and 59 | vii. other similar, equivalent or corresponding rights throughout the 60 | world based on applicable law or treaty, and any national 61 | implementations thereof. 62 | 63 | 2. Waiver. To the greatest extent permitted by, but not in contravention 64 | of, applicable law, Affirmer hereby overtly, fully, permanently, 65 | irrevocably and unconditionally waives, abandons, and surrenders all of 66 | Affirmer's Copyright and Related Rights and associated claims and causes 67 | of action, whether now known or unknown (including existing as well as 68 | future claims and causes of action), in the Work (i) in all territories 69 | worldwide, (ii) for the maximum duration provided by applicable law or 70 | treaty (including future time extensions), (iii) in any current or future 71 | medium and for any number of copies, and (iv) for any purpose whatsoever, 72 | including without limitation commercial, advertising or promotional 73 | purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each 74 | member of the public at large and to the detriment of Affirmer's heirs and 75 | successors, fully intending that such Waiver shall not be subject to 76 | revocation, rescission, cancellation, termination, or any other legal or 77 | equitable action to disrupt the quiet enjoyment of the Work by the public 78 | as contemplated by Affirmer's express Statement of Purpose. 79 | 80 | 3. Public License Fallback. Should any part of the Waiver for any reason 81 | be judged legally invalid or ineffective under applicable law, then the 82 | Waiver shall be preserved to the maximum extent permitted taking into 83 | account Affirmer's express Statement of Purpose. In addition, to the 84 | extent the Waiver is so judged Affirmer hereby grants to each affected 85 | person a royalty-free, non transferable, non sublicensable, non exclusive, 86 | irrevocable and unconditional license to exercise Affirmer's Copyright and 87 | Related Rights in the Work (i) in all territories worldwide, (ii) for the 88 | maximum duration provided by applicable law or treaty (including future 89 | time extensions), (iii) in any current or future medium and for any number 90 | of copies, and (iv) for any purpose whatsoever, including without 91 | limitation commercial, advertising or promotional purposes (the 92 | "License"). The License shall be deemed effective as of the date CC0 was 93 | applied by Affirmer to the Work. Should any part of the License for any 94 | reason be judged legally invalid or ineffective under applicable law, such 95 | partial invalidity or ineffectiveness shall not invalidate the remainder 96 | of the License, and in such case Affirmer hereby affirms that he or she 97 | will not (i) exercise any of his or her remaining Copyright and Related 98 | Rights in the Work or (ii) assert any associated claims and causes of 99 | action with respect to the Work, in either case contrary to Affirmer's 100 | express Statement of Purpose. 101 | 102 | 4. Limitations and Disclaimers. 103 | 104 | a. No trademark or patent rights held by Affirmer are waived, abandoned, 105 | surrendered, licensed or otherwise affected by this document. 106 | b. Affirmer offers the Work as-is and makes no representations or 107 | warranties of any kind concerning the Work, express, implied, 108 | statutory or otherwise, including without limitation warranties of 109 | title, merchantability, fitness for a particular purpose, non 110 | infringement, or the absence of latent or other defects, accuracy, or 111 | the present or absence of errors, whether or not discoverable, all to 112 | the greatest extent permissible under applicable law. 113 | c. Affirmer disclaims responsibility for clearing rights of other persons 114 | that may apply to the Work or any use thereof, including without 115 | limitation any person's Copyright and Related Rights in the Work. 116 | Further, Affirmer disclaims responsibility for obtaining any necessary 117 | consents, permissions or other rights required for any use of the 118 | Work. 119 | d. Affirmer understands and acknowledges that Creative Commons is not a 120 | party to this document and has no duty or obligation with respect to 121 | this CC0 or use of the Work. 122 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
