Giter VIP home page Giter VIP logo

classroom-monitor-bot's Introduction

Classroom Monitor Bot

This bot provides functionalities for the Community Classroom Discord server.

Community Classroom is an initiative 'for the students, by the students'. The initiative aims to provide 'quality education which is free for all'.

Follow us and be a part of this amazing community.


About

We believe that every student, irrespective of their college or branch, can make it big. Community Classroom is an initiative built on this thought. We provide hands-on training, mentorship and have an inclusive community. All of our courses are FREE and better than most paid courses. We cover every topic in detail and mentor you to stand out and get opportunities by breaking all the barriers. Get expert guidance with career, Open Source, and internships/jobs around the world.

Note to all contributors

Thank you for putting your time to contribute and helping others out!
Before contributing do kindly read and follow Code of Conduct.

To get started with contributing, go through the following steps.

Prerequisites

System requirements

  1. Any system with basic configuration.
  2. Operating System: Windows / Linux / Mac

Software requirements

  1. Node.js installed (If not download it here).
  2. Any text editor of your choice (VSCode recommended).
  3. Discord account and a Discord server where you have administrator access.

Skill requirement

  1. Basic Knowledge of Git & GitHub.
  2. JavaScript
  3. NodeJS
  4. expressJS

Setting up a local environment

Forking repository

  1. Firstly to make your copy of the project you have to fork the repository. To fork the repository, press the fork button. In case of any difficulties, refer to the image below fork

Clone repository

  1. Now after you have forked the project, it's time to clone it into your local device so that you can work properly.

  2. In your forked repository click on the green code button and copy the provided link. In case of any difficulties, refer to the image below clone

  3. Now on your desktop open Git Bash and type git clone <your-clone-url>.git, and press enter

  4. Now, your forked repository has been cloned in your device! 🎉

Contributing

Before getting started, make sure you have Developer Mode enabled in your Discord. If you're not sure how to enable it, go to Settings > Advanced > Developer Mode: ON

Creating a branch

Whenever you want to contribute to any project, it is a good practice to make a separate branch and push it as a PR, rather than making changes to the main/master branch.

  1. git checkout -b <your-branch-name> will make a separate branch and will change to that branch
  2. Now you are ready to make your changes.

Setting up application and creating the bot

  1. Go to the Discord Developers Portal page
  2. Login with your Discord credentials. You will see the following screen (image below and for you, it will probably be a blank one) homepage
  3. Now click the New Application button (refer to the image above)
  4. Name your bot (it can be Community Classroom bot or anything else) and press create
  5. You will be at the Developers Portal where you can customize your bot (refer to the image below) dashboard
  6. Now to create your bot instance go to the Bot tab, and press Add Bot followed by Yes, do it in the following popup (refer to the image below) bot instance
  7. You will be redirected to something similar to this screen after adding bot
  8. Go to OAuth2 and copy the Client ID (refer to the image below) App ID
  9. Now to invite the bot to your server, paste this link in your browser https://discord.com/api/oauth2/authorize?client_id=<app-id>&permissions=8&scope=bot and just replace <app-id> with your copied client ID
  10. You will be redirected to this screen (image below) where you have to select a server and click on continue and authorize after that Add server
Amazing! You have added the bot to your server; although you might see it's offline. Let's make it go online!

Coding our Bot

  1. Open the folder of your cloned repository with any text editor of your choice (VSCode recommended)
  2. Now go to the Discord Developers Portal page where you created the bot and copy the bot token from the Bot tab (refer to the image below) Bot Token
  3. Now create a file named.env in your root folder. Copy everything from the .env-sample file and replace the BOT-TOKEN value with the copied token. Note that the .env file should be nameless. Create a nameless file, with the extension .env. If you add a name to the file, NPM won't be able to access the token.
  4. In the terminal run, npm install, this will install all the necessary packages
  5. Start our server by running npm start.
  6. All done! The bot is now online!

Supported commands

