From 55712756d72779984818fc0e3227c0a524cf7018 Mon Sep 17 00:00:00 2001 From: Nikolaos Karaolidis Date: Tue, 28 Mar 2023 11:44:43 +0300 Subject: [PATCH] Remove unused features Signed-off-by: Nikolaos Karaolidis --- .github/ISSUE_TEMPLATE/bug_report.md | 34 ---- .github/ISSUE_TEMPLATE/feature_request.md | 19 --- .readthedocs.yml | 20 --- .travis.yml | 53 ------ .vscode/settings.json | 3 + README.rst | 78 +-------- docs/Makefile | 19 --- docs/_static/find-group-id.png | Bin 60318 -> 0 bytes docs/_templates/layout.html | 26 --- docs/_templates/sidebar.html | 13 -- docs/api/attachments.rst | 13 -- docs/api/client.rst | 4 - docs/api/events.rst | 4 - docs/api/exceptions.rst | 11 -- docs/api/index.rst | 21 --- docs/api/messages.rst | 8 - docs/api/misc.rst | 20 --- docs/api/session.rst | 4 - docs/api/thread_data.rst | 6 - docs/api/threads.rst | 8 - docs/conf.py | 194 ---------------------- docs/examples.rst | 55 ------ docs/faq.rst | 23 --- docs/index.rst | 23 --- docs/intro.rst | 152 ----------------- docs/make.bat | 35 ---- docs/spelling/fixes.txt | 3 - docs/spelling/names.txt | 3 - docs/spelling/technical.txt | 17 -- pyproject.toml | 64 ------- pytest.ini | 10 -- 31 files changed, 7 insertions(+), 936 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.md delete mode 100644 .github/ISSUE_TEMPLATE/feature_request.md delete mode 100644 .readthedocs.yml delete mode 100644 .travis.yml create mode 100644 .vscode/settings.json delete mode 100644 docs/Makefile delete mode 100644 docs/_static/find-group-id.png delete mode 100644 docs/_templates/layout.html delete mode 100644 docs/_templates/sidebar.html delete mode 100644 docs/api/attachments.rst delete mode 100644 docs/api/client.rst delete mode 100644 docs/api/events.rst delete mode 100644 docs/api/exceptions.rst delete mode 100644 docs/api/index.rst delete mode 100644 docs/api/messages.rst delete mode 100644 docs/api/misc.rst delete mode 100644 docs/api/session.rst delete mode 100644 docs/api/thread_data.rst delete mode 100644 docs/api/threads.rst delete mode 100644 docs/conf.py delete mode 100644 docs/examples.rst delete mode 100644 docs/faq.rst delete mode 100644 docs/index.rst delete mode 100644 docs/intro.rst delete mode 100644 docs/make.bat delete mode 100644 docs/spelling/fixes.txt delete mode 100644 docs/spelling/names.txt delete mode 100644 docs/spelling/technical.txt delete mode 100644 pyproject.toml delete mode 100644 pytest.ini diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 453d42c..0000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -name: Bug report -about: Create a report if you're having trouble with `fbchat` - ---- - -## Description of the problem -Example: Logging in fails when the character `%` is in the password. A specific password that fails is `a_password_with_%` - -## Code to reproduce -```py -# Example code -from fbchat import Client -client = Client("[REDACTED_USERNAME]", "a_password_with_%") -``` - -## Traceback -``` -Traceback (most recent call last): - File "", line 1, in - File "[site-packages]/fbchat/client.py", line 78, in __init__ - self.login(email, password, max_tries) - File "[site-packages]/fbchat/client.py", line 407, in login - raise FBchatException('Login failed. Check email/password. (Failed on URL: {})'.format(login_url)) -fbchat.FBchatException: Login failed. Check email/password. (Failed on URL: https://m.facebook.com/login.php?login_attempt=1) -``` - -## Environment information -- Python version -- `fbchat` version -- If relevant, output from `$ python -m pip list` - -If you have done any research, include that. -Make sure to redact all personal information. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index ac0c918..0000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -name: Feature request -about: Suggest a feature that you'd like to see implemented - ---- - -## Description -Example: There's no way to send messages to groups - -## Research (if applicable) -Example: I've found the URL `https://facebook.com/send_message.php`, to which you can send a POST requests with the following JSON: -```json -{ - "text": message_content, - "fbid": group_id, - "some_variable": ? -} -``` -But I don't know how what `some_variable` does, and it doesn't work without it. I've found some examples of `some_variable` to be: `MTIzNDU2Nzg5MA`, `MTIzNDU2Nzg5MQ` and `MTIzNDU2Nzg5Mg` diff --git a/.readthedocs.yml b/.readthedocs.yml deleted file mode 100644 index 9070b78..0000000 --- a/.readthedocs.yml +++ /dev/null @@ -1,20 +0,0 @@ -# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details -version: 2 - -formats: - - pdf - - htmlzip - -python: - version: 3.6 - install: - - path: . - extra_requirements: - - docs - -# Build documentation in the docs/ directory with Sphinx -sphinx: - configuration: docs/conf.py - # Disabled, until we can find a way to get sphinx-autodoc-typehints play nice with our - # module renaming! - fail_on_warning: false diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index f63d7ae..0000000 --- a/.travis.yml +++ /dev/null @@ -1,53 +0,0 @@ -sudo: false -language: python -python: 3.6 - -cache: pip - -before_install: pip install flit -# Use `--deps production` so that we don't install unnecessary dependencies -install: flit install --deps production --extras test -script: pytest - -jobs: - include: - - python: 3.5 - - python: 3.6 - - python: 3.7 - - python: pypy3.5 - - - name: Lint - before_install: skip - install: pip install black - script: black --check --verbose . - - - stage: deploy - name: GitHub Releases - if: tag IS present - install: skip - script: flit build - deploy: - provider: releases - api_key: $GITHUB_OAUTH_TOKEN - file_glob: true - file: dist/* - skip_cleanup: true - draft: false - on: - tags: true - - - stage: deploy - name: PyPI - if: tag IS present - install: skip - script: skip - deploy: - provider: script - script: flit publish - on: - tags: true - -notifications: - email: - on_success: never - on_failure: change diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..3bc9f31 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "esbonio.sphinx.confDir": "" +} diff --git a/README.rst b/README.rst index 9725752..d6ab750 100644 --- a/README.rst +++ b/README.rst @@ -1,48 +1,6 @@ -This project is unmaintained -============================ - -This project is officially marked as unmaintained, since my life is somewhere where I just do not have the time and energy to lead this project. - -If there is someone out there willing to take the lead, please get in contact, but even if there is, I can't get in contact with the original author `@carpedm20 `__ and get the ability to add others as maintainers, see `issue 390 `__. So a fork might be preferable. - -I have opened for further discussion `in issue 613 `__. - -Thanks for serving you all these years. - -\- Mads Marquart / `@madsmtm `__. - - -Original project description below ----------------------------------- - - ``fbchat`` - Facebook Messenger for Python ========================================== -.. image:: https://badgen.net/pypi/v/fbchat - :target: https://pypi.python.org/pypi/fbchat - :alt: Project version - -.. image:: https://badgen.net/badge/python/3.5,3.6,3.7,3.8,pypy?list=| - :target: https://pypi.python.org/pypi/fbchat - :alt: Supported python versions: 3.5, 3.6, 3.7, 3.8 and pypy - -.. image:: https://badgen.net/pypi/license/fbchat - :target: https://github.com/carpedm20/fbchat/tree/master/LICENSE - :alt: License: BSD 3-Clause - -.. image:: https://readthedocs.org/projects/fbchat/badge/?version=stable - :target: https://fbchat.readthedocs.io - :alt: Documentation - -.. image:: https://badgen.net/travis/carpedm20/fbchat - :target: https://travis-ci.org/carpedm20/fbchat - :alt: Travis CI - -.. image:: https://badgen.net/badge/code%20style/black/black - :target: https://github.com/ambv/black - :alt: Code style - A powerful and efficient library to interact with `Facebook's Messenger `__, using just your email and password. @@ -56,16 +14,13 @@ This is *not* an official API, Facebook has that `over here `__. - -Additionally, you can view the project's progress `here `__. +``v2`` is currently being developed at the ``master`` branch and it's highly unstable. Caveats @@ -76,14 +31,6 @@ Caveats However, there's a catch! **Using this library may not comply with Facebook's Terms Of Service!**, so be responsible Facebook citizens! We are not responsible if your account gets banned! Additionally, **the APIs the library is calling is undocumented!** In theory, this means that your code could break tomorrow, without the slightest warning! -If this happens to you, please report it, so that we can fix it as soon as possible! - -.. inclusion-marker-intro-end -.. This message doesn't make sense in the docs at Read The Docs, so we exclude it - -With that out of the way, you may go to `Read The Docs `__ to see the full documentation! - -.. inclusion-marker-installation-start Installation @@ -91,17 +38,7 @@ Installation .. code-block:: - $ pip install fbchat - -If you don't have `pip `_, `this guide `_ can guide you through the process. - -You can also install directly from source, provided you have ``pip>=19.0``: - -.. code-block:: - - $ pip install git+https://github.com/carpedm20/fbchat.git - -.. inclusion-marker-installation-end + $ pip install git+https://git.karaolidis.com/Nikas36/fbchat.git Example Usage @@ -112,18 +49,11 @@ Example Usage import getpass import fbchat session = fbchat.Session.login("", getpass.getpass()) - user = fbchat.User(session=session, id=session.user_id) + user = fbchat.User(session=session, id=session._user_id) user.send_text("Test message!") -More examples are available `here `__. - - -Maintainer ----------- - -No one, see notice at the top. Acknowledgements ---------------- -This project was originally inspired by `facebook-chat-api `__. +This project is a fork of `fbchat `__ and was originally inspired by `facebook-chat-api `__. diff --git a/docs/Makefile b/docs/Makefile deleted file mode 100644 index 5128596..0000000 --- a/docs/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -SOURCEDIR = . -BUILDDIR = _build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/_static/find-group-id.png b/docs/_static/find-group-id.png deleted file mode 100644 index b60f14314c2747d0ca89520e98d4203fd233b618..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60318 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 - - -{% endblock %} diff --git a/docs/_templates/sidebar.html b/docs/_templates/sidebar.html deleted file mode 100644 index 143754a..0000000 --- a/docs/_templates/sidebar.html +++ /dev/null @@ -1,13 +0,0 @@ -

