janaSunrise / overflow-discord-bot

A small bot designed to help you with coding and finding and solving issues faster by integrating stack overflow workflow into discord.
GNU General Public License v3.0
3 stars 2 forks source link

License violation notice #1

Closed ItsDrike closed 3 years ago

ItsDrike commented 3 years ago

Abstract/Main description

Hi there, I wanted to let you know that you are using copyrighted code from Codin-Nerds/Neutron-Bot, this code is free to be used, but it is fully licensed under copy-left GPLv2, which does require you to mention the original repository. Also, it does require that all parts of the code-base that use GPL-ed code are also licensed under GPL, which will in your case, be basically everything because some of the core code is taken, and the bot is basically fully relying on it.

This is a breach of license terms and so I'd like to request that you either remove this code from your repositories or update your license with a copyright mention on affected files, or a global copyright notice in the readme file.

You can check more about GPLv2 on tldrlegal.com, which does a great job at simplifying licenses to just simple points, but of course, you can always read the full text in our repository.

Specific chunks of code, which are in license violation

bot/ main directory

init_db function in bot/__init__.py ### Your code https://github.com/janaSunrise/overflow-discord-bot/blob/59564faff2b893c77aec8f7e42fc90b062908fa1/bot/__init__.py#L57-L77 ### Neutron-Bot code https://github.com/Codin-Nerds/Neutron-Bot/blob/f8211efce2977d21ee5cff557f000fcc4e0343bc/bot/core/bot.py#L36-L53 ### Note This function is the exact replica of the function from Neutron-Bot, the only difference is exception check order, docstring, and the function name for loading the tables into the scope. Apart from that, it's basically word to word the exact function.
load_extensions function in bot/__init__.py ### Your code https://github.com/janaSunrise/overflow-discord-bot/blob/59564faff2b893c77aec8f7e42fc90b062908fa1/bot/__init__.py#L79-L88 ### Neutron-Bot code https://github.com/Codin-Nerds/Neutron-Bot/blob/f8211efce2977d21ee5cff557f000fcc4e0343bc/bot/core/bot.py#L27-L34 ### Note It is relatively obvious that this will be implemented in a similar manner, but this is basically an exact copy of the same function in Neutron-Bot, word for word, which isn't so common anymore.
on_ready in bot/__init__.py ### Your code https://github.com/janaSunrise/overflow-discord-bot/blob/59564faff2b893c77aec8f7e42fc90b062908fa1/bot/__init__.py#L98-L105 ### Neutron-Bot code https://github.com/Codin-Nerds/Neutron-Bot/blob/f8211efce2977d21ee5cff557f000fcc4e0343bc/bot/core/bot.py#L55-L63 ### Note This code is fairly standard, but you have made a word-to-word exact replica of this function.
run in bot/__init__.py ### Your code https://github.com/janaSunrise/overflow-discord-bot/blob/59564faff2b893c77aec8f7e42fc90b062908fa1/bot/__init__.py#L112-L117 ### Neutron-Bot code https://github.com/Codin-Nerds/Neutron-Bot/blob/f8211efce2977d21ee5cff557f000fcc4e0343bc/bot/core/bot.py#L65-L70 ### Note The code in this function is word by word exact, except the docstring
start function in bot/__init__.py ### Your code https://github.com/janaSunrise/overflow-discord-bot/blob/59564faff2b893c77aec8f7e42fc90b062908fa1/bot/__init__.py#L119-L124 ### Neutron-Bot code https://github.com/Codin-Nerds/Neutron-Bot/blob/f8211efce2977d21ee5cff557f000fcc4e0343bc/bot/core/bot.py#L72-L84 ### Note This code is also quite standard, but I'd like to point out, that again, this is a word-to-word exact replica, although I'm not claiming this as much of a copyright issue, because there isn't really another way to do it. So this is fine
close function in bot/__init__.py ### Your code https://github.com/janaSunrise/overflow-discord-bot/blob/59564faff2b893c77aec8f7e42fc90b062908fa1/bot/__init__.py#L126-L136 ### Neutron-Bot code https://github.com/Codin-Nerds/Neutron-Bot/blob/f8211efce2977d21ee5cff557f000fcc4e0343bc/bot/core/bot.py#L86-L93 ### Note This is again, very standard, and can be excused, but it is a word-to-word replica, except for changed variable names

