Write a Chat Ping Counter Your task is to write a program, that given a list of chat messages, count how many times each person gets pinged, so I can know how popular everyone is.  But, since I have to do it surreptitiously, I need it to be as small as possible so I can hide the code.
Specs

The input comes in a list of 2-tuples, with each item being of the form (&quot;username&quot;, &quot;message&quot;).
A ping to another user is defined as an @ followed by 3 or more letters that unambiguously refers to that user.
However, you also have to consider replies, which have to start with :messageid followed by a space.
Assume the first message has id 0 and proceed sequentially.
Output each user and say how many times each one got pinged.
The output can be in any order/reasonable format.
This is code-golf, so shortest code in bytes wins!

Test Cases
[[&quot;AlexA.&quot;, &quot;I am wrong&quot;], [&quot;Quartatoes&quot;, &quot;@Alex you are very wrong&quot;], [&quot;AlexA.&quot;, &quot;:1 I am only slightly wrong&quot;]]
AlexA.: 1
Quartatoes: 1

[[&quot;Doorknob&quot;, &quot;I have never eaten an avocad.&quot;], [&quot;AquaTart&quot;, &quot;:0 I will ship you an avocad&quot;], [&quot;AlexA.&quot;, &quot;:0 this is shocking&quot;]]
Doorknob: 2
AquaTart: 0
AlexA.: 0

[[&quot;Geobits&quot;, &quot;I like causing sadness through downvotes.&quot;], [&quot;Flawr&quot;, &quot;I want to put random message ids in my chat messages :0 askjdaskdj&quot;]]
Geobits: 0
Flawr: 0

[[&quot;Downgoat&quot;, &quot;goatigfs.com/goatgif&quot;], [&quot;Downotherthing&quot;, &quot;@Downgoat cool gifs&quot;], [&quot;Dennis&quot;, &quot;@Down cool gifs this is an ambiguous ping&quot;]]
Downgoat: 1
Downotherthing: 0
Dennis: 0
JavaScript (ES6), 245 210 bytes
a=&gt;(p={},a.map(b=&gt;p[b[0]]=0),(a.map(b=&gt;b[1].match(/@[a-z]{3,}|^:\d+/gi)||[]).map(c=&gt;c.map(d=&gt;(z=(d[0]=='@'?(y=Object.keys(p).filter(e=&gt;e.startsWith(d.slice(1)))).length&lt;2?y:0:a[d.slice(1)[0]]))&amp;&amp;p[z[0]]++))),p)

Uses an object to create a unique list of names alongside pings. Then it looks through the messages for matches to either ping condition. If a name, it looks through the list of names to find if there is only one match, and then increments. If a reply, it simply references that index in the message array and pulls the name to be incremented. Finally, it returns the object.