Giter Club home page Giter Club logo

bot's People

Contributors

alexal1 avatar alexowson avatar arthurspa avatar dependabot[bot] avatar dnush avatar dredozubov avatar foncekar avatar gvmturl avatar henriqueturl avatar mastrolube avatar patbengr avatar philip-ulrich avatar ugurkellecioglu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

bot's Issues

Better Random Sleep

What would you like to be added:

  • Accept a range for random sleep
  • Make default shorter time unless needed
  • Add parameter to "speed" it up

Why is this needed:

  • Certain people are saying it's too slow or something. It's a feature, but some can't appreciate it.

Specify a list of usernames to ignore

What would you like to be added: completely ignore liking images and follows from certain users

Why is this needed: if you have a business, you don't want to interact with the competition

Sugestion: increase available data in interacted_users.json

What would you like to be added:
As of now, the interacted_users.json contain two fields for each user: "last_interaction" and "following_status". It would be nice to add a field for each action:

  • Liked (int field, number of liked posts),
  • Followed (binary, did the bot follow this user?),
  • Unfollowed (binary, did the bot unfollow this user?)
  • Private, (binary, if the user is private)
  • blogger (string, wich blogger were you targeting when you interacted with this user)

Why is this needed:

  • I would like to calculate conversion rates later. For this, I would need to exclude private users that the bot didnt like and calculate how many of the liked users followed me. It would be also interesting to measure if liking more pics increases the conversion to follower rate.

I hope this is not hard to include in the jsons.

Interact by usernames txt wont find some users.

What happened: When searching for an username, the bot could'nt find it:
image

But the user existed. The problem is the bot makes the search in this first tab of instagram search. If you add a swipe right or click in the "person" icon, you would find the perfect string correspondence to the user instead of instagram suggestion:

image

After it, the gramaddict bot tries to find the bottom tabs of instagram (Search, home, profile), but as the keyboard wasn't closed, it fails and finally crashes.

Possible fixes in my opinion:

  • Temporary: just click to hide the keyboard and then skip the failed user. If you can tell me the path where the change is needed I can make it in my local installation.
  • Definitive: Try to execute the current process. If it fails, retry the user adding a swipe/click in the "person" icon to get the appropriated correspondence.

What you expected to happen:
The bot to find the user.

How to reproduce it (as minimally and precisely as possible):
You can try it with the username in my print.

Anything else we need to know?:

Environment:

  • GramAddict version: 1.2
  • Device Model/Emulator Type: Galaxy S8
  • Android Version: 8.0.0
  • Instagram Version:
  • Discord Ticket ID: *(if submitting crash log)

Relevant Logs:

[12/22 14:51:08]    DEBUG | Navigate to profile @elaborartes (views.py:300)
[12/22 14:51:09]    DEBUG | Single click (478, 125) (device_facade.py:469)
[12/22 14:51:09]    DEBUG | Close the keyboad (views.py:303)
[12/22 14:51:09]    DEBUG | 1.34s sleep (utils.py:135)
[12/22 14:51:12]    DEBUG | 1.32s sleep (utils.py:135)
[12/22 14:51:19]    ERROR | Cannot find user @elaborartes. (views.py:314)
[12/22 14:51:19]    DEBUG | Navigate to SEARCH (views.py:109)
[12/22 14:51:25]    DEBUG | Didn't find search in the tab bar... (views.py:123)
[12/22 14:51:25]    DEBUG | Navigate to HOME (views.py:109)
[12/22 14:51:31]    ERROR | Didn't find tab HOME in the tab bar... Maybe English language is not set!? (views.py:161)
[12/22 14:51:31]     INFO | Language was changed. We'll have to start from the beginning. (decorators.py:83)
[12/22 14:51:31]    DEBUG | Navigate to PROFILE (views.py:109)
[12/22 14:51:36]    ERROR | Didn't find tab PROFILE in the tab bar... Maybe English language is not set!? (views.py:161)




*Note: if you have a crash log, please do not attach the archive here as this is not a secure place to upload the sensitive data inside. Please open a ticket in Discord in #lobby and provide the ticket ID here.

User agent/Request header when used from Emulator

