Merge branch 'master' into master
This commit is contained in:
34
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
34
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
---
|
||||
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 "<test.py>", line 1, in <module>
|
||||
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 FBchatUserError('Login failed. Check email/password. (Failed on url: {})'.format(login_url))
|
||||
fbchat.models.FBchatUserError: 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.
|
19
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
19
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
---
|
||||
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`
|
@@ -14,8 +14,10 @@ install:
|
||||
|
||||
cache:
|
||||
pip: true
|
||||
directories:
|
||||
- .pytest_cache
|
||||
# Pytest caching is disabled, since TravisCI instances have different public IPs. Facebook doesn't like that,
|
||||
# and redirects you to the url `/checkpoint/block`, where you have to change the account's password
|
||||
# directories:
|
||||
# - .pytest_cache
|
||||
|
||||
jobs:
|
||||
include:
|
||||
|
75
CODE_OF_CONDUCT
Normal file
75
CODE_OF_CONDUCT
Normal file
@@ -0,0 +1,75 @@
|
||||
Contributor Covenant Code of Conduct
|
||||
|
||||
Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
contributors and maintainers pledge to making participation in our project and
|
||||
our community a harassment-free experience for everyone, regardless of age, body
|
||||
size, disability, ethnicity, gender identity and expression, level of experience,
|
||||
education, socio-economic status, nationality, personal appearance, race,
|
||||
religion, or sexual identity and orientation.
|
||||
|
||||
Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment
|
||||
include:
|
||||
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||
advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others’ private information, such as a physical or electronic
|
||||
address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
|
||||
Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable
|
||||
behavior and are expected to take appropriate and fair corrective action in
|
||||
response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or
|
||||
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||
permanently any contributor for other behaviors that they deem inappropriate,
|
||||
threatening, offensive, or harmful.
|
||||
|
||||
Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces
|
||||
when an individual is representing the project or its community. Examples of
|
||||
representing a project or community include using an official project e-mail
|
||||
address, posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event. Representation of a project may be
|
||||
further defined and clarified by project maintainers.
|
||||
|
||||
Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported by contacting the project team at carpedm20@gmail.com. All
|
||||
complaints will be reviewed and investigated and will result in a response that
|
||||
is deemed necessary and appropriate to the circumstances. The project team is
|
||||
obligated to maintain confidentiality with regard to the reporter of an incident.
|
||||
Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||
faith may face temporary or permanent repercussions as determined by other
|
||||
members of the project’s leadership.
|
||||
|
||||
Attribution
|
||||
|
||||
This Code of Conduct is adapted from the Contributor Covenant, version 1.4,
|
||||
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
|
22
CONTRIBUTING.rst
Normal file
22
CONTRIBUTING.rst
Normal file
@@ -0,0 +1,22 @@
|
||||
Contributing to fbchat
|
||||
======================
|
||||
|
||||
Thanks for reading this, all contributions are very much welcome!
|
||||
|
||||
Please be aware that ``fbchat`` uses `Scemantic Versioning <https://semver.org/>`__
|
||||
That means that if you're submitting a breaking change, it will probably take a while before it gets considered.
|
||||
|
||||
In that case, you can point your PR to the ``2.0.0-dev`` branch, where the API is being properly developed.
|
||||
Otherwise, just point it to ``master``.
|
||||
|
||||
Testing Environment
|
||||
-------------------
|
||||
|
||||
The tests use `pytest <https://docs.pytest.org/>`__, and to work they need two Facebook accounts, and a group thread between these.
|
||||
To set these up, you should export the following environment variables:
|
||||
|
||||
``client1_email``, ``client1_password``, ``client2_email``, ``client2_password`` and ``group_id``
|
||||
|
||||
If you're not able to do this, consider simply running ``pytest -m offline``.
|
||||
|
||||
And if you're adding new functionality, if possible, make sure to create a new test for it.
|
@@ -1,4 +1,4 @@
|
||||
New BSD License
|
||||
BSD 3-Clause License
|
||||
|
||||
Copyright (c) 2015, Taehoon Kim
|
||||
All rights reserved.
|
||||
@@ -13,8 +13,9 @@ modification, are permitted provided that the following conditions are met:
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
* The names of its contributors may not be used to endorse or promote products
|
||||
derived from this software without specific prior written permission.
|
||||
* Neither the name of the copyright holder nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
@@ -1,2 +1,3 @@
|
||||
include LICENSE.txt
|
||||
include LICENSE
|
||||
include CONTRIBUTING.rst
|
||||
include README.rst
|
||||
|
@@ -2,8 +2,8 @@ fbchat: Facebook Chat (Messenger) for Python
|
||||
============================================
|
||||
|
||||
.. image:: https://img.shields.io/badge/license-BSD-blue.svg
|
||||
:target: LICENSE.txt
|
||||
:alt: License: BSD
|
||||
:target: https://github.com/carpedm20/fbchat/tree/master/LICENSE
|
||||
:alt: License: BSD 3-Clause
|
||||
|
||||
.. image:: https://img.shields.io/badge/python-2.7%2C%203.4%2C%203.5%2C%203.6%20pypy-blue.svg
|
||||
:target: https://pypi.python.org/pypi/fbchat
|
||||
|
@@ -7,7 +7,7 @@
|
||||
Facebook Chat (Messenger) for Python
|
||||
|
||||
:copyright: (c) 2015 - 2018 by Taehoon Kim
|
||||
:license: BSD, see LICENSE for more details.
|
||||
:license: BSD 3-Clause, see LICENSE for more details.
|
||||
"""
|
||||
|
||||
from __future__ import unicode_literals
|
||||
@@ -19,7 +19,7 @@ __version__ = '1.3.9'
|
||||
__description__ = 'Facebook Chat (Messenger) for Python'
|
||||
|
||||
__copyright__ = 'Copyright 2015 - 2018 by Taehoon Kim'
|
||||
__license__ = 'BSD'
|
||||
__license__ = 'BSD 3-Clause'
|
||||
|
||||
__author__ = 'Taehoon Kim; Moreels Pieter-Jan; Mads Marquart'
|
||||
__email__ = 'carpedm20@gmail.com'
|
||||
|
@@ -265,8 +265,7 @@ class Client(object):
|
||||
|
||||
# Usually, 'Checkpoint' will refer to 2FA
|
||||
if ('checkpoint' in r.url
|
||||
and ('enter security code to continue' in r.text.lower()
|
||||
or 'enter login code to continue' in r.text.lower())):
|
||||
and ('id="approvals_code"' in r.text.lower())):
|
||||
r = self._2FA(r)
|
||||
|
||||
# Sometimes Facebook tries to show the user a "Save Device" dialog
|
||||
@@ -1033,7 +1032,25 @@ class Client(object):
|
||||
is_gif = (mimetype == 'image/gif')
|
||||
image_id = self._uploadImage(image_path, open(image_path, 'rb'), mimetype)
|
||||
return self.sendImage(image_id=image_id, message=message, thread_id=thread_id, thread_type=thread_type, is_gif=is_gif)
|
||||
|
||||
|
||||
def createGroup(self, message, person_ids=None):
|
||||
"""Creates a group with the given ids
|
||||
:param person_ids: A list of people to create the group with.
|
||||
:return: Returns error if couldn't create group, returns True when the group created.
|
||||
"""
|
||||
payload = {
|
||||
"send" : "send",
|
||||
"body": message,
|
||||
"ids" : person_ids
|
||||
}
|
||||
r = self._post(self.req_url.CREATE_GROUP, payload)
|
||||
if "send_success" in r.url:
|
||||
log.debug("The group was created successfully!")
|
||||
return True
|
||||
else:
|
||||
log.warning("Error while creating group")
|
||||
return False
|
||||
|
||||
def addUsersToGroup(self, user_ids, thread_id=None):
|
||||
"""
|
||||
Adds users to a group.
|
||||
|
@@ -132,7 +132,8 @@ class ReqUrl(object):
|
||||
UNBLOCK_USER = "https://www.facebook.com/messaging/unblock_messages/?dpr=1"
|
||||
SAVE_ADMINS = "https://www.facebook.com/messaging/save_admins/?dpr=1"
|
||||
APPROVAL_MODE = "https://www.facebook.com/messaging/set_approval_mode/?dpr=1"
|
||||
|
||||
CREATE_GROUP = "https://m.facebook.com/messages/send/?icm=1"
|
||||
|
||||
pull_channel = 0
|
||||
|
||||
def change_pull_channel(self, channel=None):
|
||||
|
Reference in New Issue
Block a user