Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
78 additions
and
51 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,2 @@ | ||
__version__ = '1.1.1' | ||
default_app_config = "microbot.apps.MicrobotAppConfig" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
from django.apps import AppConfig | ||
from django.apps import apps | ||
from django.db.models import signals | ||
|
||
|
||
def connect_bot_signals(): | ||
from . import signals as handlers | ||
signals.pre_save.connect(handlers.validate_bot, | ||
sender=apps.get_model("microbot", "Bot"), | ||
dispatch_uid='bot_validate') | ||
signals.post_save.connect(handlers.set_bot_webhook, | ||
sender=apps.get_model("microbot", "Bot"), | ||
dispatch_uid='bot_set_webhook') | ||
signals.post_save.connect(handlers.set_bot_api_data, | ||
sender=apps.get_model("microbot", "Bot"), | ||
dispatch_uid='bot_set_api_data') | ||
|
||
class MicrobotAppConfig(AppConfig): | ||
name = "microbot" | ||
verbose_name = "Microbot" | ||
|
||
def ready(self): | ||
connect_bot_signals() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
from telegram import Bot as BotAPI | ||
from django.core.urlresolvers import reverse | ||
from django.conf import settings | ||
import logging | ||
from microbot.validators import validate_token | ||
from django.apps import apps | ||
|
||
|
||
logger = logging.getLogger(__name__) | ||
|
||
def set_bot_webhook(sender, instance, **kwargs): | ||
def get_site_domain(): | ||
from django.contrib.sites.models import Site | ||
current_site = Site.objects.get_current() | ||
return current_site.domain | ||
|
||
# set bot api if not yet | ||
if not instance._bot: | ||
instance._bot = BotAPI(instance.token) | ||
try: | ||
# set webhook | ||
url = None | ||
if instance.enabled: | ||
webhook = reverse('microbot:telegrambot', kwargs={'hook_id': instance.hook_id}) | ||
url = 'https://' + getattr(settings, 'MICROBOT_WEBHOOK_DOMAIN', get_site_domain()) + webhook | ||
instance._bot.setWebhook(webhook_url=url) | ||
logger.info("Success: Webhook url %s for bot %s set" % (url, str(instance))) | ||
|
||
except: | ||
instance.delete() | ||
logger.error("Failure: Webhook url %s for bot %s not set" % (url, str(instance))) | ||
raise | ||
|
||
def set_bot_api_data(sender, instance, **kwargs): | ||
# set bot api if not yet | ||
if not instance._bot: | ||
instance._bot = BotAPI(instance.token) | ||
|
||
try: | ||
# complete Bot instance with api data | ||
if not instance.user_api: | ||
bot_api = instance._bot.getMe() | ||
User = apps.get_model('microbot', 'User') | ||
user_api, _ = User.objects.get_or_create(**bot_api.to_dict()) | ||
instance.user_api = user_api | ||
instance.save() | ||
logger.info("Success: Bot api info for bot %s set" % str(instance)) | ||
except: | ||
instance.delete() | ||
logger.error("Failure: Bot api info for bot %s no set" % str(instance)) | ||
raise | ||
|
||
def validate_bot(sender, instance, **kwargs): | ||
validate_token(instance.token) |