dolfies / discord.py-self

A fork of the popular discord.py for user accounts.
https://discordpy-self.rtfd.io/en/latest/
MIT License
717 stars 163 forks source link

[WIP] v1.9 of discord.py-self #57

Closed dolfies closed 3 years ago

dolfies commented 3 years ago

Summary

Here's a (relatively) short, outdated, non-exhaustive list of the changes in this version:

Note: This is not everything.

Documentation

Before this is released and pushed to PyPi, I'll update the website (which is kinda trash right now) with an exhaustive list of everything public that was added, removed, and changed.

I am not going to document internal changes (outside of updating docstrings) as that will take waaayyy too long.

Credits

Huge thanks to arandomnewaccount and Discord-S.C.U.M for helping me navigate the mess that is Discord's APIs.

Conclusion

This version of the project is almost finished. To keep the feature-creep back, I'm only going to do the following before release:


Some people have been asking about what will happen when 2.0 releases. I will rebase this project to that version, however, it won't be quick. v2.0 adds type-hints to the entire project, completely removes everything user-related, and changes a lot of things internally.

A lot of people have asked me to rename the project, because it conflicts with the original discord.py. I will not be doing this. I have chosen to keep the same package name in the name of backwards-compatibility. There is a scary amount of closed-source selfbots that cannot be easily edited to change import discord to import packagename as discord. Python has a great feature called virtual environments that can help people wanting to use both libs.


I also want to address one final issue

I see a lot of Python beginners using this project to create something that would work perfectly fine as a regular bot. I want to make it clear that you shouldn't break the Discord ToS for no reason (no matter how bad it is), and that working with a library such as this or the original discord.py for your first coding adventure is not a good idea. Get familiar with Python first, and then come back to the mess that is the Discord API. If you do come back, consider using a regular bot. I don't want script-kiddies getting banned for being curious. Been there, done that.

The reason I created this fork was to fix/improve upon discord.py's support of selfbots, and keep it maintained when discord.py removes it. Even though selfbots are against Discord ToS, I believe people should have a choice; writing code isn't against ToS, but using this library, unfortunately, is. For that reason, I cannot ever recommend anybody ever uses this, and I carry no responsibility for any crap you do.

In my opinion, Discord banning selfbots was an incredibly stupid idea. It hasn't stopped bad actors from using them, it has only affected regular people trying to enhance their chat experience on what is (or at least used to be) a wonderful platform, with a wonderful community, and caring staff.

They had good intentions, but the selfbot detection is easy to work around (and always will be). Raids, dm spam, and all the other cons of selfbots still occur. Raiders, spammers, and advertisers don't care if their alts get disabled, or even if their mains get banned; they'll just generate a few hundred more tokens and continue. Disabled accounts only affect the people that aren't raiding, spamming, or advertising; just having fun. The selfbot ban only stops people that actually use Discord for keeping in touch with friends and being a part of communities they love, and wanted to tinker, carry around some extra chatting features, and add functionality to their servers.

Selfbotting is very low-risk to people that will abuse it, and high-risk to people that want to mess around and create cool things on their account.

The solution is not banning selfbotting as a whole. It is acting against people who abuse the Discord API. If you support this, please go vote here and tell Discord how you feel.

For all of you saying "just use a bot":

~Dolfies

dolfies commented 3 years ago

Since it is no longer set Self_bot=True on startup, commands will never be executed due to:

I'm not sure what you mean. The behavior of the self_bot kwarg hasn't changed.

caiocinel commented 3 years ago

I'm not sure what you mean. The behavior of the self_bot kwarg hasn't changed.

My stupidity, not to lose the habit ;( It's past my time to go to bed

dolfies commented 3 years ago

My stupidity, not to lose the habit ;( It's past my time to go to bed

Been there, done that lol

regulad commented 3 years ago

Would it be possible to reimplement the Client#login method so it accepts an email and password, like in d.py < 1.0?

dolfies commented 3 years ago

Would it be possible to reimplement the Client#login method so it accepts an email and password, like in d.py < 1.0?

I'm working on an extension library (like discord.ext.commands) to wrap the accounts APIs.

regulad commented 3 years ago

Would it be possible to reimplement the Client#login method so it accepts an email and password, like in d.py < 1.0?

I'm working on an extension library (like discord.ext.commands) to wrap the accounts APIs.

Cool! Looking forward to progress. Will this be in v1.9?

dolfies commented 3 years ago

Would it be possible to reimplement the Client#login method so it accepts an email and password, like in d.py < 1.0?

I'm working on an extension library (like discord.ext.commands) to wrap the accounts APIs.

Cool! Looking forward to progress. Will this be in v1.9?

Probably not. I'm trying (but kinda failing) to keep the feature-creep back, but I want to release 1.9 ASAP since the current version has a lot of problems.

destroyace commented 3 years ago

Maybe include a more robust header (http.py) that includes information like a referrer, etc.?

dolfies commented 3 years ago

Maybe include a more robust header (http.py) that includes information like a referrer, etc.?

If you mean the super properties, they are what the web client sends.

If you mean the actual headers, the only thing not 100% accurate is the Referer header, but it applies 90% of the time so it doesn't really matter.

destroyace commented 3 years ago

Okay, let me know if you want the referrer header. I have a sample scraped one from a real Discord request.

dolfies commented 3 years ago

Okay, let me know if you want the referrer header. I have a sample scraped one from a real Discord request.

The referer header isn't static; it changes based on, well, what's referring you to a specific domain.

I have it hard-coded to /channels/@me because that can refer you to pretty much anywhere. It isn't the best solution, but it won't really look suspicious to Discord either.

destroyace commented 3 years ago

Okay, let me know if you want the referrer header. I have a sample scraped one from a real Discord request.

The referer header isn't static; it changes based on, well, what's referring you to a specific domain.

I have it hard-coded to /channels/@me because that can refer you to pretty much anywhere. It isn't the best solution, but it won't really look suspicious to Discord either.

Ah yeah, that was what I did as well. Is this a 1.9 feature, because I don't see it in http.py?

dolfies commented 3 years ago

Ah yeah, that was what I did as well. Is this a 1.9 feature, because I don't see it in http.py?

Check http.py in the development branch.

dolfies commented 3 years ago

This is basically ready, and the "docs" are finally up. Unless major bugs are found, I will be pushing soon.

duartesaraiiva commented 3 years ago

Can't launch my bot with the latest commit in the dev branch File "E:\Projects\SelfBOT\.env\lib\site-packages\discord\state.py", line 451, in parse_ready_supplemental self.user = user = ClientUser(state=self, data=data['user']) File "E:\Projects\SelfBOT\.env\lib\site-packages\discord\user.py", line 565, in __init__ self.note = Note(state, self.id, user=self) AttributeError: 'ClientUser' object has no attribute 'note' Exception ignored in: <function _ProactorBasePipeTransport.__del__ at 0x0000019EB20E3F70>

dolfies commented 3 years ago

Crap. Forgot to add it to the slots. Commit incoming.

dolfies commented 3 years ago

That's what happens when you forget to git push.

destroyace commented 3 years ago

Is there a scheduled update date for v1.9? Thanks.

dolfies commented 3 years ago

It's basically done. This week I'm just going to do some bug-testing.

If everything goes well it should be out by the weekend.

I would appreciate people looking over the docs for mistakes and testing out the update.