I want to ask about if Instagram will be able to detect that the traffic is coming from an emulator ? what will be the user agent and request header information sent to Instagram endpoints when using emulator ?

What about a real device will there be any difference between manually liking/commenting or using the automation ?

Allow verbose log in console

Currently it does not print debug logs to
the console, only crash report. We should allow by passing
a flag as argument for more verbose log.

It helps when testing.

Build docker image

What would you like to be added:

A Dockerfile to use the bot with docker for users who want it

Why is this needed:

Simple and fast way to use the bot on multiple platforms.
Personally I use this one with the Mangata launch script

Dockerfile.zip

specify to run during specific hours of the day

What would you like to be added:

being able to specify in which hours account can run in , or at least specify how many sessions per day ? either way it works for my needs

Why is this needed:

because it does not make sense for an account to run 24/7 , people do sleep.. etc.. doing this would make the bot behaviour to look more human

Allow to interact with an interractive account once again

What would you like to be added:

An option that allows us to go back to liking a profile after a number of days "X"

Why is this needed:

It is possible that the account with which we interact the first time is not reactive but becomes reactive after a second passage ect

Add all parameters to logging

Add all parameters to logging so we can see what parameters were run in the crash log. Once we switch to config files, we need to log those instead/as well.

If Instagram Crashes, reopen it

What would you like to be added:
Reopen instagram if it crashes

Why is this needed:
Sometimes is closes at open with the current version. Handle that gracefully as well as mid-action. The latter probably done in the decorator.

Raise Exception on username not found or at least handle it better

I think we should raise an exception on this issue and not let the user continue. The reason being that it's not tracking any of the actions done and it leads to bad situations where users may have been followed by the script, but not tracked. Forcing a user to "unfollow any" in order to remove them - or do it manually. I can't think of any valid reasons why we would continue if we can't get their username.

If we do want to continue, we should at least safe it to an "undefined" user or something so that data isn't lost.

Ref: https://github.com/GramAddict/bot/blob/master/GramAddict/core/storage.py#L27

Thoughts?

Bot restart after this error

What happened: Bot throws error posted in logs below and restart. Happens multiple times during session

What you expected to happen: To complete session without errors

How to reproduce it (as minimally and precisely as possible): Seems it occur randomly

Anything else we need to know?: Sometimes when bot likes photo it scrolls down and unlike the same one

Environment:

  • GramAddict version: 1.1.1
  • Device Model/Emulator Type: Nexus 6
  • Android Version: 8.1.0
  • Instagram Version: 167.1.0.25.120
  • Discord Ticket ID: *(if submitting crash log)

Relevant Logs:

ERROR | Traceback (most recent call last):
File "/home/pi/bot-1.1.1/GramAddict/core/device_facade.py", line 299, in get_bounds
return self.viewV2.info["bounds"]
File "", line 2, in info
File "/home/pi/.local/lib/python3.7/site-packages/retry/api.py", line 74, in retry_decorator
logger)
File "/home/pi/.local/lib/python3.7/site-packages/retry/api.py", line 33, in __retry_internal
return f()
File "/home/pi/.local/lib/python3.7/site-packages/uiautomator2/_selector.py", line 130, in info
return self.jsonrpc.objInfo(self.selector)
File "/home/pi/.local/lib/python3.7/site-packages/uiautomator2/init.py", line 435, in call
http_timeout)
File "/home/pi/.local/lib/python3.7/site-packages/uiautomator2/init.py", line 441, in _jsonrpc_retry_call
return self._jsonrpc_call(*args, **kwargs)
File "/home/pi/.local/lib/python3.7/site-packages/uiautomator2/init.py", line 513, in _jsonrpc_call
raise err
uiautomator2.exceptions.UiObjectNotFoundError: -32001 Jsonrpc error: <android.support.test.uiautomator.UiObjectNotFoundException> data: UiSelector[RESOURCE_ID_REGEX=com.instagram.android:id/profile_tabs_contain
er], method: objInfo

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/pi/bot-1.1.1/GramAddict/core/decorators.py", line 29, in wrapper
func(*args, **kwargs)
File "/home/pi/bot-1.1.1/GramAddict/plugins/interact_blogger_followers.py", line 129, in job
on_interaction,
File "/home/pi/bot-1.1.1/GramAddict/plugins/interact_blogger_followers.py", line 189, in handle_blogger
is_myself,
File "/home/pi/bot-1.1.1/GramAddict/plugins/interact_blogger_followers.py", line 313, in iterate_over_followers
device, username=username, can_follow=can_follow
File "/home/pi/bot-1.1.1/GramAddict/core/interaction.py", line 83, in interact_with_user
ProfileView(device).swipe_to_fit_posts()
File "/home/pi/bot-1.1.1/GramAddict/core/views.py", line 853, in swipe_to_fit_posts
resourceIdMatches="com.instagram.android:id/profile_tabs_container"
File "/home/pi/bot-1.1.1/GramAddict/core/device_facade.py", line 301, in get_bounds
raise DeviceFacade.JsonRpcError(e)
GramAddict.core.device_facade.DeviceFacade.JsonRpcError: -32001 Jsonrpc error: <android.support.test.uiautomator.UiObjectNotFoundException> data: UiSelector[RESOURCE_ID_REGEX=com.instagram.android:id/profile_ta
bs_container], method: objInfo