bot/utils directory

EmbedPages class in bot/utils/pages.py ### Your code https://github.com/janaSunrise/overflow-discord-bot/blob/59564faff2b893c77aec8f7e42fc90b062908fa1/bot/utils/pages.py#L8-L22 ### Neutron-Bot code https://github.com/Codin-Nerds/Neutron-Bot/blob/f8211efce2977d21ee5cff557f000fcc4e0343bc/bot/utils/pages.py#L8-L22 ### Note This is not so standard and it's an exact replica

bot/databases directory

bring_databases_into_scope function in bot/databases/__init__.py ### Your code https://github.com/janaSunrise/overflow-discord-bot/blob/59564faff2b893c77aec8f7e42fc90b062908fa1/bot/databases/__init__.py#L59-L68 ### Neutron-Bot code https://github.com/Codin-Nerds/Neutron-Bot/blob/f8211efce2977d21ee5cff557f000fcc4e0343bc/bot/database/__init__.py#L12-L29 ### Note This is an almost exact replica with different wording, but that's all, it should be removed or it should mention the original source.
on_conflict class in bot/databases/__init__.py ### Your code https://github.com/janaSunrise/overflow-discord-bot/blob/59564faff2b893c77aec8f7e42fc90b062908fa1/bot/databases/__init__.py#L84-L100 ### Neutron-Bot code https://github.com/Codin-Nerds/Neutron-Bot/blob/f8211efce2977d21ee5cff557f000fcc4e0343bc/bot/database/__init__.py#L32-L52 ### Note This is not standard and it's basically a word-to-word replica, except for the function name and very minor details, this has to be removed or mention the original source.
get_datatype_int function in bot/databases/__init__.py ### Your code https://github.com/janaSunrise/overflow-discord-bot/blob/59564faff2b893c77aec8f7e42fc90b062908fa1/bot/databases/__init__.py#L71-L81 ### Neutron-Bot code https://github.com/Codin-Nerds/Neutron-Bot/blob/f8211efce2977d21ee5cff557f000fcc4e0343bc/bot/database/__init__.py#L55-L92 ### Note This is not standard and it's basically clearly a replica, except that you merged 4 functions from NeutronBot into 1 function with a different name.

bot/core directory

get_module_name function in bot/core/loader.py ### Your code https://github.com/janaSunrise/overflow-discord-bot/blob/59564faff2b893c77aec8f7e42fc90b062908fa1/bot/core/loader.py#L10-L11 ### Neutron-Bot code https://github.com/Codin-Nerds/Neutron-Bot/blob/f8211efce2977d21ee5cff557f000fcc4e0343bc/bot/core/autoload.py#L11-L13 ### Note This wouldn't be much of an issue as it is just 1 line function, in both cases, but the rest of this file (as pointed out below) is so similar, that it's clear that this was copied too.
is_a_cog function in bot/core/loader.py ### Your code https://github.com/janaSunrise/overflow-discord-bot/blob/59564faff2b893c77aec8f7e42fc90b062908fa1/bot/core/loader.py#L14-L16 ### Neutron-Bot code https://github.com/Codin-Nerds/Neutron-Bot/blob/f8211efce2977d21ee5cff557f000fcc4e0343bc/bot/core/autoload.py#L41-L46 ### Note This is a clear replica, except with a different name
get_module_list function in bot/core/loader.py ### Your code https://github.com/janaSunrise/overflow-discord-bot/blob/59564faff2b893c77aec8f7e42fc90b062908fa1/bot/core/loader.py#L19-L31 ### Neutron-Bot code https://github.com/Codin-Nerds/Neutron-Bot/blob/f8211efce2977d21ee5cff557f000fcc4e0343bc/bot/core/autoload.py#L24-L38 ### Note This is a clear replica, except with a different name, the source of this has to be properly mentioned or the code has to be removed. In fact, this whole file is clearly a complete reproduction, just with adjusted naming, and that should be properly mentioned.
ModerationReason class (converter) in bot/core/converters.py ### Your code https://github.com/janaSunrise/overflow-discord-bot/blob/59564faff2b893c77aec8f7e42fc90b062908fa1/bot/core/converters.py#L22-L34 ### Neutron-Bot code https://github.com/Codin-Nerds/Neutron-Bot/blob/f8211efce2977d21ee5cff557f000fcc4e0343bc/bot/utils/converters.py#L31-L43 ### Note This is a clear replica, except with a different name, the source of this has to be properly mentioned or the code has to be removed.
TIME_REGEX regex pattern variable in bot/core/converters.py ### Your code https://github.com/janaSunrise/overflow-discord-bot/blob/59564faff2b893c77aec8f7e42fc90b062908fa1/bot/core/converters.py#L10-L19 ### Neutron-Bot code https://github.com/Codin-Nerds/Neutron-Bot/blob/f8211efce2977d21ee5cff557f000fcc4e0343bc/bot/utils/converters.py#L95-L104 ### Note This is a clear replica, except with a different name, the source of this has to be properly mentioned or the code has to be removed.
TimeConverter class (converter) in bot/core/converters.py ### Your code https://github.com/janaSunrise/overflow-discord-bot/blob/59564faff2b893c77aec8f7e42fc90b062908fa1/bot/core/converters.py#L37-L45 ### Neutron-Bot code https://github.com/Codin-Nerds/Neutron-Bot/blob/f8211efce2977d21ee5cff557f000fcc4e0343bc/bot/utils/converters.py#L92-L124 ### Note This is a clear replica, except with a different name, the source of this has to be properly mentioned or the code has to be removed.

