Python Twitter API

Overview

Python Twitter Tools

Tests Coverage Status

The Minimalist Twitter API for Python is a Python API for Twitter, everyone's favorite Web 2.0 Facebook-style status updater for people on the go.

Also included is a Twitter command-line tool for getting your friends' tweets and setting your own tweet from the safety and security of your favorite shell and an IRC bot that can announce Twitter updates to an IRC channel.

For more information:

  • install the package pip install twitter
  • import the twitter package and run help() on it
  • run twitter -h for command-line tool help

twitter - The Command-Line Tool

The command-line tool lets you do some awesome things:

  • view your tweets, recent replies, and tweets in lists
  • view the public timeline
  • follow and unfollow (leave) friends
  • various output formats for tweet information

The bottom line: type twitter, receive tweets.

twitterbot - The IRC Bot

The IRC bot is associated with a Twitter account (either your own account or an account you create for the bot). The bot announces all tweets from friends it is following. It can be made to follow or leave friends through IRC /msg commands.

twitter-log

twitter-log is a simple command-line tool that dumps all public tweets from a given user in a simple text format. It is useful to get a complete offsite backup of all your tweets. Run twitter-log and read the instructions.

twitter-archiver and twitter-follow

twitter-archiver will log all the tweets posted by any user since they started posting. twitter-follow will print a list of all of all the followers of a user (or all the users that user follows).

Programming with the Twitter API classes

The Twitter and TwitterStream classes are the key to building your own Twitter-enabled applications.

The Twitter class

The minimalist yet fully featured Twitter API class.

Get RESTful data by accessing members of this class. The result is decoded python objects (lists and dicts).

The Twitter API is documented at:

https://developer.twitter.com/en/docs

The list of most accessible functions is listed at:

https://developer.twitter.com/en/docs/api-reference-index

Examples:

from twitter import *

t = Twitter(
    auth=OAuth(token, token_secret, consumer_key, consumer_secret))

# Get your "home" timeline
t.statuses.home_timeline()

# Get a particular friend's timeline
t.statuses.user_timeline(screen_name="boogheta")

# to pass in GET/POST parameters, such as `count`
t.statuses.home_timeline(count=5)

# to pass in the GET/POST parameter `id` you need to use `_id`
t.statuses.show(_id=1234567890)

# Update your status
t.statuses.update(
    status="Using @boogheta's sweet Python Twitter Tools.")

# Send a direct message
t.direct_messages.events.new(
    _json={
        "event": {
            "type": "message_create",
            "message_create": {
                "target": {
                    "recipient_id": t.users.show(screen_name="boogheta")["id"]},
                "message_data": {
                    "text": "I think yer swell!"}}}})

# Get the members of maxmunnecke's list "network analysis tools" (grab the list_id within the url) https://twitter.com/i/lists/1130857490764091392
t.lists.members(owner_screen_name="maxmunnecke", list_id="1130857490764091392")

# Favorite/like a status
status = t.statuses.home_timeline()[0]
if not status['favorited']:
    t.favorites.create(_id=status['id'])

# An *optional* `_timeout` parameter can also be used for API
# calls which take much more time than normal or twitter stops
# responding for some reason:
t.users.lookup(
    screen_name=','.join(A_LIST_OF_100_SCREEN_NAMES), _timeout=1)

# Overriding Method: GET/POST
# you should not need to use this method as this library properly
# detects whether GET or POST should be used, Nevertheless
# to force a particular method, use `_method`
t.statuses.oembed(_id=1234567890, _method='GET')

# Send images along with your tweets:
# - first just read images from the web or from files the regular way:
with open("example.png", "rb") as imagefile:
    imagedata = imagefile.read()
# - then upload medias one by one on Twitter's dedicated server
#   and collect each one's id:
t_upload = Twitter(domain='upload.twitter.com',
    auth=OAuth(token, token_secret, consumer_key, consumer_secret))
id_img1 = t_upload.media.upload(media=imagedata)["media_id_string"]
id_img2 = t_upload.media.upload(media=imagedata)["media_id_string"]
# - finally send your tweet with the list of media ids:
t.statuses.update(status="PTT ★", media_ids=",".join([id_img1, id_img2]))

# Or send a tweet with an image (or set a logo/banner similarily)
# using the old deprecated method that will probably disappear some day
params = {"media[]": imagedata, "status": "PTT ★"}
# Or for an image encoded as base64:
params = {"media[]": base64_image, "status": "PTT ★", "_base64": True}
t.statuses.update_with_media(**params)