*Note: if you have a crash log, please do not attach the archive here as this is not a secure place to upload the sensitive data inside. Please open a ticket in Discord in #lobby and provide the ticket ID here.

TypeError: '<' not supported between instances of 'NoneType' and 'int'

Idk why i got that error

Crash-2020-11-18-22-41-39.zip
Here is the logs. i cut unnecessary parts.

and also here is the last call

File "C:\Users\ugurk\OneDrive\Belgeler\GitHub\gramaddict\GramAddict\core\filter.py", line 94, in check_profile
   if field_min_followers is not None and followers < int(field_min_followers):

TypeError: '<' not supported between instances of 'NoneType' and 'int'

btw i use some utilizations which couldn't merged but i think it is not about that. It was working for 2 hour if it is important.

min_posts filter is not working?

Hello!
I cant find occurence of "min_posts" in project code. This filter is not working?
Sometimes i can see, that bot tries to like post in, for example, 3rd column-1st row. But profile have only 1 post and i have filter for minimum of 7 posts.

Interact by location

What would you like to be added: Interaction based on location

Why is this needed: To reach more specific people

New Plug-in: --hashtag-posts

What would you like to be added: interact to post owners in recent hashtag view

Why is this needed: some people would be interested to interact with these users to grow up their visibility / create collaborations with them

Targets list support

Targets list support is crucial for all those looking for more precise targeting . This feature seems to already be part of the Imsoniac bot but wasn't added to GramAddict .

Why is this needed:

Many people already have lists of targets that they have previously scraped and they don't want to be dependent on the random interactions of a bot .

example : Previously scraping comments and likes from a list of posts and making direct interactions on those user profiles

Send direct and share post

Hey, I just started to use your library and am loving it. I currently have a selenium bot that I use to send directs and posts to targets.

It would be great to have it implemented in your android tool because of all the IG bot suspicion limits on browsers and etc.

Thanks again for your work!

Profile header values not showing

I've had GramAddict running for a couple of hours a day for some days now. Today, suddenly the "Posts", "Followers" and "Following" counts on the header of profiles stopped showing up.

Resources row_profile_header_textview_followers_count and row_profile_header_textview_following_count just aren't there.

Screenshot:
image

I'ts happening on both emulator and physical device, but only with the account I've been using with GramAddict.

This of course makes followings_text_view.get_text() and followers_text_view.get_text() return nothing, and in turn messes up the filtering, so in my case for example, the bot skipped all interactions as None is less than the field_min_followers I had set.

Could this be an anti botting measure? Has anyone else experienced this?

If this really is some desperate alternative to rate-limiting, how do you propose GramAddict should handle it? Fall back to not using follower/following count and just interacting indiscriminately?

Curious to hear your take on this.

unexpected keyword argument 'capture_output' on startup

Hey. First of all: many thanks for the effort to keep software free and open source ❤️

In contrast to insomniac I have an issue on startup the app and I can't find the point to fix it:

(.venv) ➜  bot git:(master) python3 run.py --blogger-followers kwerfeldein --device ce01171159e094490c
[11/22 15:33:06]     INFO | GramAddict 1.0.4
[11/22 15:33:06]     INFO | Loading plugins . . .
[11/22 15:33:06]     INFO |   - ActionUnfollowFollowers: This plugin handles the functionality of unfollowing your followers
[11/22 15:33:06]     INFO |   - CoreArguments: This plugin simply adds core arguments
[11/22 15:33:08]     INFO |   - DataAnalytics: Generates a PDF analytics report of specified username session data
[11/22 15:33:08]     INFO |   - InteractBloggerFollowers: This plugin handles the functionality of interacting with a bloggers followers
[11/22 15:33:08]     INFO |   - InteractHashtagLikers: This plugin handles the functionality of interacting with a bloggers followers
[11/22 15:33:08]     INFO | Instagram version: not found
[11/22 15:33:08]     INFO | -------- START: 2020-11-22 15:33:08.220735 --------
[11/22 15:33:08]     INFO | Open Instagram app
Traceback (most recent call last):
  File "run.py", line 3, in <module>
    GramAddict.run()
  File "/home/julian/d/bot/GramAddict/__init__.py", line 154, in run
    open_instagram(device_id)
  File "/home/julian/d/bot/GramAddict/core/utils.py", line 80, in open_instagram
    cmd_res = subprocess.run(cmd, capture_output=True, shell=True, encoding="utf8")
  File "/usr/lib/python3.6/subprocess.py", line 423, in run
    with Popen(*popenargs, **kwargs) as process:
TypeError: __init__() got an unexpected keyword argument 'capture_output'

When I list the connected devices, it shows me my phone

(.venv) ➜  bot git:(master) adb devices                                                               
List of devices attached
ce01171159e094490c	device

The screen is active when I start the script. The dependencies are installed.

Can anyone give me a hint how to solve it?

update all (appropriate) arguments to support ranges

What would you like to be added:
Needs to be done for every plugin - maybe should be done before the plugins so we don't have to do the calculation in the plugin? Or do we want it to be extra random?

Why is this needed:
For randomness.

limit actions per day

What would you like to be added:
it would be nice if we can specify the max number of follows/likes per day , and when that limit has been reached basically just quit the script

Why is this needed:

because IG has a daily limit per day that if we go overboard then account would get temp blocked, i know right now there is a way to specify repeat x-y minutes

The program crashes even though connection with cable/wifi works.

It starts and opens the instagram app but before it can do anything else it crashes.