bot/cogs directory

lock.py file cog in bot/cogs/moderation ### Your code https://github.com/janaSunrise/overflow-discord-bot/blob/59564faff2b893c77aec8f7e42fc90b062908fa1/bot/cogs/moderation/lock.py ### Neutron-Bot code https://github.com/Codin-Nerds/Neutron-Bot/blob/f8211efce2977d21ee5cff557f000fcc4e0343bc/bot/cogs/moderation/lock.py ### Note This whole file is clearly a copy, it's not word-by-word, but it resembles it in extremely many aspects, from the file name to individual message contents and the functions with implementation. This has to be either removed, or the original source has to be mentioned.
embeds.py file cog in bot/cogs/util ### Your code https://github.com/janaSunrise/overflow-discord-bot/blob/59564faff2b893c77aec8f7e42fc90b062908fa1/bot/cogs/utility/embeds.py ### Neutron-Bot code https://github.com/Codin-Nerds/Neutron-Bot/blob/f8211efce2977d21ee5cff557f000fcc4e0343bc/bot/cogs/utils/embeds.py ### Note This code also resembles Neutron-Bot implementation very closely, which should be mentioned, it's not an exact replica, but it's not too far from it. It is even in the same location and with the same filename.
help.py file cog in bot/cogs/core ### Your code https://github.com/janaSunrise/overflow-discord-bot/blob/59564faff2b893c77aec8f7e42fc90b062908fa1/bot/cogs/core/help.py ### Neutron-Bot code https://github.com/Codin-Nerds/Neutron-Bot/blob/f8211efce2977d21ee5cff557f000fcc4e0343bc/bot/cogs/core/help.py ### HotWired-Bot original source https://github.com/Codin-Nerds/HotWired-Bot/blob/5be765e4e8ca8cd690675a402d5ced452077c989/bot/cogs/help.py ### Note This is pretty much exact replica, but you do not need to mention this one, because it was originally taken from HotWired-Bot repository and was authored by [Faholan](https://github.com/Faholan) when the bot was still under MIT license. This means that you can use this freely, as long as it's authored by Faholan, and not as it currently is, with the author of [janaSunrise](https://github.com/janaSunrise). Note that this might've been resolved internally and I do not claim any part of this code, it's just a note here that it doesn't have the correct author.

NOTICE

This issue isn't yet completed, you can treat it as a draft until this notice won't be removed, this is because not all of the code was already evaluated and checked, I will be updating this comment as I will be going through the code base, and cross-checking the code references. But I decided to post it already, to give you time ahead, to adjust your codebase and decide, if you want to keep the code and switch to GPLv2, or keep using MIT and remove the references from Neutron-Bot project.

janaSunrise commented 3 years ago

Here are the resources I took them from: For lock.py, and help.py I used them from hotwired, as that was my own code.

Embeds.py I wrote them from scratch, and I am not interested in your code, I did use your idea, and I have no problem accepting.