Commands Functionality
cm!help Shows help with the commands, features, and what the bot offers
cm!hey Says Hey to the user
cm!version Displays the current version of the bot
cm!links Displays all the social accounts of the community
cm!translate <text> Translate the given text to English
cm!meme Send a meme from the r/programmerhumor Reddit

This bot is reserved for functionalities offered for the Community Classroom community.

Commit Message

After making the desired changes and testing, run the git add . command to add the files to the Git staging area. This area contains a list of all the files you have recently changed.

git commit -m <Type in the commit message> to commit your changes and save them to the local repository.

We follow conventional commits specifications for our commit messages

Commit Message Format

Each commit message consists of a header, a body, and a footer.

<header>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>

Any line of the commit message cannot be longer than 100 characters.

Commit Message Header

<type>(<scope>): <short summary>
  │       │             │
  │       │             └─⫸ Summary in the present tense. Not capitalized. No period in the end.
  │       │
  │       └─⫸ Commit Scope: animations|bazel|benchpress|common|compiler|compiler-cli|core|
  │                          elements|forms|http|language-service|localize|platform-browser|
  │                          platform-browser-dynamic|platform-server|router|service-worker|
  │                          upgrade|zone.js|packaging|changelog|dev-infra|docs-infra|migrations|
  │                          ngcc|ve
  │
  └─⫸ Commit Type: build|ci|docs|feat|fix|perf|refactor|test

The <type> and <summary> fields are mandatory. The (<scope>) field is optional.

Type

Must be one of the following:

  • feat Commits that adds a new feature
  • fix Commits that fixes a bug
  • refactor Commits that rewrite/restructure your code, however, does not change any behavior
  • perf Commits that are special refactor commits that improve performance
  • style Commits that do not affect the meaning (white-space, formatting, missing semi-colons, etc.)
  • test Commits that add missing tests or correct existing tests
  • docs Commits that affect documentation only
  • build Commits that affect build components like build tool, ci pipeline, dependencies, project version, etc.
  • ops Commits that affect operational components like infrastructure, deployment, backup, recovery, etc.
  • chore Miscellaneous commits. E.g.: modifying .gitignore
Scope

The scope provides additional contextual information.

  • Is an optional part of the format
  • Allowed Scopes depend on the specific project
  • Don't use issue identifiers as scopes
Summary

Use the summary field to provide a succinct description of the change:

  • Use the imperative, present tense: "fix", not "fixed" nor "fixes"
  • Don't capitalize the first letter
  • No dot (.) at the end
  • Your commit message should not contain any whitespace errors
  • Remove unnecessary punctuation marks

Commit Message Body

  • The body should include the motivation for the change and contrast this with previous behavior. This commit message should explain why you are making the change.

  • Is an optional part of the format

  • Use the imperative, present tense: "fix" not "fixed" nor "fixes"

  • This is the place to mention issue identifiers and their relations

Commit Message Footer

The footer can contain information about breaking changes and is also the place to reference GitHub issues and other PRs that this commit closes or is related to.

BREAKING CHANGE: <breaking change summary>
<BLANK LINE>
<breaking change description + migration instructions>
<BLANK LINE>
<BLANK LINE>
Fixes #<issue number>

The "Breaking Change" section should start with the phrase BREAKING CHANGE: followed by a summary of the breaking change, a blank line, and a detailed description of the breaking change that also includes migration instructions.

It's an optional part of the format.

Creating commits

type: :emoji: summary (changes made)

To know which type to use, refer to this

To find suitable/appropriate emojis for the changes, refer to this

Not sure what to type in the summary? Refer to this

Some of the tips to write a good commit message

  • Separate the subject from the body with a blank line
  • Your commit message should not contain any whitespace errors
  • Remove unnecessary punctuation marks
  • Do not end the subject line with a period
  • Capitalize the subject line and each paragraph
  • Use the imperative mood in the subject line
  • Use the body to explain what changes you have made and why you made them.
  • Do not assume the reviewer understands what the original problem was, ensure you add it.
  • Do not think your code is self-explanatory
  • Follow the commit convention defined by your team

