├── .github ├── ISSUE_TEMPLATE │ ├── blank.md │ ├── bug_report.md │ ├── feature_request.md │ └── repl-code-behind.md ├── PULL_REQUEST_TEMPLATE │ └── pull_request_template.md ├── stale.yml └── workflows │ ├── SyntaxChecker.yml │ └── greetings.yml ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── app.py ├── forms.py ├── logs └── err_log.txt ├── rctools ├── __init__.py └── __pycache__ │ └── __init__.cpython-38.pyc ├── static ├── css │ └── main.css ├── images │ ├── error.png │ ├── external.png │ ├── pure-black.jpg │ ├── repl_pixel.png │ ├── repl_pixel_256px.png │ ├── repl_pixel_64px.png │ └── skeleton.gif └── js │ ├── initialize.js │ └── script.js ├── templates ├── 404.html ├── app.html ├── apps.html ├── error.html ├── index.html ├── license.html └── user-output.html └── upcoming.md /.github/ISSUE_TEMPLATE/blank.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: blank 3 | about: Blank template 4 | title: "[BLANK]" 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | 11 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - OS: [e.g. iOS] 28 | - Browser [e.g. chrome, safari] 29 | - Version [e.g. 22] 30 | 31 | **Smartphone (please complete the following information):** 32 | - Device: [e.g. iPhone6] 33 | - OS: [e.g. iOS8.1] 34 | - Browser [e.g. stock browser, safari] 35 | - Version [e.g. 22] 36 | 37 | **Additional context** 38 | Add any other context about the problem here, like the long-term affects of the problem. 39 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/repl-code-behind.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Repl code behind 3 | about: To tell everyone the repo code is x commits behind 4 | title: "[COMMIT]" 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | # the repl is _ commits behind 11 | 12 | ## why those commits are important 13 | Describe why the commits are important 14 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ## Status 2 | **READY/IN DEVELOPMENT/HOLD** 3 | 4 | ## Migrations 5 | YES | NO 6 | 7 | ## Description 8 | A few sentences describing the overall goals of the pull request's commits. 9 | 10 | + 🔥 The Fire emoji is for changes that mark a file ready for a *new release*. 11 | + ✏️ The Pencil emoji is for minor *changes* to a file such as *spelling errors* or *syntax changes*. 12 | + 🖋️ The Pen emoji is for major *additions* to a file such as a new feature. 13 | + ❗ The Exclamation emoji is for *changes* to information such as *new info* in the Markdown files. 14 | + ➕ The Plus emoji is for the *addition* of a file that didn't exist before. 15 | + ⭐ The Star emoji is for the *addition* of a feature that didn't exist before. 16 | 17 | ## Related PRs 18 | List related PRs against other branches: 19 | 20 | branch | PR 21 | ------ | ------ 22 | other_pr_production | [link]() 23 | other_pr_master | [link]() 24 | 25 | 26 | ## Todos 27 | - [ ] Tests 28 | - [ ] Documentation 29 | 30 | 31 | ## Deploy Notes 32 | Notes regarding deployment the contained body of work. These should note any 33 | db migrations, etc. 34 | 35 | 36 | 1. 37 | 38 | ## Impacted Areas in Application 39 | List general components of the application that this PR will affect: 40 | 41 | * 42 | -------------------------------------------------------------------------------- /.github/stale.yml: -------------------------------------------------------------------------------- 1 | # Number of days of inactivity before an issue becomes stale 2 | daysUntilStale: 60 3 | # Number of days of inactivity before a stale issue is closed 4 | daysUntilClose: 7 5 | # Issues with these labels will never be considered stale 6 | exemptLabels: 7 | - pinned 8 | - unstale 9 | # Label to use when marking an issue as stale 10 | staleLabel: wontfix 11 | # Comment to post when marking an issue as stale. Set to `false` to disable 12 | markComment: > 13 | This issue has been automatically marked as stale because it has not had 14 | recent activity. It will be closed if no further activity occurs. Thank you 15 | for your contributions. 16 | # Comment to post when closing a stale issue. Set to `false` to disable 17 | closeComment: false 18 | -------------------------------------------------------------------------------- /.github/workflows/SyntaxChecker.yml: -------------------------------------------------------------------------------- 1 | on: push 2 | name: Lint Python 3 | jobs: 4 | lint: 5 | runs-on: ubuntu-latest 6 | steps: 7 | - uses: actions/checkout@v2 8 | - uses: cclauss/Find-Python-syntax-errors-action@master 9 | -------------------------------------------------------------------------------- /.github/workflows/greetings.yml: -------------------------------------------------------------------------------- 1 | name: Greetings 2 | 3 | on: [pull_request, issues] 4 | 5 | jobs: 6 | greeting: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - uses: actions/first-interaction@v1 10 | with: 11 | repo-token: ${{ secrets.GITHUB_TOKEN }} 12 | issue-message: 'First Issue - Thanks for your contribution! (OwO)' 13 | pr-message: 'First Pull Request - Thanks for your contribution! (OwO)' 14 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to making participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, sex characteristics, gender identity and expression, 9 | level of experience, education, socio-economic status, nationality, personal 10 | appearance, race, religion, or sexual identity and orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | * Using welcoming and inclusive language 18 | * Being respectful of differing viewpoints and experiences 19 | * Gracefully accepting constructive criticism 20 | * Focusing on what is best for the community 21 | * Showing empathy towards other community members 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | * The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances 27 | * Trolling, insulting/derogatory comments, and personal or political attacks 28 | * Public or private harassment 29 | * Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission 31 | * Other conduct which could reasonably be considered inappropriate in a 32 | professional setting 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies both within project spaces and in public spaces 49 | when an individual is representing the project or its community. Examples of 50 | representing a project or community include using an official project e-mail 51 | address, posting via an official social media account, or acting as an appointed 52 | representative at an online or offline event. Representation of a project may be 53 | further defined and clarified by project maintainers. 54 | 55 | ## Attribution 56 | 57 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 58 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html 59 | 60 | [homepage]: https://www.contributor-covenant.org 61 | 62 | For answers to common questions about this code of conduct, see 63 | https://www.contributor-covenant.org/faq 64 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # 🖊 How to contribute to Repl Customs 2 | 3 | 4 | First of all, if you're new here, thanks for your consideration to contribute to Repl Customs! 😀 This guide will help you get started and walk you the process of making improvements or changes to the Repl Customs web application. 5 | 6 | ### What do I need to know? 7 | Repl-Customs is a web application built on the Flask micro-web framework. The languages used to run are Python 3, JavaScript, and the web markup languages HTML and CSS. If you have any level of skill beyond beginner in any these languages, then you're good to contribute to Repl-Customs! If you want to work on the frontend side of RC, then head over to the `templates` folder! If you want to work on the backend, then check out the `app.py` file! 8 | 9 | ### Opening Issues 10 | 11 | If you want to open an issue for a bug/problem please make sure to include a code snippet of the issue or a link to the file(s) in which the problem is located. If you already have fix or suggestion for the issue you opened please include a code snippet or link it as well as a description of your fix. Simply follow the Issue template of your choice and you should be good for approval. Please include as much info as you can, wel will tell you if we need more info. 12 | 13 | ### Opening A Pull Request 14 | 15 | When opening a pull request please make sure your changes only affect one file at one time. If you need to change multiple files and the changes are unrelated, then please open multiple pull requests. Just like with opening an issue, please be as clear as possible when describing the reason you have opened a pull request. Only change multiple files in one pull request if the same shange is being made to each of the files, such as adding a back button to a few of the template files. 16 | 17 | ### Describing Your Pull Request 18 | In the RC repository, we like to use emojis to describe and classify our changes; here's a list for you to check before you get started. 19 | 20 | + 🔥 The Fire emoji is for changes that mark a file ready for a *new release*. 21 | + ✏️ The Pencil emoji is for minor *changes* to a file such as *spelling errors* or *syntax changes*. 22 | + 🖋️ The Pen emoji is for major *additions* to a file such as a new feature. 23 | + ❗ The Exclamation emoji is for *changes* to information such as *new info* in the Markdown files. 24 | + ➕ The Plus emoji is for the *addition* of a file that didn't exist before. 25 | + ⭐ The Star emoji is for the *addition* of a feature that didn't exist before. 26 | 27 | ### Modifying the Code 28 | 29 | When you set up an environment to modify the code for the web-app, you'll need a CSRF token to run it or Flask will throw a fit. You can generate a 16 character token in Python with the built-in `secrets` module. In the code that starts the Flask app in `app.py` you'll need to put in your generated token at `line 72`: 30 | 31 | Instead of: 32 | ```python 33 | KEY = os.getenv('APP_KEY') 34 | 35 | app = Flask(__name__) 36 | app.config['SECRET_KEY'] = KEY 37 | ``` 38 | 39 | Do: 40 | ```python 41 | KEY = secrets.token_hex() 42 | 43 | app = Flask(__name__) 44 | app.config['SECRET_KEY'] = KEY 45 | ``` 46 | 47 | Since this token will be unique to you, the code will need to be changed back before it can merged into the master branch. 48 | 49 | ### Conclusion 50 | I hope this has helped you out and again I thank you for your contributions! Happy Coding! 👏🎉 51 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 IreTheKID 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 |