As for get_module_name is from https://stackoverflow.com/questions/1707709/list-all-the-modules-that-are-part-of-a-python-package And https://stackoverflow.com/questions/48879353/how-do-you-recursively-get-all-submodules-in-a-python-package

Is a cog was given the idea by faholan, as for I haven't used your code, and documentation exists and stack overflow to help me, like get_module_name

For get_datatype_int I used it as a converter so I don't have to do hardwork of conversion, and I did use your idea, and I agree, but I haven't took the code.

For on_conflict I have followed this documentation guide https://docs.sqlalchemy.org/en/14/dialects/postgresql.html and created it.

As for ModerationReason that was my original code, and I added it in https://github.com/Codin-Nerds/Hotwired-Bot You copied it actually, to make it clear.

TIME_REGEX Was copied from me on stack overflow, and The code for TimeConverter was given by Faholan.

init_db was my old method using aiosqlite, until I switched to a robust postgresql interface and then used sqlalchemy for my own use. You considered me to be a useless python dev, but not really, I am learning and exploring. Even if my code's like you, I did copy, But not from your bot, from other sources.

Load extensions was my code in hotwired bot, and I did take the idea of autoload and the code too from stackoverflow and reading blogs ans articles.

As for run, start, close, Yes they were my part of code contributions too, and were picked from hotwired bot.

And so is on_ready and it's not similar, and I am working on my own things too. I did use hotwired bot, Which has my 70% of contribution and I used it while starting, yes the structure. I copied nothing from your bot, and Here are all the proof I gave.

Oh and finally, for get_databases_into_scope Here's the resource: https://docs.sqlalchemy.org/en/14/core/metadata.html and https://stackoverflow.com/questions/15175339/sqlalchemy-what-is-declarative-base This ain't your code remember that, I did copy code, but not yours, and here's how I got the idea of importing them all in one, to add them to metadata, I ain't a noob.

ALSO, Here's the guide for getting started containing all of your blame code, https://docs.sqlalchemy.org/en/14/orm/extensions/asyncio.html

Heres the proof of my own custom database base, https://github.com/janaSunrise/overflow-discord-bot/blob/main/bot/databases/__init__.py#L18-L55

You dont have these things too, and I did make them. Please just stop blaming and using useless words like "copyrighted" which doesnt suit you. You also did use my part of code from hotwired, and you literally kicked from my own organization and places.

Which I did use, and that's not your code. Hence I am neither interested in your code, nor I copied.

janaSunrise commented 3 years ago

Also claiming to be owner of neutron bot is bad. I am the owner of codin nerds, previously The codin hole, and it was my youtube channel, I am the owner of neutron bot and hotwired bot too.

You are supposed to be blame not me. You literally forced me to transfer neutron and then kicked me out of community and organization. You never realized how everything works, you just understood the readymade dish.

I never could have grown community. My friends helped me, you're being a dictator, and you're gonna have your fall soon. I could even actually copyright you with code since Hotwired is MY BOT, but I just ignored and left you, you literally stole everything from me. And lock and slowmode is taken from hotwired yes, and written and introduced by me, you were literally living under rock until now, and you are.

I used my own code, and there's not harm in that. You deserve bad which you did to me, I do believe in everyone, and they stand for me, not backstab like you. Please I said you to stop blaming, you didn't. I gave you proof. Please leave out from my life, my circle and my friends.

I wish nobody makes you a friend. EVER. Or literally anything.

janaSunrise commented 3 years ago

Also, here's the final message.

I am implementing pooling in my SQLAlchemy. Don't claim the code to be yours.

Here's the sources: https://www.programcreek.com/python/example/67337/sqlalchemy.pool.QueuePool https://docs.sqlalchemy.org/en/14/core/pooling.html https://docs.sqlalchemy.org/en/14/orm/session_basics.html#is-the-session-thread-safe

And here's the discussion attached. Screenshot from 2021-02-25 13-01-19 Screenshot from 2021-02-25 13-01-10 Screenshot from 2021-02-25 13-00-57

ItsDrike commented 3 years ago