Example

feat: :sparkles: add the amazing button

Contributors

Every contributor's efforts and time are deeply appreciated! Thank you. 😄

Contributors

classroom-monitor-bot's People

Contributors

akash190104 avatar amrutha1101 avatar bobychaudhary avatar ciggzy1312 avatar ctnkaan avatar dhansal avatar fi-krish avatar genzyy avatar guptasajal411 avatar iamv1n avatar induviduality avatar itsmeishan avatar jayesh-srivastava avatar juuz0 avatar kaiwalyakoparkar avatar kkhitesh avatar panquesito7 avatar shuklaritvik06 avatar sidd-oo avatar siddhant-khisty avatar tan-shadow avatar unnikrishnan2002 avatar varunsathreya avatar venusaim23 avatar vishalda avatar vovw 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

classroom-monitor-bot's Issues

[Feature] Word restriction

Implementing a block list with words related to other edTech startups/firms. If a message sender sends any word among this bot will raise and warning until the message is updated

[Bug]: Bot message for profane words is unclear

Describe the bug

Whenever a person uses a profane word the bot replies with Please do not use profane language 🚫. If you think I did a mistake dont worry I am still under development, tag Community Manager and report this 🏷️. message which brings confusion among the new members in the community.

To Reproduce

  1. Go to any channel is Community Classroom Discord Server.
  2. Type guys, god and it will generate similar message for both

Expected Behavior

It should tell the user which word was not appropriate to use and give them alternative suggestions for that word

Screenshot/ Video

Bug image

Desktop (please complete the following information)

No response

Additional context

No response

[Doc] Add Docasaurus or Docsify

Need to add the following features

  • Community information page
  • Command listing page (separating in categories when commands grow)
  • Community and contributing guidelines.

[Bug]: Typo in `restrictedWords.js`

Describe the bug

Classroom monitor is written as Classroon monitor

To Reproduce

  1. Go to Commands/restrictedWords.js
  2. Check line no. 7

Expected Behavior

It should be Classroom monitor

Screenshot/ Video

image

Desktop (please complete the following information)

No response

Additional context

I am opening a pull request for this soon

[Bug] Broken Image link

Describe the bug

A clear and concise description of what the bug is :
In the Readme.md file, the image link for 8th step for Setting Up the bot in local Environment is broken.

Screenshots

Screenshot_20210726-090739_Chrome

[Feature]: Hindi and English translation

Is your feature request related to a problem? Please describe.

I'm thinking of adding a Hindi to English and English to Hindi translation feature if this feature is not already implemented.
I thought about this feature because the community is mainly made out of Indian students and even though everyone speaks English 95% of the time it might help non Hindi speakers 5% of the time.

It might also help Indian students for translating English to Hindi for specific times.

Describe the solution you'd like

I'm thinking of using a third party library called translate
https://www.npmjs.com/package/translate

Describe alternatives you've considered

No response

Additional context

No response

[Feature] Add channel specific message filter

Say suppose if a channel was created for sharing job opportunities. People tend to send irrelevant or spammy messages there (by mistake also) So the task is to build a system that will check specific keywords in a message like in this case [internship, job, intern], etc. If the message contains the keywords then only it will be sent to the channel else will be deleted.
This will confirm the purpose of the channel.

[Bug]: Profane Warning on wrong words

Describe the bug

The bot is throwing profane warnings for words which are not profane.
In order to solve this error:

  1. Monitor the discord chat and make a list of words which are non profane but a warning is being thrown.
  2. Add the words which you have found to the allow list in Config.json

Words that have been found up till now:
simple
simply
fellowship
guys
ball
Obviously
white
black
crashes
crash
Host

[Feature]: Add Scam Detection

Is your feature request related to a problem? Please describe.

Scam malwares are increasing in Discord. These scam malwares basically transform users to bots. These infected users are then made to send infectious links to multiply them selves to all channels with @everyone tag.