- {{ _(project) }} -

- -

- Star -

- -

- {{ _(shorttitle) }} -

- -{{ toctree() }} \ No newline at end of file diff --git a/docs/api/attachments.rst b/docs/api/attachments.rst deleted file mode 100644 index 01841a4..0000000 --- a/docs/api/attachments.rst +++ /dev/null @@ -1,13 +0,0 @@ -Attachments -=========== - -.. autoclass:: Attachment() -.. autoclass:: ShareAttachment() -.. autoclass:: Sticker() -.. autoclass:: LocationAttachment() -.. autoclass:: LiveLocationAttachment() -.. autoclass:: FileAttachment() -.. autoclass:: AudioAttachment() -.. autoclass:: ImageAttachment() -.. autoclass:: VideoAttachment() -.. autoclass:: ImageAttachment() diff --git a/docs/api/client.rst b/docs/api/client.rst deleted file mode 100644 index b392eb0..0000000 --- a/docs/api/client.rst +++ /dev/null @@ -1,4 +0,0 @@ -Client -====== - -.. autoclass:: Client diff --git a/docs/api/events.rst b/docs/api/events.rst deleted file mode 100644 index 233e9bd..0000000 --- a/docs/api/events.rst +++ /dev/null @@ -1,4 +0,0 @@ -Events -====== - -.. autoclass:: Listener diff --git a/docs/api/exceptions.rst b/docs/api/exceptions.rst deleted file mode 100644 index 09958ca..0000000 --- a/docs/api/exceptions.rst +++ /dev/null @@ -1,11 +0,0 @@ -Exceptions -========== - -.. autoexception:: FacebookError() -.. autoexception:: HTTPError() -.. autoexception:: ParseError() -.. autoexception:: NotLoggedIn() -.. autoexception:: ExternalError() -.. autoexception:: GraphQLError() -.. autoexception:: InvalidParameters() -.. autoexception:: PleaseRefresh() diff --git a/docs/api/index.rst b/docs/api/index.rst deleted file mode 100644 index 0cc6ccf..0000000 --- a/docs/api/index.rst +++ /dev/null @@ -1,21 +0,0 @@ -.. module:: fbchat - -.. Note: we're using () to hide the __init__ method where relevant - -Full API -======== - -If you are looking for information on a specific function, class, or method, this part of the documentation is for you. - -.. toctree:: - :maxdepth: 1 - - session - client - threads - thread_data - messages - exceptions - attachments - events - misc diff --git a/docs/api/messages.rst b/docs/api/messages.rst deleted file mode 100644 index 1f1cf53..0000000 --- a/docs/api/messages.rst +++ /dev/null @@ -1,8 +0,0 @@ -Messages -======== - -.. autoclass:: Message -.. autoclass:: Mention -.. autoclass:: EmojiSize(Enum) - :undoc-members: -.. autoclass:: MessageData() diff --git a/docs/api/misc.rst b/docs/api/misc.rst deleted file mode 100644 index 89430b3..0000000 --- a/docs/api/misc.rst +++ /dev/null @@ -1,20 +0,0 @@ -Miscellaneous -============= - -.. autoclass:: ThreadLocation(Enum) - :undoc-members: -.. autoclass:: ActiveStatus() - -.. autoclass:: QuickReply -.. autoclass:: QuickReplyText -.. autoclass:: QuickReplyLocation -.. autoclass:: QuickReplyPhoneNumber -.. autoclass:: QuickReplyEmail - -.. autoclass:: Poll -.. autoclass:: PollOption - -.. autoclass:: Plan -.. autoclass:: PlanData() -.. autoclass:: GuestStatus(Enum) - :undoc-members: diff --git a/docs/api/session.rst b/docs/api/session.rst deleted file mode 100644 index 09ab89a..0000000 --- a/docs/api/session.rst +++ /dev/null @@ -1,4 +0,0 @@ -Session -======= - -.. autoclass:: Session() diff --git a/docs/api/thread_data.rst b/docs/api/thread_data.rst deleted file mode 100644 index 7ed8306..0000000 --- a/docs/api/thread_data.rst +++ /dev/null @@ -1,6 +0,0 @@ -Thread Data -=========== - -.. autoclass:: PageData() -.. autoclass:: UserData() -.. autoclass:: GroupData() diff --git a/docs/api/threads.rst b/docs/api/threads.rst deleted file mode 100644 index 79de8f2..0000000 --- a/docs/api/threads.rst +++ /dev/null @@ -1,8 +0,0 @@ -Threads -======= - -.. autoclass:: ThreadABC() -.. autoclass:: Thread -.. autoclass:: Page -.. autoclass:: User -.. autoclass:: Group diff --git a/docs/conf.py b/docs/conf.py deleted file mode 100644 index f942d18..0000000 --- a/docs/conf.py +++ /dev/null @@ -1,194 +0,0 @@ -# Configuration file for the Sphinx documentation builder. -# -# This file does only contain a selection of the most common options. For a -# full list see the documentation: -# http://www.sphinx-doc.org/en/master/config - -# -- Path setup -------------------------------------------------------------- - -import os -import sys - -sys.path.insert(0, os.path.abspath("..")) - -os.environ["_FBCHAT_DISABLE_FIX_MODULE_METADATA"] = "1" - -import fbchat - -del os.environ["_FBCHAT_DISABLE_FIX_MODULE_METADATA"] - -# -- Project information ----------------------------------------------------- - -project = fbchat.__name__ -copyright = "Copyright 2015 - 2018 by Taehoon Kim and 2018 - 2020 by Mads Marquart" -author = "Taehoon Kim; Moreels Pieter-Jan; Mads Marquart" -description = fbchat.__doc__.split("\n")[0] - -# The short X.Y version -version = fbchat.__version__ -# The full version, including alpha/beta/rc tags -release = fbchat.__version__ - - -# -- General configuration --------------------------------------------------- - -# If your documentation needs a minimal Sphinx version, state it here. -# -needs_sphinx = "2.0" - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - "sphinx.ext.autodoc", - "sphinx.ext.intersphinx", - "sphinx.ext.viewcode", - "sphinx.ext.napoleon", - "sphinxcontrib.spelling", - "sphinx_autodoc_typehints", -] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ["_templates"] - -# The master toctree document. -master_doc = "index" - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This pattern also affects html_static_path and html_extra_path. -exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] - -rst_prolog = ".. currentmodule:: " + project - -# The reST default role (used for this markup: `text`) to use for all -# documents. -# -default_role = "any" - -# Make the reference parsing more strict -# -nitpicky = True - -# Prefer strict Python highlighting -# -highlight_language = "python3" - -# If true, '()' will be appended to :func: etc. cross-reference text. -# -add_function_parentheses = False - - -# -- Options for HTML output ------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# -html_theme = "alabaster" - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -# -html_theme_options = { - "show_powered_by": False, - "github_user": "carpedm20", - "github_repo": project, - "github_banner": True, - "show_related": False, -} - -# Custom sidebar templates, must be a dictionary that maps document names -# to template names. -# -# The default sidebars (for documents that don't match any pattern) are -# defined by theme itself. Builtin themes are using these templates by -# default: ``['localtoc.html', 'relations.html', 'sourcelink.html', -# 'searchbox.html']``. -# -html_sidebars = {"**": ["sidebar.html", "searchbox.html"]} - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -# -html_show_sphinx = False - -# If true, links to the reST sources are added to the pages. -# -html_show_sourcelink = False - -# A shorter title for the navigation bar. Default is the same as html_title. -# -html_short_title = description - - -# -- Options for HTMLHelp output --------------------------------------------- - -# Output file base name for HTML help builder. -htmlhelp_basename = project + "doc" - - -# -- Options for LaTeX output ------------------------------------------------ - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [(master_doc, project + ".tex", project, author, "manual")] - - -# -- Options for manual page output ------------------------------------------ - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [(master_doc, project, project, [x.strip() for x in author.split(";")], 1)] - - -# -- Options for Texinfo output ---------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - (master_doc, project, project, author, project, description, "Miscellaneous",) -] - - -# -- Options for Epub output ------------------------------------------------- - -# A list of files that should not be packed into the epub file. -epub_exclude_files = ["search.html"] - - -# -- Extension configuration ------------------------------------------------- - -# -- Options for autodoc extension --------------------------------------- - -autoclass_content = "class" -autodoc_member_order = "bysource" -autodoc_default_options = {"members": True} - -# -- Options for intersphinx extension --------------------------------------- - -# Example configuration for intersphinx: refer to the Python standard library. -intersphinx_mapping = {"https://docs.python.org/": None} - -# -- Options for napoleon extension ---------------------------------------------- - -# Use Google style docstrings -napoleon_google_docstring = True -napoleon_numpy_docstring = False - -# napoleon_use_admonition_for_examples = False -# napoleon_use_admonition_for_notes = False -# napoleon_use_admonition_for_references = False - -# -- Options for spelling extension ---------------------------------------------- - -spelling_word_list_filename = [ - "spelling/names.txt", - "spelling/technical.txt", - "spelling/fixes.txt", -] -spelling_ignore_wiki_words = False -# spelling_ignore_acronyms = False -spelling_ignore_python_builtins = False -spelling_ignore_importable_modules = False diff --git a/docs/examples.rst b/docs/examples.rst deleted file mode 100644 index aac1fce..0000000 --- a/docs/examples.rst +++ /dev/null @@ -1,55 +0,0 @@ -.. _examples: - -Examples -======== - -These are a few examples on how to use ``fbchat``. Remember to swap out ```` and ```` for your email and password - - -Basic example -------------- - -This will show basic usage of ``fbchat`` - -.. literalinclude:: ../examples/basic_usage.py - - -Interacting with Threads ------------------------- - -This will interact with the thread in every way ``fbchat`` supports - -.. literalinclude:: ../examples/interract.py - - -Fetching Information --------------------- - -This will show the different ways of fetching information about users and threads - -.. literalinclude:: ../examples/fetch.py - - -``Echobot`` ------------ - -This will reply to any message with the same message - -.. literalinclude:: ../examples/echobot.py - - -Remove Bot ----------- - -This will remove a user from a group if they write the message ``Remove me!`` - -.. literalinclude:: ../examples/removebot.py - - -"Prevent changes"-Bot ---------------------- - -This will prevent chat color, emoji, nicknames and chat name from being changed. -It will also prevent people from being added and removed - -.. literalinclude:: ../examples/keepbot.py diff --git a/docs/faq.rst b/docs/faq.rst deleted file mode 100644 index 28183b8..0000000 --- a/docs/faq.rst +++ /dev/null @@ -1,23 +0,0 @@ -Frequently Asked Questions -========================== - -The new version broke my application ------------------------------------- - -``fbchat`` follows `Scemantic Versioning `__ quite rigorously! - -That means that breaking changes can *only* occur in major versions (e.g. ``v1.9.6`` -> ``v2.0.0``). - -If you find that something breaks, and you didn't update to a new major version, then it is a bug, and we would be grateful if you reported it! - -In case you're stuck with an old codebase, you can downgrade to a previous version of ``fbchat``, e.g. version ``1.9.6``: - -.. code-block:: sh - - $ pip install fbchat==1.9.6 - - -Will you be supporting creating posts/events/pages and so on? -------------------------------------------------------------- - -We won't be focusing on anything else than chat-related things. This library is called ``fbCHAT``, after all! diff --git a/docs/index.rst b/docs/index.rst deleted file mode 100644 index 99af34b..0000000 --- a/docs/index.rst +++ /dev/null @@ -1,23 +0,0 @@ -.. highlight:: sh -.. See README.rst for explanation of these markers - -.. include:: ../README.rst - :end-before: inclusion-marker-intro-end - -With that said, let's get started! - -.. include:: ../README.rst - :start-after: inclusion-marker-installation-start - :end-before: inclusion-marker-installation-end - - -Documentation Overview ----------------------- - -.. toctree:: - :maxdepth: 2 - - intro - examples - faq - api/index diff --git a/docs/intro.rst b/docs/intro.rst deleted file mode 100644 index 108c8bb..0000000 --- a/docs/intro.rst +++ /dev/null @@ -1,152 +0,0 @@ -Introduction -============ - -Welcome, this page will guide you through the basic concepts of using ``fbchat``. - -The hardest, and most error prone part is logging in, and managing your login session, so that is what we will look at first. - - -Logging In ----------- - -Everything in ``fbchat`` starts with getting an instance of `Session`. Currently there are two ways of doing that, `Session.login` and `Session.from_cookies`. - -The follow example will prompt you for you password, and use it to login:: - - import getpass - import fbchat - session = fbchat.Session.login("", getpass.getpass()) - # If your account requires a two factor authentication code: - session = fbchat.Session.login( - "", - getpass.getpass(), - lambda: getpass.getpass("2FA code"), - ) - -However, **this is not something you should do often!** Logging in/out all the time *will* get your Facebook account locked! - -Instead, you should start by using `Session.login`, and then store the cookies with `Session.get_cookies`, so that they can be used instead the next time your application starts. - -Usability-wise, this is also better, since you won't have to re-type your password every time you want to login. - -The following, quite lengthy, yet very import example, illustrates a way to do this: - -.. literalinclude:: ../examples/session_handling.py - -Assuming you have successfully completed the above, congratulations! Using ``fbchat`` should be mostly trouble free from now on! - - -Understanding Thread Ids ------------------------- - -At the core of any thread is its unique identifier, its ID. - -A thread basically just means "something I can chat with", but more precisely, it can refer to a few things: -- A Messenger group thread (`Group`) -- The conversation between you and a single Facebook user (`User`) -- The conversation between you and a Facebook Page (`Page`) - -You can get your own user ID from `Session.user` with ``session.user.id``. - -Getting the ID of a specific group thread is fairly trivial, you only need to login to ``_, click on the group you want to find the ID of, and then read the id from the address bar. -The URL will look something like this: ``https://www.messenger.com/t/1234567890``, where ``1234567890`` would be the ID of the group. - -The same method can be applied to some user accounts, though if they have set a custom URL, then you will have to use a different method. - -An image to illustrate the process is shown below: - -.. image:: /_static/find-group-id.png - :alt: An image illustrating how to find the ID of a group - -Once you have an ID, you can use it to create a `Group` or a `User` instance, which will allow you to do all sorts of things. To do this, you need a valid, logged in session:: - - group = fbchat.Group(session=session, id="") - # Or for user threads - user = fbchat.User(session=session, id="") - -Just like threads, every message, poll, plan, attachment, action etc. you send or do on Facebook has a unique ID. - -Below is an example of using such a message ID to get a `Message` instance:: - - # Provide the thread the message was created in, and it's ID - message = fbchat.Message(thread=user, id="") - - -Fetching Information --------------------- - -Managing these ids yourself quickly becomes very cumbersome! Luckily, there are other, easier ways of getting `Group`/`User` instances. - -You would start by creating a `Client` instance, which is basically just a helper on top of `Session`, that will allow you to do various things:: - - client = fbchat.Client(session=session) - -Now, you could search for threads using `Client.search_for_threads`, or fetch a list of them using `Client.fetch_threads`:: - - # Fetch the 5 most likely search results - # Uses Facebook's search functions, you don't have to specify the whole name, first names will usually be enough - threads = list(client.search_for_threads("", limit=5)) - # Fetch the 5 most recent threads in your account - threads = list(client.fetch_threads(limit=5)) - -Note the `list` statements; this is because the methods actually return `generators `__. If you don't know what that means, don't worry, it is just something you can use to make your code faster later. - -The examples above will actually fetch `UserData`/`GroupData`, which are subclasses of `User`/`Group`. These model have extra properties, so you could for example print the names and ids of the fetched threads like this:: - - for thread in threads: - print(f"{thread.id}: {thread.name}") - -Once you have a thread, you can use that to fetch the messages therein:: - - for message in thread.fetch_messages(limit=20): - print(message.text) - - -Interacting with Threads ------------------------- - -Once you have a `User`/`Group` instance, you can do things on them as described in `ThreadABC`, since they are subclasses of that. - -Some functionality, like adding users to a `Group`, or blocking a `User`, logically only works the relevant threads, so see the full API documentation for that. - -With that out of the way, let's see some examples! - -The simplest way of interacting with a thread is by sending a message:: - - # Send a message to the user - message = user.send_text("test message") - -There are many types of messages you can send, see the full API documentation for more. - -Notice how we held on to the sent message? The return type i a `Message` instance, so you can interact with it afterwards:: - - # React to the message with the 😍 emoji - message.react("😍") - -Besides sending messages, you can also interact with threads in other ways. An example is to change the thread color:: - - # Will change the thread color to the default blue - thread.set_color("#0084ff") - - -Listening & Events ------------------- - -Now, we are finally at the point we have all been waiting for: Creating an automatic Facebook bot! - -To get started, you create the functions you want to call on certain events:: - - def my_function(event: fbchat.MessageEvent): - print(f"Message from {event.author.id}: {event.message.text}") - -Then you create a `fbchat.Listener` object:: - - listener = fbchat.Listener(session=session, chat_on=False, foreground=False) - -Which you can then use to receive events, and send them to your functions:: - - for event in listener.listen(): - if isinstance(event, fbchat.MessageEvent): - my_function(event) - -View the :ref:`examples` to see some more examples illustrating the event system. diff --git a/docs/make.bat b/docs/make.bat deleted file mode 100644 index 27f573b..0000000 --- a/docs/make.bat +++ /dev/null @@ -1,35 +0,0 @@ -@ECHO OFF - -pushd %~dp0 - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set SOURCEDIR=. -set BUILDDIR=_build - -if "%1" == "" goto help - -%SPHINXBUILD% >NUL 2>NUL -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.http://sphinx-doc.org/ - exit /b 1 -) - -%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% -goto end - -:help -%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% - -:end -popd diff --git a/docs/spelling/fixes.txt b/docs/spelling/fixes.txt deleted file mode 100644 index 2c0351f..0000000 --- a/docs/spelling/fixes.txt +++ /dev/null @@ -1,3 +0,0 @@ -premade -todo -emoji diff --git a/docs/spelling/names.txt b/docs/spelling/names.txt deleted file mode 100644 index 6ec43dc..0000000 --- a/docs/spelling/names.txt +++ /dev/null @@ -1,3 +0,0 @@ -Facebook -GraphQL -GitHub diff --git a/docs/spelling/technical.txt b/docs/spelling/technical.txt deleted file mode 100644 index 9453d88..0000000 --- a/docs/spelling/technical.txt +++ /dev/null @@ -1,17 +0,0 @@ -iterables -iterable -mimetype -timestamp -metadata -spam -spammy -admin -admins -unsend -unsends -unmute -spritemap -online -inbox -subclassing -codebase diff --git a/pyproject.toml b/pyproject.toml deleted file mode 100644 index ed3d55b..0000000 --- a/pyproject.toml +++ /dev/null @@ -1,64 +0,0 @@ -[tool.black] -line-length = 88 -target-version = ['py36', 'py37', 'py38'] - -[build-system] -requires = ["flit"] -build-backend = "flit.buildapi" - -[tool.flit.metadata] -module = "fbchat" -author = "Taehoon Kim" -author-email = "carpedm20@gmail.com" -maintainer = "Mads Marquart" -maintainer-email = "madsmtm@gmail.com" -home-page = "https://github.com/carpedm20/fbchat/" -requires = [ - "attrs>=19.1", - "requests~=2.19", - "beautifulsoup4~=4.0", - "paho-mqtt~=1.5", -] -description-file = "README.rst" -classifiers = [ - "Development Status :: 3 - Alpha", - "Intended Audience :: Developers", - "Intended Audience :: Information Technology", - "License :: OSI Approved :: BSD License", - "Operating System :: OS Independent", - "Natural Language :: English", - "Programming Language :: Python", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.5", - "Programming Language :: Python :: 3.6", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: Implementation :: CPython", - "Programming Language :: Python :: Implementation :: PyPy", - "Topic :: Communications :: Chat", - "Topic :: Internet :: WWW/HTTP", - "Topic :: Internet :: WWW/HTTP :: Dynamic Content", - "Topic :: Software Development :: Libraries", - "Topic :: Software Development :: Libraries :: Python Modules", -] -requires-python = ">=3.5, <4.0" -keywords = "Facebook FB Messenger Library Chat Api Bot" -license = "BSD 3-Clause" - -[tool.flit.metadata.urls] -Documentation = "https://fbchat.readthedocs.io/" -Repository = "https://github.com/carpedm20/fbchat/" - -[tool.flit.metadata.requires-extra] -test = [ - "pytest>=4.3,<6.0", -] -docs = [ - "sphinx~=2.0", - "sphinxcontrib-spelling~=4.0", - "sphinx-autodoc-typehints~=1.10", -] -lint = [ - "black", -] diff --git a/pytest.ini b/pytest.ini deleted file mode 100644 index 176f965..0000000 --- a/pytest.ini +++ /dev/null @@ -1,10 +0,0 @@ -[pytest] -xfail_strict = true -markers = - online: Online tests, that require a user account set up. Meant to be used \ - manually, to check whether Facebook has broken something. -addopts = - --strict - -m "not online" -testpaths = tests -filterwarnings = error