I'm not saying all of the code was stolen, I never claimed that, yes there are some unique ideas, but pointing those out doesn't invalidate the claim. Some of the code in NeutronBot was certainly inspired by documentation, yes, and some of the ones you have were certainly too, but in certain functions, there are simply too many similarities which have lead me to believe that the code is from the Neutron-Bot project. It's not the code that matches the documentation directly, but the things like the same exact wording on exceptions in it, same exact countdown time to try to reconnect. And other things in other files.

Also, I'm not claiming Neutron-Bot is my personal project, I'm speaking on behalf of the Codin'-Nerds organization, which I am currently an owner of.

For example with the autoload function, yes, the source you provided is similar, and I was in fact also using that, but your code isn't just similar with that, it's basically word to word what I did, with passing the check function and testing it, otherwise returning, this is very specific, especially because it's something to make the function modular, which isn't even needed in your case, you could've hard-coded this and there was no reason not to, in your case. So it's weird that you did exactly the same thing, even with the same variable names.

I do agree and do not have issues with the fact that you were a member of codin' nerds organization previously, but you can't claim any of the code written there as copyright violation because Neutron-Bot does state that it was taken from HotWired, and it's even mentioned in HotWired readme itself, that NeutronBot is a continuation. Therefore it can be dealt with as basically a fork, and so the commits in it are a follow up on original code, these commits have you as an author and so it's not stealing by any means. But in your case, you do not have any such mention and therefore if the code was taken, it would be considered a license violation.

Another note is that I'm not claiming you personally stole the code, it could be any of the co-authors, but this repository has you as the commit author everywhere, so I might have pointed some things to you personally, but they do fall on the repository itself. It does not matter who suggested some idea nor who implemented it, as long as the code was indeed from Neutron-Bot.

Overall, I find it very unlikely that so much of the code has basically a word-for-word match with Neutron-Bot, I don't necessarily claim that all of the code I mentioned was from there, but it is a big coincidence if none of it was, one that is basically impossible.

Also, personal history of any kind is not relevant here, all I claim is that some of the code is very similar and was likely taken and that it should be listed as such.

janaSunrise commented 3 years ago

And I gave all the proof of the code, and I didn't even take a bit. You cannot force me to accept the license since I haven't done that, and you can't copyright me for the ideas. So I want to be not rude with you anymore, and I just wanna get some personal time learning. I have exams and everything, and I did take from hotwired. I never was interested in looking in the repo anyway, and Yes, earlier I got the idea of having same structure with asyncPG subclass, but I just used sqlalchemy instead. And neither will I mention hotwired bot, because I just used things that I did write. Anyway, I am stopping this conversation, thanks for everything, Please stop talking to me, and I don't wanna keep or be in touch with you anymore.

Thank you, have a good day.

janaSunrise commented 3 years ago

And for the same names, I just felt those would be generic and understandable, rather than having typehints for them, If I did offend or make it look like plagiarism, I am sorry. I didn't mean to. And I am not interested in copy and pasting. I am interested in learning and that's what I did. If you're gonna even force after having the proofs and learning sources, It clearly means, you're unstable, hypocrite and a really bad developer, who just wants to grow his stuff by giving illegible reasons and asking others to promote. And I'll stop here.

Don't bother raising issue, once again hotwired code base is 70% mine and you did backstab me twice then, because you acted insecure over arguement decisions. You always think you're the best, and thats gonna cause your fall.

Let's stop here, and not talk about this. I want to stop everything and make it clear.

Please leave me, my friends, circle and everything.

janaSunrise commented 3 years ago

Overall, I find it very unlikely that so much of the code has basically a word-for-word match with Neutron-Bot, I don't necessarily claim that all of the code I mentioned was from there, but it is a big coincidence if none of it was, one that is basically impossible.

Indeed. I agree, but I didn't and neither i want to. And for hotwired, mentioning isnt my duty, and neither I want to, that's my choice, I have ownership over my code, and I don't want to promote the organization I don't belong to anymore. So please leave me alone with my choice and my learning and code. You're forcing me to do things that isn't needed and neither will be.

ItsDrike commented 3 years ago

I will leave this as-is for now, but I still do find it quite unlikely that you'd construct a code that's exactly the same in line spacing, variable names, and general logic. But I do respect your sources and it is not impossible that the code was taken from there, so that's why I will leave it be. Thanks for replying and taking the time to analyze the code-base.

janaSunrise commented 3 years ago