Terminal output:
Traceback (most recent call last):
File "/home/grenademaster666/gramaddict/src/device_facade.py", line 184, in click
self.viewV2.click(UI_TIMEOUT_LONG)
File "/home/grenademaster666/.local/lib/python3.8/site-packages/uiautomator2/_selector.py", line 155, in click
self.session.click(x, y)
File "/home/grenademaster666/.local/lib/python3.8/site-packages/uiautomator2/init.py", line 996, in click
self.jsonrpc.click(x, y)
File "/home/grenademaster666/.local/lib/python3.8/site-packages/uiautomator2/init.py", line 435, in call
return self.server._jsonrpc_retry_call(self.method, params,
File "/home/grenademaster666/.local/lib/python3.8/site-packages/uiautomator2/init.py", line 442, in _jsonrpc_retry_call
return self._jsonrpc_call(*args, **kwargs)
File "/home/grenademaster666/.local/lib/python3.8/site-packages/uiautomator2/init.py", line 514, in _jsonrpc_call
raise err
uiautomator2.exceptions.JSONRPCError: -32001 Jsonrpc error: <java.lang.SecurityException> data: java.lang.SecurityException: Injecting to another application requires INJECT_EVENTS permission
at android.os.Parcel.createException(Parcel.java:2074)
at android.os.Parcel.readException(Parcel.java:2042)
at android.os.Parcel.readException(Parcel.java:1990)
at android.app.IUiAutomationConnection$Stub$Proxy.injectInputEvent(IUiAutomationConnection.java:471)
at android.app.UiAutomation.injectInputEvent(UiAutomation.java:597)
at com.github.uiautomator.stub.TouchController.injectEventSync(TouchController.java:38)
at com.github.uiautomator.stub.TouchController.touchDown(TouchController.java:47)
at com.github.uiautomator.stub.AutomatorServiceImpl.click(AutomatorServiceImpl.java:206)
at java.lang.reflect.Method.invoke(Native Method)
at com.googlecode.jsonrpc4j.JsonRpcBasicServer.invoke(JsonRpcBasicServer.java:467)
at com.googlecode.jsonrpc4j.JsonRpcBasicServer.handleObject(JsonRpcBasicServer.java:352)
at com.googlecode.jsonrpc4j.JsonRpcBasicServer.handleJsonNodeRequest(JsonRpcBasicServer.java:283)
at com.googlecode.jsonrpc4j.JsonRpcBasicServer.handleRequest(JsonRpcBasicServer.java:251)
at com.github.uiautomator.stub.AutomatorHttpServer.serve(AutomatorHttpServer.java:100)
at fi.iki.elonen.NanoHTTPD.serve(NanoHTTPD.java:2244)
at fi.iki.elonen.NanoHTTPD$HTTPSession.execute(NanoHTTPD.java:945)
at fi.iki.elonen.NanoHTTPD$ClientHandler.run(NanoHTTPD.java:192)
at java.lang.Thread.run(Thread.java:919)
, method: click

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "run.py", line 518, in
main()
File "run.py", line 118, in main
) = get_my_profile_info(device)
File "/home/grenademaster666/gramaddict/src/action_get_my_profile_info.py", line 9, in get_my_profile_info
navigate(device, Tabs.PROFILE)
File "/home/grenademaster666/gramaddict/src/navigation.py", line 24, in navigate
button.click()
File "/home/grenademaster666/gramaddict/src/device_facade.py", line 186, in click
raise DeviceFacade.JsonRpcError(e)
src.device_facade.JsonRpcError: -32001 Jsonrpc error: <java.lang.SecurityException> data: java.lang.SecurityException: Injecting to another application requires INJECT_EVENTS permission
at android.os.Parcel.createException(Parcel.java:2074)
at android.os.Parcel.readException(Parcel.java:2042)
at android.os.Parcel.readException(Parcel.java:1990)
at android.app.IUiAutomationConnection$Stub$Proxy.injectInputEvent(IUiAutomationConnection.java:471)
at android.app.UiAutomation.injectInputEvent(UiAutomation.java:597)
at com.github.uiautomator.stub.TouchController.injectEventSync(TouchController.java:38)
at com.github.uiautomator.stub.TouchController.touchDown(TouchController.java:47)
at com.github.uiautomator.stub.AutomatorServiceImpl.click(AutomatorServiceImpl.java:206)
at java.lang.reflect.Method.invoke(Native Method)
at com.googlecode.jsonrpc4j.JsonRpcBasicServer.invoke(JsonRpcBasicServer.java:467)
at com.googlecode.jsonrpc4j.JsonRpcBasicServer.handleObject(JsonRpcBasicServer.java:352)
at com.googlecode.jsonrpc4j.JsonRpcBasicServer.handleJsonNodeRequest(JsonRpcBasicServer.java:283)
at com.googlecode.jsonrpc4j.JsonRpcBasicServer.handleRequest(JsonRpcBasicServer.java:251)
at com.github.uiautomator.stub.AutomatorHttpServer.serve(AutomatorHttpServer.java:100)
at fi.iki.elonen.NanoHTTPD.serve(NanoHTTPD.java:2244)
at fi.iki.elonen.NanoHTTPD$HTTPSession.execute(NanoHTTPD.java:945)
at fi.iki.elonen.NanoHTTPD$ClientHandler.run(NanoHTTPD.java:192)
at java.lang.Thread.run(Thread.java:919)
, method: click

         /////////////                grenademaster666@pop-os 
     /////////////////////            ----------------------- 
  ///////*767////////////////         OS: Pop!_OS 20.04 LTS x86_64 
//////7676767676*//////////////       Host: Nitro AN515-51 V1.13 

