diff --git a/README.md b/README.md index e66b73e..313c6d3 100755 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ It's like Sopel, except rewritten from scratch using Twisted as a base and over ## Requirements Python 3.6+ -Python packages: `twisted, python-dateutil, requests, bs4, wolfram, pyenchant` +Python packages: `twisted, python-dateutil, requests, bs4, wolfram, pyenchant, http-request-randomizer` ## Config `nickname` - The nickname the bot will use. @@ -48,7 +48,11 @@ units = nonmetric tmdb_api_key = API_KEY [currency] -api_key = API_KEY +api_key = API_KEY + +[samefag] +max_queries = 10 +timeout = 360 ``` ## TODO diff --git a/modules/samefag.py b/modules/samefag.py new file mode 100644 index 0000000..fb3f816 --- /dev/null +++ b/modules/samefag.py @@ -0,0 +1,59 @@ +""" +This module sends samefag votes to akun. +Be discreet about it. +""" + +import time +from http_request_randomizer.requests.proxy.requestProxy import RequestProxy + +VOTE_URL = 'https://fiction.live/api/anonkun/voteChapter' + +def vote(poll_id, vote_id, numvotes, timeout): + """ + Takes in vote identifiers and sends the + specified number of votes through random proxies. + Timeout is in seconds. + Returns a string message. + """ + start_time = time.time() + req_proxy = RequestProxy() + payload = { + '_id': poll_id, + 'vote': vote_id + } + i = 0 + while i < numvotes: + request = req_proxy.generate_proxied_request(VOTE_URL, method = 'POST', data = payload, req_timeout=20) + if request is not None and request.status_code == 200: + i += 1 + request = None + if time.time() - start_time > timeout: + return "Voting timed out, " + str(i) + " votes successfully cast" + return str(i) + " votes successfully cast" + +@thread +@commands('samefag') +@example('.samefag poll_id option_id numvotes') +@example('Illustrated guide: https://i.imgur.com/fhFI2yi.png') +@example('.samefag hRChW6prwF7v7sNi5 21 2') +def samefag(bot, trigger): + """ + Samefags votes. + """ + max_queries = bot.config.samefag.max_queries + timeout = bot.config.samefag.timeout + if not max_queries or not timeout: + return bot.reply("Module not configured") + max_queries = int(max_queries) + timeout = int(timeout) + + poll_id = trigger.group(2) + vote_id = trigger.group(3) + numvotes = trigger.group(4) + try: + numvotes = int(numvotes) + except TypeError: + return bot.reply("Invalid parameters") + numvotes = min(numvotes, max_queries) + bot.reply("Casting votes...") + bot.reply(vote(poll_id, vote_id, numvotes, timeout))