# Attach text metadata to medias sent, using the upload.twitter.com route
# using the _json workaround to send json arguments as POST body
# (warning: to be done before attaching the media to a tweet)
t_upload.media.metadata.create(_json={
  "media_id": id_img1,
  "alt_text": { "text": "metadata generated via PTT!" }
})
# or with the shortcut arguments ("alt_text" and "text" work):
t_upload.media.metadata.create(media_id=id_img1, text="metadata generated via PTT!")

Searching Twitter:

# Search for the latest tweets about #pycon
t.search.tweets(q="#pycon")

# Search for the latest tweets about #pycon, using [extended mode](https://developer.twitter.com/en/docs/tweets/tweet-updates)
t.search.tweets(q="#pycon", tweet_mode='extended')

Retrying after reaching the API rate limit

Simply create the Twitter instance with the argument retry=True, then the HTTP error codes 429, 502, 503, and 504 will cause a retry of the last request.

If retry is an integer, it defines the maximum number of retry attempts.

Using the data returned

Twitter API calls return decoded JSON. This is converted into a bunch of Python lists, dicts, ints, and strings. For example:

x = twitter.statuses.home_timeline()

# The first 'tweet' in the timeline
x[0]

# The screen name of the user who wrote the first 'tweet'
x[0]['user']['screen_name']

Getting raw XML data

If you prefer to get your Twitter data in XML format, pass format="xml" to the Twitter object when you instantiate it:

twitter = Twitter(format="xml")

The output will not be parsed in any way. It will be a raw string of XML.

The TwitterStream class

The TwitterStream object is an interface to the Twitter Stream API. This can be used pretty much the same as the Twitter class, except the result of calling a method will be an iterator that yields objects decoded from the stream. For example::

twitter_stream = TwitterStream(auth=OAuth(...))
iterator = twitter_stream.statuses.sample()

for tweet in iterator:
    ...do something with this tweet...

Per default the TwitterStream object uses public streams. If you want to use one of the other streaming APIs, specify the URL manually.

The iterator will yield until the TCP connection breaks. When the connection breaks, the iterator yields {'hangup': True} (and raises StopIteration if iterated again).

Similarly, if the stream does not produce heartbeats for more than 90 seconds, the iterator yields {'hangup': True, 'heartbeat_timeout': True} (and raises StopIteration if iterated again).

The timeout parameter controls the maximum time between yields. If it is nonzero, then the iterator will yield either stream data or {'timeout': True} within the timeout period. This is useful if you want your program to do other stuff in between waiting for tweets.

The block parameter sets the stream to be fully non-blocking. In this mode, the iterator always yields immediately. It returns stream data, or None.

Note that timeout supercedes this argument, so it should also be set None to use this mode, and non-blocking can potentially lead to 100% CPU usage.

Twitter Response Objects

Response from a Twitter request. Behaves like a list or a string (depending on requested format), but it has a few other interesting attributes.

headers gives you access to the response headers as an httplib.HTTPHeaders instance. Use response.headers.get('h') to retrieve a header.

Authentication

You can authenticate with Twitter in three ways: NoAuth, OAuth, or OAuth2 (app-only). Get help() on these classes to learn how to use them.

OAuth and OAuth2 are probably the most useful.

Working with OAuth

Visit the Twitter developer page and create a new application:

https://dev.twitter.com/apps/new

This will get you a CONSUMER_KEY and CONSUMER_SECRET.

When users run your application they have to authenticate your app with their Twitter account. A few HTTP calls to Twitter are required to do this. Please see the twitter.oauth_dance module to see how this is done. If you are making a command-line app, you can use the oauth_dance() function directly.

Performing the "oauth dance" gets you an oauth token and oauth secret that authenticate the user with Twitter. You should save these for later, so that the user doesn't have to do the oauth dance again.

read_token_file and write_token_file are utility methods to read and write OAuth token and secret key values. The values are stored as strings in the file. Not terribly exciting.

Finally, you can use the OAuth authenticator to connect to Twitter. In code it all goes like this:

from twitter import *

MY_TWITTER_CREDS = os.path.expanduser('~/.my_app_credentials')
if not os.path.exists(MY_TWITTER_CREDS):
    oauth_dance("My App Name", CONSUMER_KEY, CONSUMER_SECRET,
                MY_TWITTER_CREDS)