Welcome to Repl Customs!

3 |
4 | 5 |
6 | 7 | 8 |
9 | 10 | --- 11 | #### ~~[Live Build](https://repl-customs.irethekid.repl.co/): *The live and stable version, all content here is officialy tested before release*~~ 12 | #### [Experimental Build](https://rc.irethekid.repl.co): *The experimental version, updates and features are tested here, don't mind the bugs* 13 | 14 | **NOTE:** The "Live Build" is no longer maintained as it has fallen too far behind the "Experimntal build" for version bumping to be feasible, just think of the Experimental Build as ReplCustoms 2.0 :P 15 | 16 | ### What is Repl-Customs? 🤔 17 | 18 | Repl Customs is a data solution I created to allow users to search the Repldatabase for custom data solutions. ~~That doesn't answer anything but OK~~ You can find out answers to questions like, "*How many upvotes does my post get in an hour?*" or "*Who commented the most in the past week?*" Things like this are easy to look at with Repl Customs! 19 | 20 | ### The Current State of Things. 📈 21 | Repl Customs is still in development and the only features are looking up Repl users and getting a glorified profile page, looking up posts, and looking at the Repl leaderboard for cycles, but that is just the beginning! I want this to be a fully-fledged web app that is worth your time to visit. So look forward to constant updates and changes! I’ll be working on this for next few months. This is the list of upcoming features, https://github.com/IreTheKID/Repl-Customs/blob/master/upcoming.md. 22 | 23 | ### Want to Contribute? 📝 24 | If this project piques your interest and you would like to contribute to this project, anyone who wants to can read the guide (*[here](https://github.com/IreTheKID/Repl-Customs/blob/master/CONTRIBUTING.md)*) and then open a pull request with your desired changes/updates! If you contribute a great amount to Repl Customs, feel free to request joining the team! (*Right now there’s an issue with printing a comment’s post title to the web app, so if you have a fix for that please feel free to help out!* 😀) 25 | 26 | #### The Team 27 | + [IreTheKID](https://github.com/IreTheKID) 28 | + [Codemonkey51](https://github.com/Codemonkey51) 29 | + [sugarfi](https://github.com/sugarfi) 30 | + [FunnyLamma](https://github.com/FunnyLamma) 31 | 32 | #### Top Contributors 👏👏 33 | + [Commander07](https://github.com/commander07) 34 | + [AmazingMech2418](https://github.com/amazinigmech2418) 35 | + [c00lhawk607](https://github.com/c00lhawk607) 36 | + [FunnyLamma](https://github.com/FunnyLamma) 37 | + [DynamicSquid](https://github.com/DynamicSquid) 38 | + [RaidTheWeb](https://github.com/RaidTheWeb) 39 | 40 | 41 | ### Other Stuff 🙃🙃 42 | [Join our Discord Server!](https://discord.gg/DTf3z98) (Currently Inactive lul) 43 | 44 | ###### With all that said, please enjoy the V2 release of Repl-Customs! 😎😎 🎉🎉 45 | 46 | > IreTheKID 47 | -------------------------------------------------------------------------------- /app.py: -------------------------------------------------------------------------------- 1 | import os 2 | import sys 3 | import time 4 | import asyncio 5 | import repltalk 6 | import threading 7 | from datetime import datetime 8 | from forms import SearchReplit 9 | from gevent.pywsgi import WSGIServer 10 | from rctools import log_error, get_ordinal 11 | from flask import Flask, render_template, request 12 | 13 | 14 | cache = {} 15 | 16 | now = datetime.now() 17 | cur_time = now.strftime("%H:%M:%S") 18 | 19 | cache_time = 120 20 | 21 | def remove_key(name,e): 22 | global cache 23 | time.sleep(cache_time) 24 | try: 25 | del cache[name] 26 | except: 27 | return 28 | async def get_user_object(name): 29 | global user, posts, result, comments, cache 30 | replit = repltalk.Client() 31 | if(name in cache.keys()): 32 | cached = cache.get(name) 33 | print('used cache') 34 | user = cached.get('user') 35 | posts = cached.get('posts') 36 | comments = cached.get('comments') 37 | else: 38 | try: 39 | user = await replit.get_user(name) 40 | print('requested info') 41 | except Exception as e: 42 | user = None 43 | ex_type, ex, tb = sys.exc_info() 44 | log_error( 45 | e, ex_type, 46 | ex, tb, 47 | cur_time) 48 | try: 49 | posts = await user.get_posts( 50 | limit=5, order='new') 51 | except Exception as e: 52 | posts = None 53 | ex_type, ex, tb = sys.exc_info() 54 | log_error( 55 | e, ex_type, 56 | ex, tb, 57 | cur_time) 58 | try: 59 | comments = await user.get_comments( 60 | limit=5, order='new') 61 | except Exception as e: 62 | comments = None 63 | ex_type, ex, tb = sys.exc_info() 64 | log_error(e, ex_type, 65 | ex, tb, 66 | cur_time) 67 | temp = { 68 | 'user': user, 69 | 'posts': posts, 70 | 'comments': comments 71 | } 72 | cache[name]=temp 73 | threading.Thread( 74 | None, remove_key, 75 | args=(name,0) 76 | ).start() 77 | 78 | async def get_post_by_query(query): 79 | global posts_res 80 | posts_res = [] 81 | replit = repltalk.Client() 82 | async for post in replit.boards.all.get_posts(sort='top', search=str(query)): 83 | posts_res.append(post) 84 | 85 | async def get_talk_leaderboard(lim=50): 86 | global lboard 87 | replit = repltalk.Client() 88 | lboard = await replit.get_leaderboard(limit=lim) 89 | 90 | KEY = os.getenv('APP_KEY') 91 | 92 | app = Flask(__name__) 93 | app.config['SECRET_KEY'] = KEY 94 | 95 | @app.route('/') 96 | @app.route('/home') 97 | def index(): 98 | return render_template( 99 | 'index.html', title='Home') 100 | 101 | @app.errorhandler(404) # Added and under construction by [@adityaru] 102 | def error(e): 103 | """Handle errors. [@adityaru]""" 104 | 105 | return render_template( 106 | '404.html', title='404 Error'), 404 107 | 108 | @app.route('/license') 109 | def license(): 110 | return render_template( 111 | 'license.html', title='License & Legal Info') 112 | 113 | @app.route('/apps') # Working app page. Contains all app functions for Repl-Customs. [@IreTheKID] 114 | def apps(): 115 | return render_template( 116 | 'apps.html', title='Apps') 117 | 118 | @app.route('/lboard') 119 | @app.route('/leaderboard') 120 | def leaderboard(): 121 | asyncio.run(get_talk_leaderboard(40)) 122 | return render_template('app.html', output='LEADER',title='Leaderboard', 123 | leaderboard=lboard, enumerate=enumerate, 124 | get_ordinal=get_ordinal) 125 | 126 | @app.route('/app', methods=['GET', 'POST']) 127 | def application(): 128 | form = SearchReplit() 129 | sType = request.args.get('searchType') 130 | sData = request.args.get('searchData') 131 | if sType and sData: 132 | if sType == '3': 133 | global posts_res 134 | try: 135 | asyncio.run( 136 | get_post_by_query(str(sData)) 137 | ) 138 | return render_template('app.html', output='POST', title='Results', 139 | posts=posts_res, sData=sData, str=str) 140 | except IndexError: 141 | posts_res = None 142 | return render_template('app.html', output='POST', title='Results', 143 | posts=posts_res, sData=sData, str=str) 144 | elif sType == '2': 145 | asyncio.run( 146 | get_user_object( 147 | str(sData.replace('@', '', 1)) 148 | ) 149 | ) 150 | try: 151 | s = user.subscription 152 | timestamp = str(user.timestamp).split(' ')[0] 153 | if str(s) == 'None': sub = 'Starter' 154 | elif str(s) == 'hacker': sub = 'Hacker' 155 | else: sub = 'Not Found' 156 | except AttributeError: 157 | return render_template('error.html', title='Error Occured', 158 | error="UserNotFound", context='From search page.', 159 | sData=sData) 160 | except Exception as e: 161 | ex_type, ex, tb = sys.exc_info() 162 | log_error( 163 | e, ex_type, 164 | ex, tb, 165 | cur_time) 166 | return None 167 | 168 | return render_template('app.html', output='USER', title='Results', 169 | user=user, posts=posts, comments=comments, 170 | sub=sub, timestamp=timestamp) 171 | 172 | return render_template('app.html', output='FORM', title='Search', form=form) 173 | 174 | if __name__ == '__main__': 175 | http_server = WSGIServer(('0.0.0.0', int(5000)), app) 176 | http_server.serve_forever() 177 | -------------------------------------------------------------------------------- /forms.py: -------------------------------------------------------------------------------- 1 | from flask_wtf import FlaskForm 2 | from wtforms import StringField, PasswordField, SubmitField, BooleanField, SelectField 3 | from wtforms.fields.html5 import SearchField 4 | from wtforms.validators import DataRequired, Length, Email, EqualTo 5 | 6 | class SearchReplit(FlaskForm): 7 | searchType = SelectField('What are you looking for?', 8 | choices=[ 9 | (1, ' '), 10 | (2, 'Users'), 11 | (3, 'Posts') 12 | ], 13 | validators=[DataRequired()]) 14 | searchData = SearchField('Search Here', validators=[DataRequired()]) 15 | submit = SubmitField('Get Results') 16 | 17 | class SearchPost(FlaskForm): 18 | search_data = SearchField('Post Title', validators=[DataRequired()]) 19 | submit = SubmitField('Search') 20 | 21 | class RegistrationForm(FlaskForm): 22 | username = StringField('Username', validators=[DataRequired(), Length(min=2, max=20)]) 23 | email = StringField('Email', validators=[DataRequired(), Email()]) 24 | password = PasswordField('Password', validators=[DataRequired()]) 25 | confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')]) 26 | submit = SubmitField('Sign Up') 27 | 28 | class LoginForm(FlaskForm): 29 | email = StringField('Email', validators=[DataRequired(), Email()]) 30 | password = PasswordField('Password', validators=[DataRequired()]) 31 | remember = BooleanField('Remember Me') 32 | submit = SubmitField('Login') 33 | -------------------------------------------------------------------------------- /logs/err_log.txt: -------------------------------------------------------------------------------- 1 | Error Occured - 'type' object is not iterable 2 | 3 | Type: 4 | Exception: 'type' object is not iterable 5 | Traceback: 6 | 7 | 8 | Error Occured - 'type' object is not iterable 9 | 10 | Type: 11 | Exception: 'type' object is not iterable 12 | Traceback: 13 | 14 | 15 | Error Occured - 'type' object is not iterable 16 | 17 | Type: 18 | Exception: 'type' object is not iterable 19 | Traceback: 20 | 21 | 22 | Error Occured - 'type' object is not iterable 23 | 24 | Type: 25 | Exception: 'type' object is not iterable 26 | Traceback: 27 | 28 | 29 | Error Occured - 'type' object is not iterable 30 | 31 | Type: 32 | Exception: 'type' object is not iterable 33 | Traceback: 34 | 35 | 36 | Error Occured - 'type' object is not iterable 37 | 38 | Type: 39 | Exception: 'type' object is not iterable 40 | Traceback: 41 | 42 | 43 | Error Occured - 'type' object is not iterable 44 | 45 | Type: 46 | Exception: 'type' object is not iterable 47 | Traceback: 48 | 49 | 50 | Error Occured - 'type' object is not iterable 51 | 52 | Type: 53 | Exception: 'type' object is not iterable 54 | Traceback: 55 | 56 | 57 | Error Occured - 'type' object is not iterable 58 | 59 | Type: 60 | Exception: 'type' object is not iterable 61 | Traceback: 62 | 63 | 64 | Error Occured - 'type' object is not iterable 65 | 66 | Type: 67 | Exception: 'type' object is not iterable 68 | Traceback: 69 | 70 | 71 | Error Occured - 'type' object is not iterable 72 | 73 | Type: 74 | Exception: 'type' object is not iterable 75 | Traceback: 76 | 77 | 78 | Error Occured - 'type' object is not iterable 79 | 80 | Type: 81 | Exception: 'type' object is not iterable 82 | Traceback: 83 | 84 | 85 | Error Occured - 'type' object is not iterable 86 | 87 | Type: 88 | Exception: 'type' object is not iterable 89 | Traceback: 90 | 91 | 92 | Error Occured - 'type' object is not iterable 93 | 94 | Type: 95 | Exception: 'type' object is not iterable 96 | Traceback: 97 | 98 | 99 | Error Occured - 'type' object is not iterable 100 | 101 | Type: 102 | Exception: 'type' object is not iterable 103 | Traceback: 104 | 105 | 106 | Error Occured - 'type' object is not iterable 107 | 108 | Type: 109 | Exception: 'type' object is not iterable 110 | Traceback: 111 | 112 | 113 | Error Occured - 'type' object is not iterable 114 | 115 | Type: 116 | Exception: 'type' object is not iterable 117 | Traceback: 118 | 119 | 120 | Error Occured - 'type' object is not iterable 121 | Type: 122 | Exception: 'type' object is not iterable 123 | Traceback: 124 | 125 | Error Occured - 'type' object is not iterable 126 | Type: 127 | Exception: 'type' object is not iterable 128 | Traceback: 129 | 130 | 131 | Error Occured - 'type' object is not iterable 132 | Type: 133 | Exception: 'type' object is not iterable 134 | Traceback: 135 | 136 | 137 | 138 | Error Occured - 'NoneType' object has no attribute 'get_posts' 139 | Type: 140 | Exception: 'NoneType' object has no attribute 'get_posts' 141 | Traceback: 142 | 143 | 144 | 145 | Error Occured - 'NoneType' object has no attribute 'get_comments' 146 | Type: 147 | Exception: 'NoneType' object has no attribute 'get_comments' 148 | Traceback: 149 | 150 | 151 | 152 | Error Occured - 'type' object is not iterable 153 | Type: 154 | Exception: 'type' object is not iterable 155 | Traceback: 156 | 157 | 158 | 159 | Error Occured - 'type' object is not iterable 160 | Type: 161 | Exception: 'type' object is not iterable 162 | Traceback: 163 | 164 | 165 | 166 | Error Occured - 'NoneType' object has no attribute 'get_posts' 167 | Type: 168 | Exception: 'NoneType' object has no attribute 'get_posts' 169 | Traceback: 170 | 171 | 172 | 173 | Error Occured - 'NoneType' object has no attribute 'get_comments' 174 | Type: 175 | Exception: 'NoneType' object has no attribute 'get_comments' 176 | Traceback: 177 | 178 | 179 | 180 | Error Occured - 'type' object is not iterable 181 | Type: 182 | Exception: 'type' object is not iterable 183 | Traceback: 184 | 185 | 186 | 187 | Error Occured - 'type' object is not iterable 188 | Type: 189 | Exception: 'type' object is not iterable 190 | Traceback: 191 | 192 | 193 | 194 | Error Occured - 'type' object is not iterable 195 | Type: 196 | Exception: 'type' object is not iterable 197 | Traceback: 198 | 199 | 200 | 201 | Error Occured - 'type' object is not iterable 202 | Type: 203 | Exception: 'type' object is not iterable 204 | Traceback: 205 | 206 | 207 | 208 | Error Occured - 'type' object is not iterable 209 | Type: 210 | Exception: 'type' object is not iterable 211 | Traceback: 212 | 213 | 214 | 215 | Error Occured - 'type' object is not iterable 216 | Type: 217 | Exception: 'type' object is not iterable 218 | Traceback: 219 | 220 | 221 | 222 | Error Occured - 'type' object is not iterable 223 | Type: 224 | Exception: 'type' object is not iterable 225 | Traceback: 226 | 227 | 228 | 229 | Error Occured - 'type' object is not iterable 230 | Type: 231 | Exception: 'type' object is not iterable 232 | Traceback: 233 | 234 | 235 | 236 | Error Occured - 'type' object is not iterable 237 | Type: 238 | Exception: 'type' object is not iterable 239 | Traceback: 240 | 241 | 242 | 243 | Error Occured - 'NoneType' object has no attribute 'get_posts' 244 | Type: 245 | Exception: 'NoneType' object has no attribute 'get_posts' 246 | Traceback: 247 | 248 | 249 | 250 | Error Occured - 'NoneType' object has no attribute 'get_comments' 251 | Type: 252 | Exception: 'NoneType' object has no attribute 'get_comments' 253 | Traceback: 254 | 255 | 256 | 257 | Error Occured - 'NoneType' object has no attribute 'get_posts' 258 | Type: 259 | Exception: 'NoneType' object has no attribute 'get_posts' 260 | Traceback: 261 | 262 | 263 | 264 | Error Occured - 'NoneType' object has no attribute 'get_comments' 265 | Type: 266 | Exception: 'NoneType' object has no attribute 'get_comments' 267 | Traceback: 268 | 269 | 270 | 271 | Error Occured - 'NoneType' object has no attribute 'get_posts' 272 | Type: 273 | Exception: 'NoneType' object has no attribute 'get_posts' 274 | Traceback: 275 | 276 | 277 | 278 | Error Occured - 'NoneType' object has no attribute 'get_comments' 279 | Type: 280 | Exception: 'NoneType' object has no attribute 'get_comments' 281 | Traceback: 282 | 283 | 284 | 285 | Error Occured - 'NoneType' object has no attribute 'get_posts' 286 | Type: 287 | Exception: 'NoneType' object has no attribute 'get_posts' 288 | Traceback: 289 | 290 | 291 | 292 | Error Occured - 'NoneType' object has no attribute 'get_comments' 293 | Type: 294 | Exception: 'NoneType' object has no attribute 'get_comments' 295 | Traceback: 296 | 297 | 298 | 299 | Error Occured - 'NoneType' object has no attribute 'get_posts' 300 | Type: 301 | Exception: 'NoneType' object has no attribute 'get_posts' 302 | Traceback: 303 | 304 | 305 | 306 | Error Occured - 'NoneType' object has no attribute 'get_comments' 307 | Type: 308 | Exception: 'NoneType' object has no attribute 'get_comments' 309 | Traceback: 310 | 311 | 312 | 313 | Error Occured - 'NoneType' object has no attribute 'get_posts' 314 | Type: 315 | Exception: 'NoneType' object has no attribute 'get_posts' 316 | Traceback: 317 | 318 | 319 | 320 | Error Occured - 'NoneType' object has no attribute 'get_comments' 321 | Type: 322 | Exception: 'NoneType' object has no attribute 'get_comments' 323 | Traceback: 324 | 325 | 326 | 327 | Error Occured - 'type' object is not iterable 328 | Type: 329 | Exception: 'type' object is not iterable 330 | Traceback: 331 | 332 | 333 | 334 | Error Occured - 'NoneType' object has no attribute 'get_posts' 335 | Type: 336 | Exception: 'NoneType' object has no attribute 'get_posts' 337 | Traceback: 338 | 339 | 340 | 341 | Error Occured - 'NoneType' object has no attribute 'get_comments' 342 | Type: 343 | Exception: 'NoneType' object has no attribute 'get_comments' 344 | Traceback: 345 | 346 | 347 | 348 | Error Occured - 'NoneType' object has no attribute 'get_posts' 349 | Type: 350 | Exception: 'NoneType' object has no attribute 'get_posts' 351 | Traceback: 352 | 353 | 354 | 355 | Error Occured - 'NoneType' object has no attribute 'get_comments' 356 | Type: 357 | Exception: 'NoneType' object has no attribute 'get_comments' 358 | Traceback: 359 | 360 | 361 | 362 | Error Occured - 'NoneType' object has no attribute 'get_posts' 363 | Type: 364 | Exception: 'NoneType' object has no attribute 'get_posts' 365 | Traceback: 366 | 367 | 368 | 369 | Error Occured - 'NoneType' object has no attribute 'get_comments' 370 | Type: 371 | Exception: 'NoneType' object has no attribute 'get_comments' 372 | Traceback: 373 | 374 | 375 | 376 | Error Occured - 'NoneType' object has no attribute 'get_posts' 377 | Type: 378 | Exception: 'NoneType' object has no attribute 'get_posts' 379 | Traceback: 380 | 381 | 382 | 383 | Error Occured - 'NoneType' object has no attribute 'get_comments' 384 | Type: 385 | Exception: 'NoneType' object has no attribute 'get_comments' 386 | Traceback: 387 | 388 | 389 | 390 | Error Occured - 'NoneType' object has no attribute 'get_posts' 391 | Type: 392 | Exception: 'NoneType' object has no attribute 'get_posts' 393 | Traceback: 394 | 395 | 396 | 397 | Error Occured - 'NoneType' object has no attribute 'get_comments' 398 | Type: 399 | Exception: 'NoneType' object has no attribute 'get_comments' 400 | Traceback: 401 | 402 | 403 | 404 | Error Occured - 'NoneType' object has no attribute 'get_posts' 405 | Type: 406 | Exception: 'NoneType' object has no attribute 'get_posts' 407 | Traceback: 408 | 409 | 410 | 411 | Error Occured - 'NoneType' object has no attribute 'get_comments' 412 | Type: 413 | Exception: 'NoneType' object has no attribute 'get_comments' 414 | Traceback: 415 | 416 | 417 | 418 | Error Occured - 'NoneType' object has no attribute 'get_posts' 419 | Type: 420 | Exception: 'NoneType' object has no attribute 'get_posts' 421 | Traceback: 422 | 423 | 424 | 425 | Error Occured - 'NoneType' object has no attribute 'get_comments' 426 | Type: 427 | Exception: 'NoneType' object has no attribute 'get_comments' 428 | Traceback: 429 | 430 | 431 | 432 | Error Occured - 'NoneType' object has no attribute 'get_posts' 433 | Type: 434 | Exception: 'NoneType' object has no attribute 'get_posts' 435 | Traceback: 436 | 437 | 438 | 439 | Error Occured - 'NoneType' object has no attribute 'get_comments' 440 | Type: 441 | Exception: 'NoneType' object has no attribute 'get_comments' 442 | Traceback: 443 | 444 | 445 | 446 | Error Occured - 'NoneType' object has no attribute 'get_posts' 447 | Type: 448 | Exception: 'NoneType' object has no attribute 'get_posts' 449 | Traceback: 450 | 451 | 452 | 453 | Error Occured - 'NoneType' object has no attribute 'get_comments' 454 | Type: 455 | Exception: 'NoneType' object has no attribute 'get_comments' 456 | Traceback: 457 | 458 | 459 | 460 | Error Occured - 'type' object is not iterable 461 | Type: 462 | Exception: 'type' object is not iterable 463 | Traceback: 464 | 465 | 466 | 467 | Error Occured - 'type' object is not iterable 468 | Type: 469 | Exception: 'type' object is not iterable 470 | Traceback: 471 | 472 | 473 | 474 | Error Occured - 'type' object is not iterable 475 | Type: 476 | Exception: 'type' object is not iterable 477 | Traceback: 478 | 479 | 480 | 481 | Error Occured - 'type' object is not iterable 482 | Type: 483 | Exception: 'type' object is not iterable 484 | Traceback: 485 | 486 | 487 | 488 | Error Occured - 'type' object is not iterable 489 | Type: 490 | Exception: 'type' object is not iterable 491 | Traceback: 492 | 493 | 494 | 495 | Error Occured - 'type' object is not iterable 496 | Type: 497 | Exception: 'type' object is not iterable 498 | Traceback: 499 | 500 | 501 | 502 | Error Occured - 'type' object is not iterable 503 | Type: 504 | Exception: 'type' object is not iterable 505 | Traceback: 506 | 507 | 508 | 509 | Error Occured - 'type' object is not iterable 510 | Type: 511 | Exception: 'type' object is not iterable 512 | Traceback: 513 | 514 | 515 | 516 | Error Occured - 'type' object is not iterable 517 | Type: 518 | Exception: 'type' object is not iterable 519 | Traceback: 520 | 521 | 522 | 523 | Error Occured - 'type' object is not iterable 524 | Type: 525 | Exception: 'type' object is not iterable 526 | Traceback: 527 | 528 | 529 | Time Logged: 22:58:40 530 | 531 | 532 | Error Occured - 'type' object is not iterable 533 | Type: 534 | Exception: 'type' object is not iterable 535 | Traceback: 536 | 537 | 538 | Time Logged: 22:58:40 539 | 540 | 541 | Error Occured - 'type' object is not iterable 542 | Type: 543 | Exception: 'type' object is not iterable 544 | Traceback: 545 | 546 | 547 | Time Logged: 22:58:40 548 | 549 | 550 | Error Occured - 'NoneType' object has no attribute 'get_posts' 551 | Type: 552 | Exception: 'NoneType' object has no attribute 'get_posts' 553 | Traceback: 554 | 555 | 556 | Time Logged: 22:58:40 557 | 558 | 559 | Error Occured - 'NoneType' object has no attribute 'get_comments' 560 | Type: 561 | Exception: 'NoneType' object has no attribute 'get_comments' 562 | Traceback: 563 | 564 | 565 | Time Logged: 22:58:40 566 | 567 | 568 | Error Occured - 'NoneType' object has no attribute 'get_posts' 569 | Type: 570 | Exception: 'NoneType' object has no attribute 'get_posts' 571 | Traceback: 572 | 573 | 574 | Time Logged: 22:58:40 575 | 576 | 577 | Error Occured - 'NoneType' object has no attribute 'get_comments' 578 | Type: 579 | Exception: 'NoneType' object has no attribute 'get_comments' 580 | Traceback: 581 | 582 | 583 | Time Logged: 22:58:40 584 | 585 | 586 | Error Occured - 'NoneType' object has no attribute 'get_posts' 587 | Type: 588 | Exception: 'NoneType' object has no attribute 'get_posts' 589 | Traceback: 590 | 591 | 592 | Time Logged: 22:58:40 593 | 594 | 595 | Error Occured - 'NoneType' object has no attribute 'get_comments' 596 | Type: 597 | Exception: 'NoneType' object has no attribute 'get_comments' 598 | Traceback: 599 | 600 | 601 | Time Logged: 22:58:40 602 | 603 | 604 | Error Occured - 'type' object is not iterable 605 | Type: 606 | Exception: 'type' object is not iterable 607 | Traceback: 608 | 609 | 610 | Time Logged: 22:58:40 611 | 612 | 613 | Error Occured - 'type' object is not iterable 614 | Type: 615 | Exception: 'type' object is not iterable 616 | Traceback: 617 | 618 | 619 | Time Logged: 23:16:22 620 | 621 | 622 | Error Occured - 'type' object is not iterable 623 | Type: 624 | Exception: 'type' object is not iterable 625 | Traceback: 626 | 627 | 628 | Time Logged: 23:16:22 629 | 630 | -------------------------------------------------------------------------------- /rctools/__init__.py: -------------------------------------------------------------------------------- 1 | def log_error(a, b, c, d, e): 2 | errTemplate = """ 3 | Error Occured - {0} 4 | Type: {1} 5 | Exception: {2} 6 | Traceback: 7 | {3} 8 | 9 | Time Logged: {4} 10 | 11 | """ 12 | with open('Repl-Customs/logs/err_log.txt', 'a') as fh: 13 | res = errTemplate.format(a, b, c, d, e) 14 | fh.write(res) 15 | 16 | def get_ordinal(num): 17 | if str(num)[-1] == '1': 18 | ordinal = 'st' 19 | if len(str(num)) > 1: ordinal = 'th' 20 | elif str(num)[-1] == '2': 21 | ordinal = 'nd' 22 | elif str(num)[-1] == '3': 23 | ordinal = 'rd' 24 | else: 25 | ordinal = 'th' 26 | res = str(num) + ordinal 27 | 28 | return res -------------------------------------------------------------------------------- /rctools/__pycache__/__init__.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/frissyn/ReplCustoms/0bcf45dd5a386c64d21345a005ede85b9bec7610/rctools/__pycache__/__init__.cpython-38.pyc -------------------------------------------------------------------------------- /static/css/main.css: -------------------------------------------------------------------------------- 1 | @import url('//fonts.googleapis.com/css2?family=Open+Sans&family=Oswald&family=Raleway&display=swap'); 2 | @import url('https://fonts.googleapis.com/css2?family=Ubuntu+Mono&display=swap'); 3 | 4 | html { 5 | background-color: snow; 6 | line-height: 1.2; 7 | scroll-behavior: smooth; 8 | -ms-text-size-adjust: 100%; 9 | -webkit-text-size-adjust: 100% 10 | } 11 | 12 | *:focus { 13 | outline-color: lightblue; 14 | outline-style: solid; 15 | outline-width: 1px; 16 | 17 | } 18 | 19 | .webpage-content-container { 20 | margin-left: 11%; 21 | margin-right: 11%; 22 | margin-top: 3%; 23 | margin-bottom: 4%; 24 | } 25 | 26 | .logo-top-container { 27 | align-content: center; 28 | text-align: center; 29 | margin-left: auto; 30 | margin-right: auto; 31 | margin-bottom: 10px; 32 | margin-top: 10px; 33 | } 34 | 35 | .center-custom { 36 | align-content: center; 37 | text-align: center; 38 | margin-left: auto; 39 | margin-right: auto; 40 | } 41 | 42 | .pd-high { 43 | padding-top: 5%; 44 | padding-bottom: 5%; 45 | padding-right: 15%; 46 | padding-left: 15%; 47 | } 48 | 49 | .results-button { 50 | height: 100%; 51 | padding: 0; 52 | } 53 | 54 | .fill-all { 55 | height: 100%; 56 | width: 100%; 57 | padding: 0; 58 | margin: 0; 59 | } 60 | 61 | .extern-link:hover { 62 | text-decoration: underline; 63 | } 64 | -------------------------------------------------------------------------------- /static/images/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/frissyn/ReplCustoms/0bcf45dd5a386c64d21345a005ede85b9bec7610/static/images/error.png -------------------------------------------------------------------------------- /static/images/external.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/frissyn/ReplCustoms/0bcf45dd5a386c64d21345a005ede85b9bec7610/static/images/external.png -------------------------------------------------------------------------------- /static/images/pure-black.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/frissyn/ReplCustoms/0bcf45dd5a386c64d21345a005ede85b9bec7610/static/images/pure-black.jpg -------------------------------------------------------------------------------- /static/images/repl_pixel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/frissyn/ReplCustoms/0bcf45dd5a386c64d21345a005ede85b9bec7610/static/images/repl_pixel.png -------------------------------------------------------------------------------- /static/images/repl_pixel_256px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/frissyn/ReplCustoms/0bcf45dd5a386c64d21345a005ede85b9bec7610/static/images/repl_pixel_256px.png -------------------------------------------------------------------------------- /static/images/repl_pixel_64px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/frissyn/ReplCustoms/0bcf45dd5a386c64d21345a005ede85b9bec7610/static/images/repl_pixel_64px.png -------------------------------------------------------------------------------- /static/images/skeleton.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/frissyn/ReplCustoms/0bcf45dd5a386c64d21345a005ede85b9bec7610/static/images/skeleton.gif -------------------------------------------------------------------------------- /static/js/initialize.js: -------------------------------------------------------------------------------- 1 | jQuery(document).ready(function(){ 2 | jQuery('select').formSelect(); 3 | }); 4 | 5 | jQuery(document).ready(function(){ 6 | jQuery('.collapsible').collapsible(); 7 | }); -------------------------------------------------------------------------------- /static/js/script.js: -------------------------------------------------------------------------------- 1 | function fadeInWebpage() { 2 | jQuery('body').css('display','none'); 3 | jQuery(document).ready(function() { 4 | jQuery('body').fadeIn(2000); 5 | jQuery('a').on('click',function(event) { 6 | var thetarget = this.getAttribute('target') 7 | if (thetarget != "_blank") { 8 | var thehref = this.getAttribute('href') 9 | event.preventDefault(); 10 | jQuery('body').fadeOut(function(){ 11 | window.location = thehref 12 | }); 13 | }}); 14 | }); 15 | setTimeout(function() { 16 | jQuery('body').fadeIn(); 17 | }, 2000) 18 | }; 19 | 20 | function transferTo(tag) { 21 | window.location.href = tag; 22 | }; 23 | 24 | function sendTo(link) { 25 | window.open(link, '_blank'); 26 | }; -------------------------------------------------------------------------------- /templates/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% if title %} 5 | Repl Customs - {{ title }}{% else %} 6 | Repl Customs{% endif %} 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 39 | 40 |
41 |
42 | 43 |
44 |

