If you say "My bot has a subscription TO shore" or "Shore has a subscription FROM my bot", "from" and "to" will make more sense.
So, if the bot's roster has:
<item jid='[email protected]' subscription='to'/>
Then the bot will see shore's presence, but shore will not see the bot's presence, assuming that shore's roster has:
<item jid='[email protected]' subscription='from'/>
It's possible for these states to get out of sync, due to network problems and the like. In those cases, the easiest way to fix the problem is to remove the item (which should end up effectively removing the item on the other side), then re-add (see RFC 3921bis, section 2.5.1 for details):
<iq from='[email protected]/background'
id='delete_1'
type='set'>
<query xmlns='jabber:iq:roster'>
<item jid='[email protected]' subscription='remove'/>
</query>
</iq>
<presence type='subscribe'
from='[email protected]/background'
to='[email protected]'/>
The thing to keep in mind is that even if the subscription is in the direction shown, the bot MAY be sending directed presence to shore, in which case shore would see presence from the both even though he is not subscribed to the bot. Check the bot's protocol log, and you may see something like:
<presence to='[email protected]'/>