oauth_token, oauth_secret = read_token_file(MY_TWITTER_CREDS)

twitter = Twitter(auth=OAuth(
    oauth_token, oauth_secret, CONSUMER_KEY, CONSUMER_SECRET))

# Now work with Twitter
twitter.statuses.update(status='Hello, world!')

Working with OAuth2

Twitter only supports the application-only flow of OAuth2 for certain API endpoints. This OAuth2 authenticator only supports the application-only flow right now.

To authenticate with OAuth2, visit the Twitter developer page and create a new application:

https://dev.twitter.com/apps/new

This will get you a CONSUMER_KEY and CONSUMER_SECRET.

Exchange your CONSUMER_KEY and CONSUMER_SECRET for a bearer token using the oauth2_dance function.

Finally, you can use the OAuth2 authenticator and your bearer token to connect to Twitter. In code it goes like this::

twitter = Twitter(auth=OAuth2(bearer_token=BEARER_TOKEN))

# Now work with Twitter
twitter.search.tweets(q='keyword')

License

Python Twitter Tools are released under an MIT License.

Comments
  • TwitterStream.user() fails on production server, works in local development environment

    TwitterStream.user() fails on production server, works in local development environment

    OK, this is a hard one.... when I've gotten this error before, it typically meant I lost the connection to twitter, and a quick restart fixes everything, but not anymore...

    Here is the stack trace:

    auth = twitter.Oauth( ... keys )

    Code:

    from twitter import * stream = twitter.stream.TwitterStream(auth=auth, domain='userstream.twitter.com') stream.user()

    Trace:

    Traceback (most recent call last): File "", line 1, in File "/usr/local/lib/python2.7/dist-packages/twitter/api.py", line 308, in call return self._handle_response(req, uri, arg_data, _timeout) File "/usr/local/lib/python2.7/dist-packages/twitter/stream.py", line 284, in _handle_response _timeout or timeout, heartbeat_timeout) File "/usr/local/lib/python2.7/dist-packages/twitter/stream.py", line 209, in handle_stream_response raise TwitterHTTPError(e, uri, 'json', arg_data) File "/usr/local/lib/python2.7/dist-packages/twitter/api.py", line 72, in init data = json.loads(data.decode('utf8')) File "/usr/lib/python2.7/json/init.py", line 338, in loads return _default_decoder.decode(s) File "/usr/lib/python2.7/json/decoder.py", line 366, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "/usr/lib/python2.7/json/decoder.py", line 384, in raw_decode raise ValueError("No JSON object could be decoded") ValueError: No JSON object could be decoded

    =========

    This code is from my program, which works just FINE in my local development environment.

    Local Dev =

    Ubuntu 14 Python 2.7 WingIDE VirtualEnvirnment with depenedencies installed.

    However, on my server, hosted on EC2 it fails:

    Ubuntu 14 Python 2.7 Virtual Environment Run from command line with python manage.py shell , then load program with execfile('mybot.py')

    The same code has been working, but stopped suddenly with the above JSON error.

    If I run the same code in DEV on my local system, it works, however running on production server, it fails.

    If compared the environments between both systems, and they SEEM to be the same...

    On the production server I CAN do OTHER streaming functionality like SENDING DM's to my twitter account.... So SENDING works, but listening with stream.user() FAILS with this JSON error.

    I would appreciate ANY suggestions. :)

    Thank you,

    PS: Love this tool, I think it's better than the other Python Twitter options out there.

    opened by lmaloney 23
  • Fix broken userstream and all other streams supposed to break after Jan 13 + add image support + fix diverses issues

    Fix broken userstream and all other streams supposed to break after Jan 13 + add image support + fix diverses issues

    Merry Christmas!... Twitter is moving all of its streaming APIs towards HTTP1.1 chunked encoded transfer and breaking the whole lib for us! https://dev.twitter.com/blog/deprecating-http-1.0-streaming-api

    Userstream passed already mid-november and has been broken since, cf #190 I first didn't pay much more attention to it than reading the issue thread since I only use the public statuses.filter stream. But I just found out about this announce and browsing issues it became clear the userstream issue here was coming from this change, which did happen on November 23rd in fact (https://dev.twitter.com/discussions/23224#comment-53758) just as the issues reported here confirm.

    The thing is the announce also says that on January 13, Twitter will apply it as well for all the other streaming calls, meaning they probably will all be broken as well. So this motivated me to fix the issue for userstream and supposedly for the other ones further on.

    The solution was to stop asking for gzip encoded data for streaming calls since they already answer not zipped with the HTTP1.0 calls (like statuses/filter for now) and should not be zipped when dealing with chunked transfer. This also required to adjust the parsing of the chunks to separate "delimited" length sent by twitter from actual data.

    I've tried it out successfully on a combination of calls on (public stream HTTP1.0 | user stream HTTP1.1chunked) x (not blocking | blocking | with timeout) x (low traffic | high traffic | high traffic with argument 'delimited') with python 2.6 & 2.7 only. I don't believe I've modified anything incompatible but any tryout from py3 users would be great.

    I also took the occasion to fix a couple other issues, including fixing some hanging when using the timeout with low traffic, providing TwitterHTTPErrors on streaming calls errors, fixing the broken follow create/destroy with cmdline and the irc bot, and completing the POST methods list.

    Considering the urge, I will personnally migrate my IRC bot gazouilleur to my branch until this is pulled or handled otherwise.

    git+https://github.com/RouxRC/[email protected]

    Happy tweeting holidays!

    PS: Twitter also announced an SSL change for Jan 6, but since all the calls are already using secure by default, we should't be at risk here.

    edit 28/12: I've completed this with fixing the tilde sending issue for python 2, and I added the support for API calls to send images as discussed in #127 , it now works when feeding the corresponding argument with raw read of a file. For instance:

    twitter.update_with_media(status="Youpi !", 'media[]' = open('img.jpg', 'rb').read())
    opened by RouxRC 21
  • Twitter Stream API + OAuth not working

    Twitter Stream API + OAuth not working

    I've used the code some months ago, with the streaming API and the OAuth method and it worked.

    Today I tried again and I'm getting a

    HTTP Error 401: Unauthorized
    

    passing through

     stream.py", line 52, in handle_stream_response
    

    and originating in

     urllib2.py, line 521, in http_error_default
    

    The same OAuth works fine with other methods: I tried both statuses.home_timeline() and direct_messages.new()

    opened by kuzeko 18
  • Twitter changed Trends API (again) so trends() no longer works

    Twitter changed Trends API (again) so trends() no longer works

    See https://dev.twitter.com/blog/changing-trends-api for an overview of the new API that is no longer compatible with this Python package (AFAICT.)

    In short, the previous Twitter(...).trends() approach no longer works, and a call of the form http://api.twitter.com/1/trends/1.json doesn't seem to be compatible with the design philosophy that's worked so well up till this point. We've previously brainstormed some ideas in https://github.com/sixohsix/twitter/issues/24 that might be worth revisiting here considering that there does seem to be a gravitation towards this particular scheme of encoding parameters as part of the URL itself.

    I'm happy to help work out a patch if we can come to agreement on what should be done here. As it stands, some new errata has been introduced into my book/code for Mining the Social Web, which uses this package extensively, so I'd like to help push though something quickly. Thanks.

    opened by ptwobrussell 17
  • Autodeploy to PyPI

    Autodeploy to PyPI

    As suggested in https://github.com/sixohsix/twitter/issues/356, I'll set up automated deploys:

    • Deploy to TestPyPI on merge to master, to make sure the release mechanism is working smoothly and avoid surprises on release day
    • Deploy to production PyPI for GitHub releases/tags

    I've set up a test twitter project on TestPyPI.

    @RouxRC If you create an account on https://test.pypi.org, I'll give you access too.

    Then, to use https://github.com/pypa/gh-action-pypi-publish, we then need to create API tokens for TestPyPI and PyPI and store them as secrets under https://github.com/sixohsix/twitter/settings.

    TODO:

    1. Add an API token called (say) twitter-ci at https://test.pypi.org/manage/account/token/
    2. Paste the token as TEST_PYPI_PASSWORD at https://github.com/sixohsix/twitter/settings/secrets/actions/new
    3. Repeat for production PyPI https://pypi.org/manage/account/token/, save as PYPI_PASSWORD

    More info on PyPI API tokens: https://pypi.org/help/#apitoken

    I don't have access to https://github.com/sixohsix/twitter/settings. @RouxRC Please could you either give me access to that, or please could you follow the instructions above to add the tokens?

    opened by hugovk 16
  • Fix streams timeout & hangup behavior + ensure python2.6 compat

    Fix streams timeout & hangup behavior + ensure python2.6 compat

    Here are the changes to fix the misbehavior of the timeout in case of low tweets by catching Twitter's keep-alive heartbeat signals thanks to the select.select originally added in #178 and still problematic as pointed out by @ksecrist in #202

    I also generalized the hangup to all cases since there is no reason to stay in infinite loop after a hangup in non-blocking mode.

    And to make things easier and avoid merging issues, I adapted the refacto and fixed python2.6 compatibility from @adonoho's #201

    opened by RouxRC 16
  • Test on GitHub Actions

    Test on GitHub Actions

    This tests with the same as Travis CI, and I replaced nightly with 3.10-dev, the nearest equivalent.

    Example: https://github.com/hugovk/twitter/actions/runs/360319693

    They fail for me because:

    details: {u'errors': [{u'message': u'User is over daily status update limit.', u'code': 185}]}
    

    Will try again tomorrow.

    opened by hugovk 15
  • A Simpler Fix to the Streaming Code due to Changes from Twitter on Jan. 13, 2014.

    A Simpler Fix to the Streaming Code due to Changes from Twitter on Jan. 13, 2014.

    Gentlefolk,

    First allow me to applaud and thank RouxRC on his fine work pushing this little library forward. This pull request would not have been possible without his efforts. That said, RouxRC has dropped a quite large pull request that had problems in my Python3 system. When I rolled back to Python2, the system started working but would not stay connected for very long.

    As a result of the above, I felt I needed to look into RouxRC's pull request in more detail and use just the parts I needed to get my streams running again. Any errors in this pull request are mine and do not reflect negatively on RouxRC or his code.

    RouxRC's streaming patch falls into two main areas. First, it modifies the api.py to respect a new property, gzip. I have largely copied his work here. I did simplify how he set the headers from 3 lines to one. The second fix occurs in stream.py. Once the gzip compression was turned off, I was able to see what Twitter is now sending us. Even though length delimiters are turned off, Twitter nonetheless is inserting a hex encoded number and a \r\n between JSON items. RouxRC and I differ in how we chose to address these changes. My fix is focussed upon handling those extra items if they appear in the stream, removing them and then returning to the existing control flow. The important code block is below and my changes occur with the if statement:

        while True:
            try:
                utf8_buf = self.buf.decode('utf8').lstrip()
                if utf8_buf and utf8_buf[0] != '{':  # Remove the hex delimiter length and extra whitespace.
                    utf8_buf = utf8_buf.lstrip('0123456789abcdefABCDEF')
                    utf8_buf = utf8_buf.lstrip()
                res, ptr = self.decoder.raw_decode(utf8_buf)
                self.buf = utf8_buf[ptr:].encode('utf8')
                yield wrap_response(res, self.handle.headers)
    

    RouxRC's code does this in a different way. I believe my solution is both shorter and more robust. But you, gentle reader, are the ultimate arbiter. RouxRC did identify in his code some opportunities to raise TwitterHTTPErrors. I've tried to duplicate those.

    I've run this set of fixes under Python 3.3.3 and Python 2.7.6 both on OS X 10.8.5 (Mountain Lion).

    In addition to the changes to the library, I modernized a test script, stream-example to take the OAuth parameters needed by modern Twitter. As I also use PyCharm, I've added .idea to the .gitignore file.

    Again, this simpler fix would not have been possible without the fine work of RouxRC. Thank you RouxRC.

    Anon, Andrew

    opened by adonoho 14
  • Userstream not working anymore.

    Userstream not working anymore.

    I'm having problems with user streams since a few days back. I can use the example in the README file and it seems to connect fine.

    But I don't get any messages what so ever.. And the stream connection seems to still be alive. I seems to be alive because even if I set the socket timeout to be about 1 min it never times out.

    It doesn't seem to raise any errors either so I don't really know what to do now.

    "Normal" streams IE just TwitterStream without specifying domain works so I have no Idea what the problem could be.

    opened by DarkDefender 14
  • Fix for broken PUT methods #414

    Fix for broken PUT methods #414

    Pass _method directly to urllib_request to enable PUT requests and also ensure consistency between signature and actual request,.

    Pass id parameter into auth.encode_params() for PUT requests, as required by two existing API methods using PUT.

    opened by snail-coupe 13
  • NameError: name 'Twitter' is not defined

    NameError: name 'Twitter' is not defined

    I'm using Python3.5 on ubuntu 16

    from twitter import *
    
    t = Twitter(auth=OAuth(access_token, access_secret, 
    	consumer_key, consumer_secret))
    print(t)
    

    when i run the code I get the error "NameError: name 'Twitter' is not defined"

    opened by prateekkrjain 13
  • Media uploading

    Media uploading

    I've been testing media uploading following the examples provided in the README. The method is based on creating a new instance of the Twitter class:

     t_upload = Twitter(domain='upload.twitter.com', auth=OAuth(token, token_secret, consumer_key, consumer_secret))
    

    And later using the old instance to add the uploaded media to a tweet:

      t.statuses.update(status="PTT ★", media_ids=",".join([id_img1, id_img2]))
    

    I've been testing a different approach, that could be like:

    1. Changing the domain in the instance of the Twitter class:

      t.domain = 'upload.twitter.com'

    2. Uploading the images with the original instance of the Twitter class (but with different domain).

    3. Changing the domain to the original one:

      t.domain = 'api.twitter.com'

    4. Publishing the tweet containing the images.

    I was wondering if this approach is ok (and, I believe, more simple than creating a secondary instance to upload images). If this is true, maybe it would be nice to modify de upload methods to change internally the domain and so on. Or, at least, maybe providing the adequate methods for changing the domains when needed.

    opened by fernand0 1
  • Test CI on Windows and macOS

    Test CI on Windows and macOS

    Follow on from https://github.com/python-twitter-tools/twitter/pull/451#issuecomment-1246747905.

    ~Drop support for Python 3.6, end-of-life on 2021-12-23.~ Moved to #454.

    On the CI, test Ubuntu with:

    • Python 2.7 (CPython and PyPy)
    • the lowest and highest 3.x versions
    • Any dev versions

    And also test Windows on 3.8 and macOS 3.9.

    opened by hugovk 4
  • twitter-archiver only works with recent tweets

    twitter-archiver only works with recent tweets

    hello, as said in the title i would like to archive all the tweets of an user even if they've been active for years and, then, have posted thousands of tweets. however, twitter-archiver allows me to collect only a couple of tweets throughout the current year - or sometimes end of last year.

    why is there a limit? and how can i bypass it, please?

    opened by msw9 1
  • twitter-archiver not working

    twitter-archiver not working

    i use this line of command (ms-dos) twitter-archiver <user> but here are the error messages that i get: Fail: Twitter sent status 400 for URL: 1.1/statuses/user_timeline.json using parameters (count=200&include_rts=1&screen_name=osezlefeminisme&tweet_mode=extended) details: {'errors': [{'code': 215, 'message': 'Bad Authentication data.'}]}

    CLI 
    opened by msw9 1
  • Roadmap Twitter v2

    Roadmap Twitter v2

    • [X] ensure code compatibility
    • [x] add helper class Twitter2
    • [x] add helper class TwitterStream2
    • [ ] update tests
    • [x] handle :id argument in middle of urls (i.e. /2/tweets/id/retweeted_by)
    • [x] better document middle arguments use and _id
    • [ ] complete internal help doc
    • [ ] improve expansions, fields arguments use
    • [ ] cleanup _json / params mess
    • [ ] Test all open v2 routes https://developer.twitter.com/en/docs/api-reference-index#Twitter
    • [ ] complete documentation
    • [ ] cleanup shell tools & irc bot ?

    example calls

    feature Documentation 
    opened by boogheta 2