404 Error! 😅

45 |
What you're looking for ain't here!
46 |
47 |
48 |
49 |
50 | 51 | Go Home. 52 |
53 |
54 |
55 |
56 | There could be literally a million reasons as to why this happened.
57 | Here are a few. 58 |
59 |
60 |
61 |
62 |
    63 |
  • The page you thought exists?... It doesn't.
  • 64 |
  • The page you thought exists does, but you typed the wrong URL.
  • 65 |
  • You typed the wrong the URL on purpose.
  • 66 |
  • The website you're coming from is simply incompetent.
  • 67 |
68 |
69 |
70 |
71 | 72 | 73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /templates/app.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% if title %} 5 | Repl Customs - {{ title }}{% else %} 6 | Repl Customs{% endif %} 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 42 | {% if output == 'FORM' %} 43 | 44 |
45 |
46 | 47 |
48 |

Repl Customs

49 |
Search the database here.
50 |
51 |
52 | {{ form.hidden_tag() }} 53 |
54 |
55 | {{ form.searchType }} 56 | {{ form.searchType.label }} 57 |
58 | 64 |
65 |
66 | {{ form.searchData.label }} 67 | {{ form.searchData }} 68 |
69 |
70 |
71 |
72 | {{ form.submit(class_="fill-all") }} 73 |
74 |
75 |
76 |
77 |
78 | 79 | 80 | 81 | 82 | {% elif output == 'USER' %} 83 | 84 |
85 |
86 |
87 |
88 |