/////76767//7676767////////////// Kernel: 5.8.0-7625-generic
/////767676///76767/////////////// Uptime: 23 mins
///////767676///76767.///7676
/////// Packages: 2851 (dpkg), 29 (flatpak),
/////////767676//76767///767676//////// Shell: bash 5.0.17
//////////76767676767////76767///////// Resolution: 1920x1080
///////////76767676//////7676////////// DE: GNOME
////////////,7676,///////767/////////// WM: Mutter
/////////////*7676///////76//////////// WM Theme: Pop
///////////////7676//////////////////// Theme: Sweet-Dark [GTK2/3]
///////////////7676///767//////////// Icons: candy-icons [GTK2/3]
//////////////////////'//////////// Terminal: gnome-terminal
//////.7676767676767676767,////// CPU: Intel i7-7700HQ (8) @ 3.800GHz
/////767676767676767676767///// GPU: Intel HD Graphics 630
/////////////////////////// Memory: 3286MiB / 7841MiB
/////////////////////
/////////////

Tried the same with root but no luck.

specify a list of usernames to interact with

What would you like to be added:
being able to specify a targets.txt with a list of pre-filtered usernames that we interact with

Why is this needed:
because going to the account one by one and checking it against the filter is such a waste of time and data bandwidth, there are lots of tools out there to scrape and filter instagram and it's better if we do it that way

Add error handling to analytics

Particularly:

  • Check if follower count is missing or None.
  • Check if profile exists or not

Maybe while we are in there; clean up the code in general.

UIAutomator2 lets anyone on the network control/view your device!

I discovered something very concerning just now.

When using uiautomator2, which is what GramAddict is based around, it silently installs the application ATX-Agent on your device, which opens a webserver on TCP port 7912, that lets anyone on the network, with ZERO form of authentication, execute code, install apps, exfiltrate private data etc. on your device and view the screen remotely.

As soon as you're running GramAddict, this webserver is started. This is a HUGE security concern, and should be addressed immediately!

Try it yourself:

  1. Find the Wi-Fi IP address of your device:
    adb shell ip route | awk '{print $9}'
    (NOTE: It is trivial for anyone on the same network to discover your device and the running webserver)

  2. Run GramAddict as ususal.

  3. Using another device on the same network, go to http://[PHONE IP]:7912 in your browser.

This is what you're presented with:
image

image

(censored for my privacy)
image

(Not showing the API page, as it exposes too much personal info. You can view its endpoints and capabilities at the ATX Agent page linked above)

This is extremely worrying!

ERROR: Could not find like button below the post

What happened: Once the script is running, for each profile visited it throws back an "ERROR: Could not find like button below the post. then WARNING: Fail to like post. Let's continue..."

Please see screenshot:
https://i.imgur.com/viw5guO.jpg

It says "Could not like photo". But, it likes the photo and goes to the next profile anyway.

What you expected to happen:

How to reproduce it (as minimally and precisely as possible): To reproduce the error/warning just run the script.

Anything else we need to know?: This is version number 1.1.1

Environment:

  • GramAddict version: 1.1.1
  • Device Model/Emulator Type: Huawei Mate 8 Pro
  • Android Version: 7.0
  • Instagram Version: 167.0.0.24.120
  • Discord Ticket ID: wordbyte *(if submitting crash log)

Relevant Logs:




*Note: if you have a crash log, please do not attach the archive here as this is not a secure place to upload the sensitive data inside. Please open a ticket in Discord in #lobby and provide the ticket ID here.

scrolls limit argument

What would you like to be added:

  • provide an argument to limit how many "failed" scrolls are done before you move to the next source

Why is this needed:

  • if you go too deep in the followers (and also kinda likes) you are getting stale data. It's better to move onto the next post than waste time scrolling.

Allow per-user filters

What would you like to be added:
Per user filters

Why is this needed:
so you can filter per user - look in the folder for the user where the session data is stored. username/filter.py

What is GramAddict?

Introduction

The original insomniac project has gone closed source and paid. Along with that, a new feature as well as some old ones have been locked behind a paywall. Some might say this is the natural progression of software - and you may be right in some cases. The main issue was that people like myself were actively contributing to the project and 1) Now cannot 2) Would be profited off of with no benefit to ourselves. IMO, the more FOSS software the better and I originally contributed thinking this would remain open source like it was. This project is an attempt to fork this into a new and actual FOSS project that developers can continue to contribute to.