Releases(twitter-1.19.6)
A bot created with Python that interacts with GroupMe

GroupMe_Bot This is a bot I'm working on a small groupme group I'm in. This is something I'll work on in my spare time. Nothing but just a fun little

0 May 19, 2022
Anti-corruption-bot - Anti corruption bot with python

anti-corruption-bot Test API (running via Flask) is currently hosted at https://

Richard Bankole 2 Feb 16, 2022
A multi-purpose Discord bot with simple moderation commands, reaction roles, reminders, and much more!

Nokari This is the rewrite of Nokari. There are still a lot of things to be done. I'm still working on the internal logic, so the bot basically has no

Norizon 13 Nov 17, 2022
Automate UCheck COVID-19 self-assessment form submission

ucheck Automate UCheck COVID-19 self-assessment form submission. Disclaimer ucheck automatically completes the University of Tornto's UCheck COVID-19

Ira Horecka 15 Nov 30, 2022
A simple script that loads and hot-reloads cogs when you save any changes

DiscordBot-HotReload A simple script that loads and hot-reloads cogs when you save any changes Usage @bot.event async def on_ready(): from HotRelo

2 Jan 14, 2022
Deepak Clouds Torrent is a multipurpose Telegram Bot writen in Python for mirroring files on the Internet to our beloved Google Drive.