{{ user.name }}

89 |
90 |
91 |
92 | 93 |
94 |
95 |

{{ user.bio }}

96 |
97 |
98 |

99 | {% if user.first_name %}

{{user.first_name}} {{user.last_name}}

100 | {% endif %} 101 | Vist Profile 102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
CYCLES
110 |
{{user.cycles}}
111 |
112 |
113 |
DATE JOINED
114 |
{{timestamp}}
115 |
116 |
117 |
SUBSCRIPTION
118 |
{{sub}}
119 |
120 |
121 |
FAVORITE LANGUAGE
122 |
123 | 124 | {{user.languages[0].display_name}} 125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |

Recent Posts

133 |
134 |
135 |

Recent Comments

136 |
137 |
138 |
139 |
140 |
    141 | {% if posts %} 142 | {% for post in posts[:5] %} 143 |
  • 144 |
    145 | call_made 146 | [⬆️ {{post.votes}}] {{post.title}} 147 |
    148 |
    149 |
    150 | 151 | {{post.content[:300]}}... 152 | 153 |
    154 |
    155 |
  • 156 | {% endfor %} 157 | {% else %} 158 |
  • 159 |
    160 | A problem occured when retrieving comments 161 |
    162 |
    163 | Please try again later 164 |
    165 |
  • 166 | {% endif %} 167 |
