from permabots.serializers import BotSerializer, BotUpdateSerializer, TelegramBotSerializer, TelegramBotUpdateSerializer, \
KikBotSerializer, KikBotUpdateSerializer, MessengerBotSerializer, MessengerBotUpdateSerializer
from permabots.views.api.base import PermabotsAPIView
from permabots.models import Bot, TelegramBot, KikBot, MessengerBot
from rest_framework.response import Response
from rest_framework import status
from permabots.views.api.base import ListBotAPIView, DetailBotAPIView
import logging
logger = logging.getLogger(__name__)
[docs]class BotList(PermabotsAPIView):
[docs] def get(self, request, format=None):
"""
Get list of bots
---
serializer: BotSerializer
responseMessages:
- code: 401
message: Not authenticated
"""
bots = Bot.objects.filter(owner=request.user)
serializer = BotSerializer(bots, many=True)
return Response(serializer.data)
[docs] def post(self, request, format=None):
"""
Add a new bot
---
serializer: BotSerializer
responseMessages:
- code: 401
message: Not authenticated
- code: 400
message: Not valid request
"""
serializer = BotSerializer(data=request.data)
if serializer.is_valid():
bot = Bot.objects.create(owner=request.user,
name=serializer.data['name'])
return Response(BotSerializer(bot).data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
[docs]class BotDetail(PermabotsAPIView):
[docs] def get(self, request, id, format=None):
"""
Get bot by id
---
serializer: BotSerializer
responseMessages:
- code: 401
message: Not authenticated
"""
bot = self.get_bot(id, request.user)
serializer = BotSerializer(bot)
return Response(serializer.data)
[docs] def put(self, request, id, format=None):
"""
Update an existing bot
---
serializer: BotUpdateSerializer
responseMessages:
- code: 401
message: Not authenticated
- code: 400
message: Not valid request
"""
bot = self.get_bot(id, request.user)
serializer = BotUpdateSerializer(bot, data=request.data)
if serializer.is_valid():
try:
bot = serializer.save()
except:
return Response(status=status.HTTP_400_BAD_REQUEST)
else:
return Response(BotSerializer(bot).data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
[docs] def delete(self, request, id, format=None):
"""
Delete an existing bot
---
responseMessages:
- code: 401
message: Not authenticated
"""
bot = self.get_bot(id, request.user)
bot.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
[docs]class TelegramBotList(ListBotAPIView):
serializer = TelegramBotSerializer
many = False
def _query(self, bot):
return bot.telegram_bot
def _creator(self, bot, serializer):
try:
telegram_bot = TelegramBot.objects.create(token=serializer.data['token'],
enabled=serializer.data['enabled'])
except:
logger.error("Error trying to create Bot %s" % serializer.data['token'])
raise
else:
bot.telegram_bot = telegram_bot
bot.save()
return telegram_bot
[docs] def get(self, request, bot_id, format=None):
"""
Get list of Telegram bots
---
serializer: TelegramBotSerializer
responseMessages:
- code: 401
message: Not authenticated
"""
return super(TelegramBotList, self).get(request, bot_id, format)
[docs] def post(self, request, bot_id, format=None):
"""
Add TelegramBot
---
serializer: TelegramBotSerializer
responseMessages:
- code: 401
message: Not authenticated
- code: 400
message: Not valid request
"""
try:
return super(TelegramBotList, self).post(request, bot_id, format)
except:
return Response({"error": 'Telegram Error. Check Telegram token or try later.'}, status=status.HTTP_400_BAD_REQUEST)
[docs]class TelegramBotDetail(DetailBotAPIView):
model = TelegramBot
serializer = TelegramBotSerializer
serializer_update = TelegramBotUpdateSerializer
[docs] def get(self, request, bot_id, id, format=None):
"""
Get TelegramBot by id
---
serializer: TelegramBotSerializer
responseMessages:
- code: 401
message: Not authenticated
"""
return super(TelegramBotDetail, self).get(request, bot_id, id, format)
[docs] def put(self, request, bot_id, id, format=None):
"""
Update existing TelegramBot
---
serializer: TelegramBotUpdateSerializer
responseMessages:
- code: 401
message: Not authenticated
- code: 400
message: Not valid request
"""
return super(TelegramBotDetail, self).put(request, bot_id, id, format)
[docs] def delete(self, request, bot_id, id, format=None):
"""
Delete existing Telegram Bot
---
responseMessages:
- code: 401
message: Not authenticated
"""
return super(TelegramBotDetail, self).delete(request, bot_id, id, format)
[docs]class KikBotList(ListBotAPIView):
serializer = KikBotSerializer
many = False
def _query(self, bot):
return bot.kik_bot
def _creator(self, bot, serializer):
try:
kik_bot = KikBot.objects.create(api_key=serializer.data['api_key'],
username=serializer.data['username'],
enabled=serializer.data['enabled'])
except:
logger.error("Error trying to create Kik Bot %s" % serializer.data['api_key'])
raise
else:
bot.kik_bot = kik_bot
bot.save()
return kik_bot
[docs] def get(self, request, bot_id, format=None):
"""
Get list of Kik bots
---
serializer: KikBotSerializer
responseMessages:
- code: 401
message: Not authenticated
"""
return super(KikBotList, self).get(request, bot_id, format)
[docs] def post(self, request, bot_id, format=None):
"""
Add KIkBot
---
serializer: KikBotSerializer
responseMessages:
- code: 401
message: Not authenticated
- code: 400
message: Not valid request
"""
try:
return super(KikBotList, self).post(request, bot_id, format)
except:
return Response({"error": 'Kik Error. Check username/api_key or try later.'}, status=status.HTTP_400_BAD_REQUEST)
[docs]class KikBotDetail(DetailBotAPIView):
model = KikBot
serializer = KikBotSerializer
serializer_update = KikBotUpdateSerializer
[docs] def get(self, request, bot_id, id, format=None):
"""
Get KikBot by id
---
serializer: KikBotSerializer
responseMessages:
- code: 401
message: Not authenticated
"""
return super(KikBotDetail, self).get(request, bot_id, id, format)
[docs] def put(self, request, bot_id, id, format=None):
"""
Update existing KikBot
---
serializer: KikBotUpdateSerializer
responseMessages:
- code: 401
message: Not authenticated
- code: 400
message: Not valid request
"""
return super(KikBotDetail, self).put(request, bot_id, id, format)
[docs] def delete(self, request, bot_id, id, format=None):
"""
Delete existing Kik Bot
---
responseMessages:
- code: 401
message: Not authenticated
"""
return super(KikBotDetail, self).delete(request, bot_id, id, format)
[docs]class MessengerBotList(ListBotAPIView):
serializer = MessengerBotSerializer
many = False
def _query(self, bot):
return bot.messenger_bot
def _creator(self, bot, serializer):
try:
messenger_bot = MessengerBot.objects.create(token=serializer.data['token'],
enabled=serializer.data['enabled'])
except:
logger.error("Error trying to create Messenger Bot %s" % serializer.data['token'])
raise
else:
bot.messenger_bot = messenger_bot
bot.save()
return messenger_bot
[docs] def get(self, request, bot_id, format=None):
"""
Get list of Messenger bots
---
serializer: MessengerBotSerializer
responseMessages:
- code: 401
message: Not authenticated
"""
return super(MessengerBotList, self).get(request, bot_id, format)
[docs] def post(self, request, bot_id, format=None):
"""
Add MessengerBot
---
serializer: MessengerBotSerializer
responseMessages:
- code: 401
message: Not authenticated
- code: 400
message: Not valid request
"""
try:
return super(MessengerBotList, self).post(request, bot_id, format)
except:
return Response({"error": 'Messenger Error. Check Api key or try later.'}, status=status.HTTP_400_BAD_REQUEST)
[docs]class MessengerBotDetail(DetailBotAPIView):
model = MessengerBot
serializer = MessengerBotSerializer
serializer_update = MessengerBotUpdateSerializer
[docs] def get(self, request, bot_id, id, format=None):
"""
Get MessengerBot by id
---
serializer: MessengerBotSerializer
responseMessages:
- code: 401
message: Not authenticated
"""
return super(MessengerBotDetail, self).get(request, bot_id, id, format)
[docs] def put(self, request, bot_id, id, format=None):
"""
Update existing MessengerBot
---
serializer: MessengerBotUpdateSerializer
responseMessages:
- code: 401
message: Not authenticated
- code: 400
message: Not valid request
"""
return super(MessengerBotDetail, self).put(request, bot_id, id, format)
[docs] def delete(self, request, bot_id, id, format=None):
"""
Delete existing Messenger Bot
---
responseMessages:
- code: 401
message: Not authenticated
"""
return super(MessengerBotDetail, self).delete(request, bot_id, id, format)