4
4
Requires:
5
5
server_info.py
6
6
"""
7
+ import asyncio
7
8
import gc
8
9
import json
9
10
import logging
26
27
27
28
logger = logging .getLogger ("cloudbot" )
28
29
30
+ data_lock = asyncio .Lock ()
31
+
29
32
30
33
class WeakDict (dict ):
31
34
"""
@@ -520,7 +523,7 @@ def replace_user_data(conn, chan_data):
520
523
del chan_data .users [old_nick ]
521
524
522
525
523
- @hook .irc_raw (['353' , '366' ], singlethread = True , do_sieve = False )
526
+ @hook .irc_raw (['353' , '366' ], singlethread = True , lock = data_lock , do_sieve = False )
524
527
def on_names (conn , irc_paramlist , irc_command ):
525
528
"""
526
529
:type conn: cloudbot.client.Client
@@ -596,7 +599,7 @@ def serialize(self, mapping, **kwargs):
596
599
return json .dumps (self ._serialize (mapping ), ** kwargs )
597
600
598
601
599
- @hook .permission ("chanop" )
602
+ @hook .permission ("chanop" , lock = data_lock , do_sieve = False )
600
603
def perm_check (chan , conn , nick ):
601
604
"""
602
605
:type chan: str
@@ -687,7 +690,7 @@ def getdata_cmd(conn, chan, nick):
687
690
return web .paste (MappingSerializer ().serialize (memb , indent = 2 ))
688
691
689
692
690
- @hook .irc_raw (['PRIVMSG' , 'NOTICE' ], do_sieve = False )
693
+ @hook .irc_raw (['PRIVMSG' , 'NOTICE' ], lock = data_lock , do_sieve = False )
691
694
def on_msg (conn , nick , user , host , irc_paramlist ):
692
695
chan , * other_data = irc_paramlist
693
696
@@ -711,7 +714,7 @@ def on_msg(conn, nick, user, host, irc_paramlist):
711
714
memb .data ['last_privmsg' ] = time .time ()
712
715
713
716
714
- @hook .periodic (600 )
717
+ @hook .periodic (600 , lock = data_lock , do_sieve = False )
715
718
def clean_pms (bot ):
716
719
cutoff = time .time () - 600
717
720
for conn in bot .connections .values ():
@@ -728,7 +731,7 @@ def clean_pms(bot):
728
731
pass
729
732
730
733
731
- @hook .irc_raw ('JOIN' , do_sieve = False )
734
+ @hook .irc_raw ('JOIN' , lock = data_lock , do_sieve = False )
732
735
def on_join (nick , user , host , conn , irc_paramlist ):
733
736
"""
734
737
:type nick: str
@@ -784,7 +787,7 @@ def _parse_mode_string(modes, params, status_modes, mode_types):
784
787
return new_modes
785
788
786
789
787
- @hook .irc_raw ('MODE' , do_sieve = False )
790
+ @hook .irc_raw ('MODE' , lock = data_lock , do_sieve = False )
788
791
def on_mode (chan , irc_paramlist , conn ):
789
792
"""
790
793
:type chan: str
@@ -823,7 +826,7 @@ def on_mode(chan, irc_paramlist, conn):
823
826
member .sort_status ()
824
827
825
828
826
- @hook .irc_raw ('PART' , do_sieve = False )
829
+ @hook .irc_raw ('PART' , lock = data_lock , do_sieve = False )
827
830
def on_part (chan , nick , conn ):
828
831
"""
829
832
:type chan: str
@@ -838,7 +841,7 @@ def on_part(chan, nick, conn):
838
841
del chan_data .users [nick ]
839
842
840
843
841
- @hook .irc_raw ('KICK' , do_sieve = False )
844
+ @hook .irc_raw ('KICK' , lock = data_lock , do_sieve = False )
842
845
def on_kick (chan , target , conn ):
843
846
"""
844
847
:type chan: str
@@ -848,7 +851,7 @@ def on_kick(chan, target, conn):
848
851
on_part (chan , target , conn )
849
852
850
853
851
- @hook .irc_raw ('QUIT' , do_sieve = False )
854
+ @hook .irc_raw ('QUIT' , lock = data_lock , do_sieve = False )
852
855
def on_quit (nick , conn ):
853
856
"""
854
857
:type nick: str
@@ -862,7 +865,7 @@ def on_quit(nick, conn):
862
865
del chan .users [nick ]
863
866
864
867
865
- @hook .irc_raw ('NICK' , do_sieve = False )
868
+ @hook .irc_raw ('NICK' , lock = data_lock , do_sieve = False )
866
869
def on_nick (nick , irc_paramlist , conn ):
867
870
"""
868
871
:type nick: str
@@ -889,7 +892,7 @@ def on_nick(nick, irc_paramlist, conn):
889
892
user_chans [new_nick ] = user_chans .pop (nick )
890
893
891
894
892
- @hook .irc_raw ('ACCOUNT' , do_sieve = False )
895
+ @hook .irc_raw ('ACCOUNT' , lock = data_lock , do_sieve = False )
893
896
def on_account (conn , nick , irc_paramlist ):
894
897
"""
895
898
:type nick: str
@@ -899,7 +902,7 @@ def on_account(conn, nick, irc_paramlist):
899
902
get_users (conn ).getuser (nick ).account = irc_paramlist [0 ]
900
903
901
904
902
- @hook .irc_raw ('CHGHOST' , do_sieve = False )
905
+ @hook .irc_raw ('CHGHOST' , lock = data_lock , do_sieve = False )
903
906
def on_chghost (conn , nick , irc_paramlist ):
904
907
"""
905
908
:type nick: str
@@ -912,7 +915,7 @@ def on_chghost(conn, nick, irc_paramlist):
912
915
user .host = host
913
916
914
917
915
- @hook .irc_raw ('AWAY' , do_sieve = False )
918
+ @hook .irc_raw ('AWAY' , lock = data_lock , do_sieve = False )
916
919
def on_away (conn , nick , irc_paramlist ):
917
920
"""
918
921
:type nick: str
@@ -929,7 +932,7 @@ def on_away(conn, nick, irc_paramlist):
929
932
user .away_message = reason
930
933
931
934
932
- @hook .irc_raw ('352' , do_sieve = False )
935
+ @hook .irc_raw ('352' , lock = data_lock , do_sieve = False )
933
936
def on_who (conn , irc_paramlist ):
934
937
"""
935
938
:type irc_paramlist: cloudbot.util.parsers.irc.ParamList
@@ -949,7 +952,7 @@ def on_who(conn, irc_paramlist):
949
952
user .is_oper = is_oper
950
953
951
954
952
- @hook .irc_raw ('311' , do_sieve = False )
955
+ @hook .irc_raw ('311' , lock = data_lock , do_sieve = False )
953
956
def on_whois_name (conn , irc_paramlist ):
954
957
"""
955
958
:type irc_paramlist: cloudbot.util.parsers.irc.ParamList
@@ -962,7 +965,7 @@ def on_whois_name(conn, irc_paramlist):
962
965
user .realname = realname
963
966
964
967
965
- @hook .irc_raw ('330' , do_sieve = False )
968
+ @hook .irc_raw ('330' , lock = data_lock , do_sieve = False )
966
969
def on_whois_acct (conn , irc_paramlist ):
967
970
"""
968
971
:type irc_paramlist: cloudbot.util.parsers.irc.ParamList
@@ -972,7 +975,7 @@ def on_whois_acct(conn, irc_paramlist):
972
975
get_users (conn ).getuser (nick ).account = acct
973
976
974
977
975
- @hook .irc_raw ('301' , do_sieve = False )
978
+ @hook .irc_raw ('301' , lock = data_lock , do_sieve = False )
976
979
def on_whois_away (conn , irc_paramlist ):
977
980
"""
978
981
:type irc_paramlist: cloudbot.util.parsers.irc.ParamList
@@ -984,7 +987,7 @@ def on_whois_away(conn, irc_paramlist):
984
987
user .away_message = msg
985
988
986
989
987
- @hook .irc_raw ('312' , do_sieve = False )
990
+ @hook .irc_raw ('312' , lock = data_lock , do_sieve = False )
988
991
def on_whois_server (conn , irc_paramlist ):
989
992
"""
990
993
:type irc_paramlist: cloudbot.util.parsers.irc.ParamList
@@ -994,7 +997,7 @@ def on_whois_server(conn, irc_paramlist):
994
997
get_users (conn ).getuser (nick ).server = server
995
998
996
999
997
- @hook .irc_raw ('313' , do_sieve = False )
1000
+ @hook .irc_raw ('313' , lock = data_lock , do_sieve = False )
998
1001
def on_whois_oper (conn , irc_paramlist ):
999
1002
"""
1000
1003
:type irc_paramlist: cloudbot.util.parsers.irc.ParamList
0 commit comments