168 |
169 |
170 |
    171 | {% if comments %} 172 | {% for comment in comments[:5] %} 173 |
  • 174 |
    175 | call_made 176 | [⬆️ {{comment.votes}}] Comment on: {{comment.post}} 177 |
    178 |
    179 |
    180 | 181 | {{comment.content[:300]}}... 182 | 183 |
    184 |
    185 |
  • 186 | {% endfor %} 187 | {% else %} 188 |
  • 189 |
    190 | A problem occured when retrieving comments. 191 |
    192 |
    193 | Please try again later. 194 |
    195 |
  • 196 | {% endif %} 197 |
198 |
199 |
200 |
201 | 202 | 203 | 204 | {% elif output == 'LEADER'%} 205 | 206 |
207 |
208 | 209 |
210 |

ReplTalk Leaderboard

211 |
212 |
213 |
    214 | {% for inx, user in enumerate(leaderboard[0:20:2]) %} 215 |
  • 216 |
    217 |
      218 |
    • 219 | avater 220 | {{user.name}} 221 |

      ({{user.cycles}})

      222 |
      {{get_ordinal(leaderboard.index(user) + 1)}}
      223 |
    • 224 |
    225 |
    226 |
    227 | {{ user.bio }}
    228 | Vist Profile 229 |
    230 |
  • 231 | {% endfor %} 232 |
