a pretty basic websocket wrapper for reddit chatrooms
Project description
a pretty basic websocket wrapper for reddit chatrooms
no selenium no bullsh*t, just directly websocket
works either with reddit username & password or the api token (not a regular one you get from your registered app), so you wont have to expose your pass
Installation
pip install Reddit-ChatBot-Python
required:
python>=3.7.0,<=3.8.7
packages:
websocket_client
requests
Example
from Reddit_ChatBot_Python import ChatBot, RedditAuthentication
import random # for a basic dice rolling game
# create authentication with username and pass
reddit_authentication = RedditAuthentication.PasswordAuth(reddit_username="", reddit_password="", twofa="") # 2FA supported although not necessary obv..
# instantiate the chatbot
chatbot = ChatBot(print_chat=True, store_session=True, print_websocket_frames=False, # some parameters u might wanna know
authentication=reddit_authentication)
# you can add a rate limit like so:
chatbot.enable_rate_limiter(max_calls=23, # how many messages will be sent by the bot
period=1.5 # in what period (minutes)
)
# now you can add hooks to the websock object in order for them to be executed when a message is received like so:
# create a function and hook:
@chatbot.after_message_hook
def roll(resp): # resp is a SimpleNamespace that carries all the data of the received frame
messg_s = resp.message.split()
if messg_s[0] == "!roll" and len(messg_s) == 3: # if received message says !roll
limit_bottom = int(messg_s[1])
limit_top = int(messg_s[2])
rolled_number = random.randint(limit_bottom, limit_top)
response_text = f"@{resp.user.name} {rolled_number}. Better luck next time!"
# a basic roll game
# send typing indicator cuz why not? maybe they think you are a real person
chatbot.send_typing_indicator(resp.channel_url)
chatbot.send_message(response_text, resp.channel_url) # and send the message, always add resp.channel_url as the second argument
chatbot.send_snoomoji('partyparrot', resp.channel_url) # and send a snoomoji cuz why not??
return True # return true if you want to be done with checking the other hooks, otherwise return None or False
# keep in mind that first added hooks gets executed first
# now everytime someone says "!roll 1 100", the bot will roll a dice between 1 and 100 and send the result!
# or you can add a basic response hook directly like so:
chatbot.set_respond_hook(input_="Hi", response="Hello {nickname}! sup?", limited_to_users=None, lower_the_input=False,
exclude_itself=True, must_be_equal=True, limited_to_channels=["my cozy chat group"]) # you can limit by indicating chatroom's name
# you can add a welcome message for newly joined users:
chatbot.set_welcome_message("welcome to the my cozy chat group u/{nickname}!)", limited_to_channels=["my cozy chat group"])
# and a farewell message too:
chatbot.set_farewell_message("Too bad u/{nickname} left us :()", limited_to_channels=["my cozy chat group"])
# and finally, run forever...
chatbot.run_4ever(auto_reconnect=True) # set auto_reconnect so as to re-connect in case remote server shuts down the connection after some period of time
Showcase of some other fun stuff you can do with this..
@websock.after_message_hook(frame_type='DELM')
def catch_deleted_messages(resp):
catched_deleted_message_id = resp.msg_id
@websock.after_message_hook(frame_type='SYEV')
def catch_invitees_and_inviters(resp):
try:
inviter = resp.data.inviter.nickname
invitees = [invitee.nickname for invitee in resp.data.invitees]
except AttributeError:
return
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Close
Hashes for Reddit_ChatBot_Python-1.1.9.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9bc0c509f97e06a47b98d896f5f978a448685fca791c3c2b14577c3652b0895f |
|
MD5 | 6c086fdf52df9a893332420e21a0bd97 |
|
BLAKE2b-256 | 8caed395fe2df52b5db5e1afa81109319ced3019edbc7260b71d3f2792e007ba |
Close
Hashes for Reddit_ChatBot_Python-1.1.9-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1e246dc0ea831add780dcb3c1dde35d9ba36d49eba201e6296283657226bb685 |
|
MD5 | b8cd84ee8945ebb158cefc915e9ffeed |
|
BLAKE2b-256 | 27c1bac2fb7922b3fdd627d7ceb0b85f71b08182b155d17bb48196d7fd738166 |