Deepak Clouds Torrent is a multipurpose Telegram Bot writen in Python for mirroring files on the Internet to our beloved Google Drive.

Deepak Clouds 37 Oct 28, 2022
Обертка для мини-игры "рабы" на python

Slaves API Библиотека для игры Рабы на Python. Большая просьба Поставьте звездочку на репозиторий. Это много для меня значит. Версии Т.к. разработчики

Zdorov Philipp 13 Mar 31, 2021
Create custom Vanity URLs for Discord without 30 boosts

CustomVanity - Made by udp#6666 aka Apolo - OpenSource Custom Discord Vanity Creator How To Use Open CustomVanity.py Write your server invite code Wri

apolo 17 Aug 23, 2022
Discord group chat spammer concept.

GC Spammer [Concept] GC-Spammer for https://discord.com/ Warning: This is purely a concept. In the past the script worked, however, Discord ratelimite

Roover 3 Feb 28, 2022
Red-mail - Advanced email sending library for Python

Red Mail Next generation email sender What is it? Red Mail is an advanced email

Mikael Koli 313 Jan 08, 2023
The official Python client library for the Kite Connect trading APIs

The Kite Connect API Python client - v3 The official Python client for communicating with the Kite Connect API. Kite Connect is a set of REST-like API

Zerodha Technology 756 Jan 06, 2023
bot for hearthstone mercenaries