233 |
234 |
235 |
    236 | {% for inx, user in enumerate(leaderboard[1:20:2]) %} 237 |
  • 238 |
    239 |
      240 |
    • 241 | avater 242 | {{user.name}} 243 |

      ({{user.cycles}})

      244 |
      {{get_ordinal(leaderboard.index(user) + 1)}}
      245 |
    • 246 |
    247 |
    248 |
    249 | {{ user.bio }}
    250 | Vist Profile 251 |
    252 |
  • 253 | {% endfor %} 254 |
255 |
256 |
257 |
258 | 259 | 260 | 261 | {% elif output == "POST" %} 262 | 263 |
264 |
265 | 266 |
267 |

Repl Customs

268 |
Search results for: "{{ sData }}"
269 |
270 |
271 |
272 | {% if posts %} 273 | {% for post in posts %} 274 |
    275 |
  • 276 |
    277 |
      278 |
    • 279 | avatar 280 |

      281 | {{post.author.name }} 282 |   283 | ({{post.author.cycles}}) 284 |
      285 | {{str(post.timestamp).split(' ')[0]}} 286 |

      287 | {{post.title}}
      {{ post.content[:75] }}...
      288 |
      [🔼{{post.votes}}]
      289 |
    • 290 |
    291 |
    292 |
    293 | {{ post.content[:300] }}...

    294 | Vist Post 295 |
    296 |
  • 297 |