Funding

All great projects eventually grow to where they require multiple people owning it or a source of funding. When you start open source and let people contribute, typically people who already did contribute, who tried to contribute, or who were planning on contribute feel slighted when the project goes closed source. As long as I am alive and kicking, this fork of the original will NEVER go closed source. If we ever determine that we need funding - it will be voluntary and/or done in a way that the source is still available and the people developing the project will still be able to work and hack on the source... even to the point of unlocking features otherwise "locked" behind the paywall. To be clear though, I would like to avoid any type of funding aside from voluntary donations.

What's next

It sounds like there are others that are in the boat for forking, so let's come together and discuss this. Maybe we start up our own discord server to help facilitate the discussion. Probably best to stick to this GH issue for now. I'd like another experienced Python developer to co-own this project with me (in terms of GH ownership) and we'd put it in it's own proper org so it's not under any one persons name. We also need to do all the TODO below plus more. Let me know if you are interested in being a co-owner of the GH repository or if you plan to contribute below.

TODO

  • Rebase to v2
  • Give it a new name! Because we can't live off of the old one.
  • Find contributors! If you're reading this, that means you!
  • reuse whatever bugfixes that were made since then - if they are even in the source now
  • update the README.md file
  • Implement a contributing guidelines and a proper ci/cd process so everyone keeps their sanity.
  • Figure out distribution - admittedly going to pip was a good move. Encrypting the source files not so much.
  • Other stuff... like the new features and bugfixes. 😃

Make this repo easier to discover

I only found this through someone dm'ing me on discord. Insomoniac pops up pretty easily if you search for adb based instagram bots but this one is almost invisible. I think it would help if we invest some effort into making this easier to discover and find, so we can 1) get more users 2) get more people contributing.

A few easy ways to do this is 1) add tags 2) add description 3) post on InstaPy issues (similar to Insomniac)

Config files

The parameters are getting INSANE

What would you like to be added:

  • per username config files - should be in the same folder as the data
  • per username filters - should be in the same folder as the data

Why is this needed:
I'm not going to explain to myself why I am going to code this, but really it's pretty obvious.

Expecting Delimiter

What happened:
Traceback (most recent call last): File "C:\bot-master\run.py", line 3, in <module> GramAddict.run() File "C:\bot-master\GramAddict\__init__.py", line 233, in run storage = Storage(session_state.my_username) File "C:\bot-master\GramAddict\core\storage.py", line 35, in __init__ self.interacted_users = json.load(json_file) File "C:\Users\user\AppData\Local\Programs\Python\Python39\lib\json\__init__.py", line 293, in load return loads(fp.read(), File "C:\Users\user\AppData\Local\Programs\Python\Python39\lib\json\__init__.py", line 346, in loads return _default_decoder.decode(s) File "C:\Users\user\AppData\Local\Programs\Python\Python39\lib\json\decoder.py", line 337, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "C:\Users\user\AppData\Local\Programs\Python\Python39\lib\json\decoder.py", line 353, in raw_decode obj, end = self.scan_once(s, idx) json.decoder.JSONDecodeError: Expecting ':' delimiter: line 13187 column 27 (char 413321)

What you expected to happen:
Bot working as usual

How to reproduce it (as minimally and precisely as possible):
starting BotScript, which was working an hour ago

Anything else we need to know?:
Nope

Environment:

  • GramAddict version: 1.1.1
  • Device Model/Emulator Type: MEMU
  • Android Version: 7.1
  • Instagram Version: 167.1.0.25.120

Relevant Logs:

Multi-Step Compatibility

This may be a longer term goal considering all the possibilities this opens, but we should allow the bot to do multiple things in sequence without exiting.

For example, as someone using the bot I would want to be able to go and unfollow people after I followed them. So if I followed 20 people that day, I'd also want to unfollow 20 people. The reason for this being is that if someone looks at socialblade or igblade - you can't tell that I followed or unfollowed people that day. It would be a net gain of zero (because these services are rate limited to basically one update a day).

It won't help with fooling instagram, but it helps from a public relations standpoint.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.