Hearthstone-Mercenaries-game-bot - prevention: Bot is not ready and now on the development stage estimated release date - 21.10.21 The main idea of th

Andrew Efimov 59 Dec 12, 2022
Python linting made easy. Also a casual yet honorific way to address individuals who have entered an organization prior to you.

pysen What is pysen? pysen aims to provide a unified platform to configure and run day-to-day development tools. We envision the following scenarios i

Preferred Networks, Inc. 452 Jan 05, 2023
A battle-tested Django 2.1 project template with configurations for AWS, Heroku, App Engine, and Docker.

For information on how to use this project template, check out the wiki. {{ project_name }} Table of Contents Requirements Local Setup Local Developme

Lionheart Software 64 Jun 15, 2022
An async python wrapper to interact with the Steam API and its CMs

steam.py A modern, easy to use, and async ready package to interact with the Steam API. Heavily inspired by discord.py and borrowing functionality fro

James Hilton-Balfe 90 Dec 15, 2022
All in one Search Engine Scrapper for used by API or Python Module. It's Free!

All in one Search Engine Scrapper for used by API or Python Module. How to use: Video Documentation Senginta is All in one Search Engine Scrapper. Wit

33 Nov 21, 2022
Docker image for epicseven gvg qq chatbot based on Xunbot

XUN_Langskip XUN 是一个基于 NoneBot 和 酷Q 的功能型QQ机器人,目前提供了音乐点播、音乐推荐、天气查询、RSSHub订阅、使用帮助、识图、识番、搜番、上车、磁力搜索、地震速报、计算、日语词典、翻译、自我检查,权限等级功能,由于是为了完成自己在群里的承诺,一时兴起才做的,所

Xavier Xiong 2 Jun 08, 2022
Python gets the friend's articles from hexo's friend-links

你是否经常烦恼于友链过多但没有时间浏览?那么友链朋友圈将解决这一痛点。你可以随时获取友链网站的更新内容,并了解友链的活跃情况。

129 Dec 28, 2022
Gdrive-python: A wrapping module in python of gdrive

gdrive-python gdrive-python is a wrapping module in python of gdrive made by @pr

Vittorio Pippi 3 Feb 19, 2022
A code that can make your 5 accounts stay 24/7 in a discord voice channel!

Voicecord A code that can make your 5 accounts stay 24/7 in a discord voice channel! Usage ・Fork the repo ・Clone it to replit ・Install the required pa

DraKenCodeZ 3 Jan 09, 2022