298 | {% endfor %} 299 | {% else %} 300 |

Whoops! 😅

301 |
No results found.
302 | {% endif %} 303 |
304 |
305 |
306 |
307 | 308 | 309 | 310 | {% endif %} 311 | 312 | -------------------------------------------------------------------------------- /templates/apps.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% if title %} 5 | Repl Customs - {{ title }}{% else %} 6 | Repl Customs{% endif %} 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 40 | 41 |
42 |
43 | 44 |
45 |
Check out some of our tools!
46 |
47 |
48 |
49 |
50 |
51 | 52 | 53 | Search ReplTalk 54 | 55 | 56 | call_made 57 | 58 |
59 |
60 |

61 | Search for users, posts, and comments. Get real-time and accurate 62 | responses. 63 |

64 |
65 |
66 |
67 |
68 |
69 |
70 | 71 | View Leaderboard 72 | 73 | call_made 74 | 75 |
76 |
77 |

78 | View the top users on ReplTalk and vist thier profiles. 79 | Sorted by cycles. 80 |
81 |   82 |

83 |
84 |
85 |
86 |
87 |
88 |
89 | 90 | View ReplTalk Stats 91 | 92 | call_made 93 | 94 |
95 |
96 |

97 | Get real-time data on ReplTalk's MongoDB data and other fun 98 | statistics. Currently in beta. 99 |
100 | Coming Soon! 101 |