I do agree and do not have issues with the fact that you were a member of codin' nerds organization previously, but you can't claim any of the code written there as copyright violation because Neutron-Bot does state that it was taken from HotWired, and it's even mentioned in HotWired readme itself, that NeutronBot is a continuation. Therefore it can be dealt with as basically a fork, and so the commits in it are a follow up on original code, these commits have you as an author and so it's not stealing by any means. But in your case, you do not have any such mention and therefore if the code was taken, it would be considered a license violation.

Neutron bot doesn't mention, it's written in hotwired. You didn't even mention, remember that.

For example with the autoload function, yes, the source you provided is similar, and I was in fact also using that, but your code isn't just similar with that, it's basically word to word what I did, with passing the check function and testing it, otherwise returning, this is very specific, especially because it's something to make the function modular, which isn't even needed in your case, you could've hard-coded this and there was no reason not to, in your case. So it's weird that you did exactly the same thing, even with the same variable names.

That was clearly from stackoverflow, and whatt do you think I am dumb? I know each cogs have setup, and I did compare the outputs just now, and they're different, we get different outputs and it works differently. We all know cogs need that check so please dont try to act too detective. I am aware of it.

Another note is that I'm not claiming you personally stole the code, it could be any of the co-authors, but this repository has you as the commit author everywhere, so I might have pointed some things to you personally, but they do fall on the repository itself. It does not matter who suggested some idea nor who implemented it, as long as the code was indeed from Neutron-Bot.

I have my rights to use my code without mentioning, so please stop begging for a mention.

Overall, I find it very unlikely that so much of the code has basically a word-for-word match with Neutron-Bot, I don't necessarily claim that all of the code I mentioned was from there, but it is a big coincidence if none of it was, one that is basically impossible.

I am not the guy you think I used to be. I did learn and I know how clean code works and the naming and styles. So yes, That's a you problem.

I'm not saying all of the code was stolen, I never claimed that, yes there are some unique ideas, but pointing those out doesn't invalidate the claim. Some of the code in NeutronBot was certainly inspired by documentation, yes, and some of the ones you have were certainly too, but in certain functions, there are simply too many similarities which have lead me to believe that the code is from the Neutron-Bot project. It's not the code that matches the documentation directly, but the things like the same exact wording on exceptions in it, same exact countdown time to try to reconnect. And other things in other files.

You literally said that, and also accused me stealing all code, even though it was mine, I am telling you, you're unstable and you dont deserve anything, Just stop lying and everything. It was as in the docs. The table structure too, except it was in a single file and I just created a packages, and thats nothing too fancy.

I create packages to support multi level code. For example https://github.com/janaSunrise/AIO-API There are so many packages, and I like how I name it.

janaSunrise commented 3 years ago

I will leave this as-is for now, but I still do find it quite unlikely that you'd construct a code that's exactly the same in line spacing, variable names, and general logic. But I do respect your sources and it is not impossible that the code was taken from there, so that's why I will leave it be. Thanks for replying and taking the time to analyze the code-base.

Um okay? 4 indents isn't something new, and Yes, I did leave the server, because you had the ownership and I just had nothing, Being an owner is actually respectable than just having a role, and also using generic terms and naming how they will be isn't something too fancy, also checking your autoload, it does match up, but I haven't done it too deeply, and also As said I compared and yours works on multiple levels like recursive, mine doesn't it just grabs the list plainly.

ItsDrike commented 3 years ago

Using generic terms and naming how they will be isn't something too fancy, also checking your autoload, it does match up, but I haven't done it too deeply, and also As said I compared and yours works on multiple levels like recursive, mine doesn't it just grabs the list plainly.

I'm not saying you grabbed it plainly, just that it was very similar and I found it very unlikely that something like that would occur. But as I said, I will leave this as-is for now since you did seem surprised with the claim and you did point out other sources, where the code might have come from, which is good enough for me.

janaSunrise commented 3 years ago

Thank you for everything, and I am sorry for everything. Have a great day.

janaSunrise commented 3 years ago

Also over checking code for autoloader I noticed that you're engine directly. I did plan that too, before seeing, It's not a copy. I even raised an issue about it. https://github.com/sqlalchemy/sqlalchemy/issues/5976

It's not copy pasta 😅