channel.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import datetime
  2. from django.shortcuts import render, get_object_or_404
  3. from django.http import HttpResponseRedirect
  4. from django.urls import reverse
  5. from django.contrib.auth.decorators import login_required, permission_required
  6. from rotbot.models import Network, Channel, User, Message, Action, Notice, TempChannelKey, Join, Kick
  7. from rotbot.forms import ChannelForm
  8. from .common import default_keywords, shorten_number, total_messages
  9. def channel(request, channel_slug):
  10. channel = get_object_or_404(Channel, slug=channel_slug)
  11. network = Network.objects.get(id=channel.network.id)
  12. messages = Message.objects.filter(channel=channel)
  13. actions = Action.objects.filter(channel=channel)
  14. notices = Notice.objects.filter(channel=channel)
  15. joins = Join.objects.filter(channel=channel)
  16. kicks = Kick.objects.filter(channel=channel)
  17. context = {
  18. 'parent_title': network.name,
  19. 'parent_url': reverse('rotbot:network', args=(network.slug,)),
  20. 'parent_icon': 'sitemap',
  21. 'title': channel.name,
  22. 'icon': 'hashtag',
  23. 'description': 'Details of channel %s on network %s' % (channel.name, network.name),
  24. 'keywords': default_keywords() + '%s, %s' % (network.name, channel.name),
  25. 'channel': channel,
  26. 'network': network,
  27. 'total_messages': shorten_number(total_messages(messages)),
  28. 'total_actions': shorten_number(total_messages(actions)),
  29. 'total_notices': shorten_number(total_messages(notices)),
  30. 'total_joins': shorten_number(joins.count()),
  31. 'total_kicks': shorten_number(kicks.count()),
  32. }
  33. return render(request, 'rotbot/channel.html', context)
  34. @login_required
  35. @permission_required('rotbot.change_channel', raise_exception=True)
  36. def channel_settings(request, channel_slug):
  37. channel = get_object_or_404(Channel, slug=channel_slug)
  38. network = Network.objects.get(id=channel.network_id)
  39. if request.method == 'POST':
  40. form = ChannelForm(request.POST, instance=channel)
  41. if form.is_valid():
  42. form.save()
  43. return HttpResponseRedirect(reverse('rotbot:channel', args=(channel.slug,)))
  44. else:
  45. form = ChannelForm(instance=channel)
  46. context = {
  47. 'parent_title': network.name,
  48. 'parent_url': reverse('rotbot:network', args=(network.slug,)),
  49. 'parent_icon': 'sitemap',
  50. 'title': channel.name,
  51. 'icon': 'hashtag',
  52. 'description': 'Change settings for channel %s on network %s' % (channel.name, network.name),
  53. 'keywords': default_keywords() + 'settings, %s, %s' % (network.name, channel.name),
  54. 'channel_slug': channel.slug,
  55. 'network_slug': network.slug,
  56. 'form': form,
  57. }
  58. return render(request, 'rotbot/channel_settings.html', context)
  59. def ircauth_channel_settings(request, temp_key):
  60. key = get_object_or_404(TempChannelKey, key=temp_key)
  61. channel = Channel.objects.get(id=key.channel_id)
  62. network = Network.objects.get(id=key.network_id)
  63. print(key.created.replace(tzinfo=None))
  64. print(datetime.datetime.now() - datetime.timedelta(minutes=10))
  65. if key.created.replace(tzinfo=None) + datetime.timedelta(hours=1)> datetime.datetime.now() - datetime.timedelta(minutes=10):
  66. key_expired = False
  67. else:
  68. key_expired = True
  69. if request.method == 'POST':
  70. if recent_key:
  71. form = ChannelForm(request.POST, instance=channel)
  72. if form.is_valid():
  73. form.save()
  74. key.delete()
  75. return HttpResponseRedirect(reverse('rotbot:channel', args=(channel.slug,)))
  76. else:
  77. form = ChannelForm(instance=channel)
  78. context = {
  79. 'parent_title': network.name,
  80. 'parent_url': reverse('rotbot:network', args=(network.slug,)),
  81. 'parent_icon': 'sitemap',
  82. 'title': channel.name,
  83. 'icon': 'hashtag',
  84. 'description': 'Change settings for channel %s on network %s' % (channel.name, network.name),
  85. 'keywords': default_keywords() + 'settings, %s, %s' % (network.name, channel.name),
  86. 'channel_slug': channel.slug,
  87. 'network_slug': network.slug,
  88. 'form': form,
  89. 'temp_key': temp_key,
  90. 'key_expired': key_expired,
  91. }
  92. return render(request, 'rotbot/channel_settings.html', context)