102 |
103 |
104 |
105 |
106 |
107 |
108 | 109 | Access @IreTheBOT 110 | 111 | call_made 112 | 113 |
114 |
115 |

116 | Gain access and information on the @IreTheBOT ReplTalk info bot that 117 | automates data collection from Repl Customs. Currently in beta. 118 |
119 | Coming Soon! 120 |

121 |
122 |
123 |
124 |
125 |
126 | 127 | 128 | 129 | 130 | 131 | -------------------------------------------------------------------------------- /templates/error.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% if title %} 5 | Repl Customs - {{ title }}{% else %} 6 | Repl Customs{% endif %} 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 42 |
43 |
44 | 45 |
46 |
47 |

Whoops! 😅

48 |
We couldn't find the user "{{sData}}"
49 |
Please try searching again.
50 |
51 |
52 |
53 |
54 | 58 |
59 |
60 |
61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% if title %} 5 | Repl Customs - {{ title }}{% else %} 6 | Repl Customs{% endif %} 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 40 |
41 |
42 | 43 |
44 |

Repl Customs

45 |
A datase of Repl Talk users, posts, and more.
46 |
47 |
48 | 53 |
54 |
55 |
56 |
57 |
58 |

flash_on

59 |
Built on a Solid Foundation
60 |

61 | The Repl Customs web-app is built on 62 | mat1's 63 | Repl Talk API wrapper package.You have access to all kinds of Repl 64 | Talk information, including board-specific posts, comment filtering, 65 | upvote tracking and much more. 66 |

67 |
68 |
69 |
70 |
71 |

highlight

72 |
Focus on What's Important
73 |

74 | While using Repl Customs, you can focus on the Information 75 | that matters most to you. With customized data reports, access to Repl 76 | Talk has never been more open. The world is at your fingertips! 77 |

78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
A Community Flask Project
88 |

89 | This Flask web-app was created and designed by IreTheKID and other Repl.it Community members, 90 | styled using the Google Materialize Design Language. I am not affiliated, associated, 91 | authorized, endorsed by, or in any way officially connected to Repl.it, or any of its 92 | subsidiaries or its affiliates. 93 |

94 |
95 |
96 |
97 |
More
98 | 102 |
103 |
104 |
Follow Me!
105 | 110 |
111 |
112 |
113 | 118 |
119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | -------------------------------------------------------------------------------- /templates/license.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% if title %} 5 | Repl Customs - {{ title }}{% else %} 6 | Repl Customs{% endif %} 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 41 | 42 | 43 |
44 |
45 | 46 |
47 |

Repl Customs

48 |
49 |
50 |
51 |
52 |

MIT License


53 |

54 | Copyright ©2020 IreTheKID

55 | 56 | Permission is hereby granted, free of charge, to any person obtaining 57 | a copy of this software and associated documentation files (the 58 | "Software"), to deal in the Software without restriction, including 59 | without limitation the rights to use, copy, modify, merge, publish, 60 | distribute, sublicense, and/or sell copies of the Software, and to 61 | permit persons to whom the Software is furnished to do so, subject to 62 | the following conditions:

63 | 64 | The above copyright notice and this permission notice shall be included 65 | in all copies or substantial portions of the Software.

66 | 67 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 68 | OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 69 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 70 | THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 71 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 72 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 73 | THE SOFTWARE.
74 |

75 |
76 |
77 |
78 |
79 | 80 | 81 | 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /templates/user-output.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% if title %} 5 | Repl Customs - {{ title }}{% else %} 6 | Repl Customs{% endif %} 7 | 8 | 9 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 48 |
49 |
50 |
51 |
52 |

{{ user.name }}

53 |
54 |
55 |
56 | 57 |
58 |
59 |

{{ user.bio }}

60 |
61 |
62 |

63 | {% if user.first_name %}

{{user.first_name}} {{user.last_name}}

64 | {% endif %} 65 | Vist Profile 66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
CYCLES
74 |
{{user.cycles}}
75 |
76 |
77 |
DATE JOINED
78 |
{{timestamp}}
79 |
80 |
81 |
SUBSCRIPTION
82 |
{{sub}}
83 |
84 |
85 |
FAVORITE LANGUAGE
86 |
87 | {{user.languages[0].display_name}}
88 |
89 |
90 |
91 |
92 |
93 |
94 |

Recent Posts

95 |
96 |
97 |

Recent Comments

98 |
99 |
100 |
101 |
102 |
    103 | {% for post in posts[:5] %} 104 |
  • 105 |
    106 | call_made 107 | [⬆️{{post.votes}}] {{post.title[:35]}} 108 |
    109 |
    110 |
    111 | 112 | {{post.content[:300]}}... 113 | 114 |
    115 |
    116 |
  • 117 | {% endfor %} 118 |
119 |
120 |
121 |
    122 | {% if comments %} 123 | {% for comment in comments[:5] %} 124 |
  • 125 |
    126 | call_made 127 | [⬆️{{comment.votes}}] From: {{comment.post}} 128 |
    129 |
    130 |
    131 | 132 | {{comment.content[:300]}}... 133 | 134 |
    135 |
    136 |
  • 137 | {% endfor %} 138 | {% else %} 139 |
  • 140 |
    141 | A PROBLEM OCCURED WHEN RETRIEVING COMMENTS 142 |
    143 |
    144 | PLEASE TRY AGAIN LATER!!! 145 |
    146 |
  • 147 | {% endif %} 148 |
149 |
150 |
151 |
152 | 153 | 154 | -------------------------------------------------------------------------------- /upcoming.md: -------------------------------------------------------------------------------- 1 | ## Whats Upcoming? 2 | 1. **Chart.js functionality** 3 | 4 | 2. **New Themes** 5 | 6 | 3. **Veiwing Repltalk statistics!** 7 | 8 | 4. **Detailed Leaderboard!** 9 | 10 | 5. **Access to IreTheBOT (ReplTalk Bot)** 11 | 12 | 6. **User Login & Customization** 13 | 14 | If you have any suggestions for upcoming updates, feel free to share them. 15 | And if you wish, open an issue for the suggestion, we will review it and decide if it's a good idea. 16 | --------------------------------------------------------------------------------