Describe the solution you'd like

These scam links are always the same. I have been gathering some data about their patters. A simple if code to detect if the link has been sent can detect and remove the messege.

Describe alternatives you've considered

Did not think of any other alternative solutions.

Additional context

No response

[Feature] English restriction to be added

People sometimes start talking in their native language which is not understood by all and hence suppresses the aim of inclusiveness. The bot should have some feature to restrict use of external words.

[Bug] Wrong command on README.md

Describe the bug

Wrong command to create new git branch on README.md

Output:
error: unknown switch `b'

To Reproduce

Steps to reproduce the behavior:
Change 'git branch -b (your-branch-name)' to 'git checkout -b (your-branch-name)'

Expected behavior

Create a new branch and move into it

Screenshots/ Video

CommandError

[Feature] Add description/status to the bot

Many bots have a Listening to !help kind of status which helps user to navigate and get familer with bot. Currently it is not present in Classroom monitor. Task is to set up status for bot.

[Bug]: Bot not capturing edtech startups

Describe the bug

No response

To Reproduce

No response

Expected Behavior

No response

Screenshot/ Video

No response

Desktop (please complete the following information)

No response

Additional context

No response

[Feature] To add an automated response for frequently asked questions.

Is your feature request related to a problem? Please describe.

A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
A lot of people ask the same question 346346557 times a day. Eg: What should I do if I learned C++ instead of java.
Create an automated response functionality will be easier for all.

[Feature] Warning for profane language

As a community being inclusive is important and language plays a big role in keeping a community inclusive. Feature request to warn people for not using English or using profane or slangs in the chat.

[Feature] Add a centralized penalty tracking list 🎅

Is your feature request related to a problem? Please describe.

A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
We already have certain rules in place and will have more in the future. Issuing warnings is useless if we don't take any action against the repeat offenders.

Describe the solution you'd like

A clear and concise description of what you want to happen.
I actually don't know how discord bots work (will have to learn 😃) but I guess if we could have like a central file or maybe even a DB where we update a users infraction score whenever he commits one we could frustrate them.

[Bug] The bot isn't recognizing edTech names due to different letter case.

Describe the bug

The list for edTech startups in restrictedWords.js is small and the bot isn't picking up some words in conversation due to the letter case. The bot recognizes "code for cause" as an edTech name but doesn't recognize "Code for cause" due to different letter case.

To Reproduce

Steps to reproduce the behavior:

  1. Go to 'restrictedWords.js'
  2. Add more edTech names to the words array and some modifications for pre-existing edTech names.

Expected behavior

The bot will be able to recognize more edTech names irrespective of different letter case

[Bug] Label action not working on dev branch

The recent label action which was added does not support the dev branch. Either dev branch should be added to the array of allowed branches or should be made available for all branches

[Feature]: Add Cucumber tests

Is your feature request related to a problem? Please describe.

There are no tests to check the authenticity and integration of the pull requests

Describe the solution you'd like

Writing cucumber tests to ensure the ci and cd

Describe alternatives you've considered

No response

Additional context

No response

[Bug] Deleting user's messages

Current Scenario

When a person talks about an edTech startup then the bot warns him in public and private.

Required Scenario

When a person talks about an edTech startup then both warn him in public and private and also delete's him/her/their message.

[Bug] Typo in the pull request template

Describe the bug

A clear and concise description of what the bug is:

There is a typo in the pull request template.
In the 5th checklist under the Check List (Check all the boxes which are applicable) part. It must be plagiarized instead of plagarised.

To Reproduce

Steps to reproduce the behavior:

  1. Go to here.
  2. Check the 5th checklist.
  3. See the typo

Screenshots/ Video

If applicable, add screenshots to help explain your problem.

Capture

[BUG] Add `remain` to the whitelist

Describe the bug

remain is something we should add to the whitelist, this is not a problem. 🙂

If you already forked this repository, skip to step 3

  1. Fork the repository here
  2. Go to the config.json file (make sure you're in your fork!).
  3. Change the line 47 to the following content:
            "special",
            "remain"
  1. Time to make your PR! Once you make it, the maintainers will review it and merge it if all is good. 🚀
    Do let us know if you need any help! Feel free to make a comment here or ask via our Discord community. 🙂

[Doc] Update Readme with commit example

Add conventional commit guidelines

The project uses conventional commits specifications, but that isn't very known among beginners.
Adding an example commit message would help greatly.

Check List (Check all the boxes which are applicable)

  • Information addition regarding the newest change through a PR
  • Typo error.
  • New category addition.
  • Refractoring sentences that make more sense.
  • Fixing broken links.
  • Refractors / reformating of the document.

[Bug]: Small typo in README file

Describe the bug

Small typo in the README file

To Reproduce

No response

Expected Behavior

It should be Local

Screenshot/ Video

imageedit_1_9030410858

Desktop (please complete the following information)

No response

Additional context

No response

[Bug] Commands reply have old `cc` form

Recently bot initial was changed from cc to cm (Ref. ). But the bot replies still have cc written in them. The task is to go through bot commands and change wherever cc is written with cm.
Eg:
Just cc!help away to
Just cm!help away

[Feature]: Reddit Programmer Memes

Is your feature request related to a problem? Please describe.

We have a memes channel in the Discord server. I think it would be fun to have a command so the bot can send memes from r/programmerhumor. Specially r/programmerhumor because some memes from other subreddits have a chance to be offensive.

Describe the solution you'd like

I already have a working demo of a Discord Reddit Bot using meme.js

https://www.npmjs.com/package/memejs

Describe alternatives you've considered

I did not think of any alternatives since I already have a demo.

Additional context

Here is the Demo

image

[Feature] Detect when someone tags supreme mentor for no reason and issue a warning

Is your feature request related to a problem? Please describe.

A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
A lot of people just tag kunal for asking the simplest of doubts, this can be really disturbing.

Describe the solution you'd like

A clear and concise description of what you want to happen.
Just detect his name and issue a warning if someone does this. After multiple warnings something could be done.

Describe alternatives you've considered

A clear and concise description of any alternative solutions or features you've considered.
We could have a centralized naughty list where we keep count of all infractions and could ban people if it increases a certain amount. But this should probably be a new issue in itself.

[Doc] Update README file with the contributors list.

We need to add a 'Contributors List' section in the README file where the names of all the current contributors should be displayed. The names should be a link that will direct any user to the contributor's GitHub profile.

[Bug] Change prefix to " cm! "

The current prefix to call bot is cc! which does not match with the initials of the bot. Task is to change the prefix to cm! so that it matches the initials of the bot.

[Bug]: Add Chinese, Japanese and American to the allowed list

Describe the bug

Add Chinese, Japanese and American to the allowed list

To Reproduce

No response

Expected Behavior

No response

Screenshot/ Video

No response

Desktop (please complete the following information)

No response

Additional context

No response

[Feature]: Importing commands to index.js needs to be changed

Is your feature request related to a problem? Please describe.

So if a command is added we'll have to use const command = require( 'commands/command' )
This is will be bad once the code starts growing

Describe the solution you'd like

there is a better way to add commands, like this we'll have to add every single command with const ... = require(...)
instead what we can do is

const commandFiles = fs
    .readdirSync('./commands/')
    .filter(file => file.endsWith('.js'));
for (const file of commandFiles) {
    const command = require(`./commands/${file}`);

    client.commands.set(command.name, command);
}

then use

client.on( 'message',  msg => {
    if (
        !message.content.startsWith(prefix) ||
        message.author.bot ||
        message.channel.type == 'dm' // this solves one of the issue that i have raised
    )
        return; 

  const args = message.content.slice(prefix.length)
  const command = args.shift().toLowerCase();  
  
  else if ( command == "/command/" ) client.get(/command/).execute(msg, args, Discord)
  // same for other commands
})

Describe alternatives you've considered

No response

Additional context

No response

[Bug]: `cm!dsa` command not working

Describe the bug

The bot does not respond with an embed with typed cm!dsa

To Reproduce

  • Go to community classroom server
  • Go to #bot-spam
  • type cm!dsa

Expected Behavior

It should return the embed present in Commands/DSA.js file

Screenshot/ Video

No response

Desktop (please complete the following information)

No response

Additional context

No response

[Bug] edTech word list too small

We are against scammy edTech startups. We want to avoid people talking about it in the community. The warning system is implemented but the library is very small. The task is to add more words to list so it becomes more flexible.

[Feature]: A command that pulls up instructions for asking code related help.

Is your feature request related to a problem? Please describe.

A lot of people while asking for code-related questions use images of their code that are barely visible or they simply copy-paste their code in the channel chat which becomes very hard to debug due to weird formating.

Describe the solution you'd like

A command that pulls up all the instructions to follow while asking code-related questions. A command that tells how to use code-snippet feature from discord or use code-sharing services like repl.it, JSfiddle, codepen, etc

Describe alternatives you've considered

No response

Additional context

No response

[Bug]: Profane warning for 'Class'

Describe the bug

The bot sends a profance word warrning for the word 'Class'.

To Reproduce

Type 'Class' with Community Monitor in your server.

Expected Behavior

No response

Screenshot/ Video

No response

Desktop (please complete the following information)

No response

Additional context

No response

[Bug]: Profane error for word 'Just'

Describe the bug

When the word Just is said, monitor gives a profane language warning

To Reproduce

Type Just with bot in your server

Expected Behavior

No error should be thrown for 'Just'

Screenshot/ Video

No response

Desktop (please complete the following information)

No response

Additional context

No response

[FEATURE] Add the Gitpod ready-to-code system

Is your feature request related to a problem? Please describe.

Adding the Gitpod ready-to-code system will make the process of compiling much easier in just a single click.

This is very useful when you want Gitpod to run npm commands quickly for you and run the whole project quickly. It's much better than cloning the repository, reading the readme, installing the necessary tools, etc....

Describe the solution you'd like

Setup the Gitpod ready-to-code system. I already know how to set it up. It is just by creating a PR, configuring it, and giving Gitpod access to this organization. 🙂

Describe alternatives you've considered

The user can do it locally, but by using Gitpod it will skip many steps and it helps to make everything quicker.

Additional context

I would like to work on this. It's very easy to set it up. 😄

[Feature]: Adding a command which provides you with the GitHub repository link

Is your feature request related to a problem? Please describe.

No response

Describe the solution you'd like

Making a simple cog like cm!code or cm!source which gives the GitHub repository link for the classroom-monitor-bot would be pretty useful in long term .

Describe alternatives you've considered

No response

Additional context

No response

[Feature]: Add warnings for when non inclusive words are used.

Is your feature request related to a problem? Please describe.

No response

Describe the solution you'd like

Currently we are using just carl bot to ask people only to refrain from using the word 'guys'. The classroom monitor can be configured to display a message saying something like "This word is not promoting inclusivity. Please use a inclusive word"
Possible words to warn for are as follows:
'guyz',
'guys',
'guyzz',
'bruh',
'duude',
'women',
'sir',
'sirr',
'man',
'fellas',
'madam',
'maam',
"ma'am",
'yessir',
'chad',
'simp',
'mate',

Describe alternatives you've considered

No response

Additional context

No response

[Doc] Enhance Readme documentation

Add the following to the readme

  • Logo of community
  • Greeting
  • Contributor guideline
  • commands available
  • purpose
  • socials
  • contributors list

[Bug] Readme

Describe the bug

This bot is reserved for functionalities offered for community classroom community.

In the readme, there's community doubled in one sentence.

If its intentional feel free to close the issue

[Feature]: Migration to slash commands

Is your feature request related to a problem? Please describe.

No response

Describe the solution you'd like

No response

Describe alternatives you've considered

No response

Additional context

No response

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.